BP神经网络反向传播算法、梯度下降法流程及参数解释

这篇文章介绍一下反向传播算法和梯度下降法的简单定义(我自己简单定义的,有错误还请您不吝赐教)、基本流程和参数计算。

反向传播算法流程是:用正向计算算出来的值真实值计算误差,根据误差,再利用某种优化规则更新神经网络中的各个参数,让神经网络计算出来的数更符合预期。

我们这里用梯度下降法作为优化规则。

我们先明确反向传播中梯度下降的流程是:算不同参数对应的梯度,再用梯度更新原来的参数,让整个神经网络中的参数变的更好,这样更新完后,整个神经网络算出来的结果会更好。

于是这篇文章分为两个部分:

目录

一、怎么算梯度?

二、怎么利用求出来的这些梯度更新参数?


怎么算梯度?

我们知道,每个神经网络有一个误差函数E,用来计算误差的。结构是这样:

BP神经网络反向传播算法、梯度下降法流程及参数解释_第1张图片

输入一个X,经过中间的运算得到一个Y,最后会有一个误差函数E来衡量这个Y与真实值的误差。 

那么

我们要算哪些参数的梯度呢?

可以看到组成神经网络的参数有权重w偏置b,激活函数f1f2是规定好的激活规则,不用更新(也就不需要算梯度)。所以,我们需要更新的参数只有权重w偏置b,也就是只需要算wb的梯度。

不说数学推导,直接说结论

要算w的梯度,就用误差函数E求对应w的偏导,求出来的就是对应w的梯度,式子为:\frac{\partial E}{\partial w}

比如我们要求w2的梯度,怎么求呢?

这样求:\frac{\partial E}{\partial w2}=\frac{\partial E}{\partial Y}*\frac{\partial Y}{\partial u}*\frac{\partial u}{\partial w2}

就是把式子展开往后写,写成跟w2有关的式子(因为w2先变成uu再变成YY再跟E有关。)

第一项\frac{\partial E}{\partial Y}就是误差函数EY求导,

第二项\frac{\partial Y}{\partial u}就是激活函数f2的导数(因为f_{2}(u)=Y

所有的梯度都这么求。

再比如求b2的梯度:\frac{\partial E}{\partial b2}=\frac{\partial E}{\partial Y}*\frac{\partial Y}{\partial u}*\frac{\partial u}{\partial b2}

简单的会了,那往前推的参数对应的梯度怎么求呢?

假设输入层i输入Xi,经过计算得到中间层j的值Yj,对于输出层k来说,Yj就是k层的输入值Xk

我们想要求w1的梯度,怎么求?

求解:

\frac{\partial E}{\partial w_{1}}=\frac{\partial E}{\partial Y}*\frac{\partial Y}{\partial u_{2}}*\frac{\partial u_{2}}{\partial Y_{j}}*\frac{\partial Y_{j}}{\partial u_{1}}*\frac{\partial u_{1}}{\partial w_{1}}

解释:

这里面的

第一项\frac{\partial E}{\partial Y}就是误差函数EY求导,

第二项\frac{\partial Y}{\partial u_{2}}就是激活函数f2的导数,

第三项\frac{\partial u_{2}}{\partial Y_{j}}u2对输入值Yj的求导(因为此时Yj就是第k层的输入值“X”,即Y_{j}*w_{2}+b_{2}=u_{2}),第四项\frac{\partial Y_{j}}{\partial u_{1}}第j层激活函数f1的求导(因为f_{1}(u_{1})=Y_{j}),

第五项\frac{\partial u_{1}}{\partial w_{1}}第j层u1对权重w1的求导(因为X*w_{1}+b_{1}=u_{1})。

好了,现在所有参数对应梯度都会求了!(*^▽^*)

接下来看第二部分,怎么利用求出来的这些梯度更新参数?

非常简单,直接用原来的参数减去(梯度学习率)

w^{'}=w-eta*grad(w)

其中w'更新后的参数w原来的参数eta是自己设定的学习率(比如10%),grad(w)是算出来的w的梯度

好了,现在你都会了!(#^.^#)想要了解原理的可以去看看大佬们的帖子,很详细。

你可能感兴趣的:(算法,神经网络,机器学习)