赞
踩
这篇文章介绍一下反向传播算法和梯度下降法的简单定义(我自己简单定义的,有错误还请您不吝赐教)、基本流程和参数计算。
反向传播算法流程是:用正向计算算出来的值与真实值计算误差,根据误差,再利用某种优化规则更新神经网络中的各个参数,让神经网络计算出来的数更符合预期。
我们这里用梯度下降法作为优化规则。
我们先明确反向传播中梯度下降的流程是:算不同参数对应的梯度,再用梯度更新原来的参数,让整个神经网络中的参数变的更好,这样更新完后,整个神经网络算出来的结果会更好。
于是这篇文章分为两个部分:
目录
一、怎么算梯度?
我们知道,每个神经网络有一个误差函数E,用来计算误差的。结构是这样:
输入一个X,经过中间的运算得到一个Y,最后会有一个误差函数E来衡量这个Y与真实值的误差。
那么
我们要算哪些参数的梯度呢?
可以看到组成神经网络的参数有权重w和偏置b,激活函数f1和f2是规定好的激活规则,不用更新(也就不需要算梯度)。所以,我们需要更新的参数只有权重w和偏置b,也就是只需要算w和b的梯度。
不说数学推导,直接说结论
要算w的梯度,就用误差函数E求对应w的偏导,求出来的就是对应w的梯度,式子为:。
比如我们要求w2的梯度,怎么求呢?
这样求:
就是把式子展开往后写,写成跟w2有关的式子(因为w2先变成u,u再变成Y,Y再跟E有关。)
第一项就是误差函数E对Y求导,
第二项就是激活函数f2的导数(因为)
所有的梯度都这么求。
再比如求b2的梯度:
简单的会了,那往前推的参数对应的梯度怎么求呢?
假设输入层i输入Xi,经过计算得到中间层j的值Yj,对于输出层k来说,Yj就是k层的输入值Xk。
我们想要求w1的梯度,怎么求?
求解:
解释:
这里面的
第一项就是误差函数E对Y求导,
第二项就是激活函数f2的导数,
第三项是u2对输入值Yj的求导(因为此时Yj就是第k层的输入值“X”,即),
第四项是第j层激活函数f1的求导(因为),
第五项是第j层u1对权重w1的求导(因为)。
好了,现在所有参数对应梯度都会求了!(*^▽^*)
非常简单,直接用原来的参数减去(梯度乘学习率)。
其中w'是更新后的参数,w是原来的参数,eta是自己设定的学习率(比如10%),grad(w)是算出来的w的梯度。
好了,现在你都会了!(#^.^#)想要了解原理的可以去看看大佬们的帖子,很详细。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。