BP算法推导

来源:互联网 发布:网络电话攻击软件 编辑:程序博客网 时间:2024/05/28 17:04
反向传播算法是深度学习的基础之一,其主要的核心就是对代价函数$E$关于权重$w$(或偏置$b$)的偏导数${\partial E}$/${\partial w}$的表达式。这个表达式代表在改变权值和偏置时,代价函数变化的快慢。使用$w_{jk}^l$表示从$(l-1)^{th}$层的$k^{th}$神经元到$l^{th}$层的$j^{th}$神经元上的权重。之所以$l$的序号在$(l-1)$层的序号之前,是因为后期进行矩阵运算的时候会比较方便。有了这些,$l^{th}$层的$j^{th}$神经元的激活值$a_j^l$就和$(l-1)^{th}$层关联起来了:$a_j^l = \sigma (\sum\limits_{k} w_{jk}^la_k^{l-1}+b_j^l)$基础的BP算法中$\sigma(x)$为sigmoid函数,即$\sigma(x)=\frac{1}{1+e^{-x}}$BP算法的二次代价函数是LMS(最小均方差),其定义为:$E = \frac{1}{2}\sum\limits_{j}(y_j-a_j^L)^2$设$z_k^l=\sum\limits_{k} w_{jk}^la_k^{l-1}+b_j^l$,则$a_j^l = \sigma (z_k^l)$设$\delta_j^l=\frac{\partial E}{\partial z_j^l}$,以代表该神经元的误差,以$\delta_j^l$代表$l$层的误差向量。之所以不用$\frac{\partial E}{\partial a_j^l}$是因为后面用$\frac{\partial E}{\partial z_j^l}$来计算隐藏层误差的时候更加方便。 隐藏层中$\delta^l=\frac{\partial E}{\partial z_j^l}$的值可以通过下一层的误差$\delta^{l+1}$获得:$\delta_k^l=(\sum\limits_{j}w_{jk}^{l+1}\delta_j^{l+1})\sigma'(z_k^l)$所以总结出4个方程式:$\delta^L = \nabla_aE$⊙$\delta'(z^L)$ (BP1)$\delta_k^l=((w^{l+1})^T\delta_j^{l+1})$⊙$\sigma'(z^l)$ (BP2)$\frac{\partial E}{\partial b_j^l}=\delta_j^l$ (BP3)$\frac{\partial E}{\partial w_{jk}^l}=a_k^{l-1}\delta_j^l$ (BP4)(BP1)的证明:$\delta^L$的定义是:$\delta_j^L = \frac{\partial E}{\partial z_j^L}$于是,应用链式法则,对其求导,可以把上面的式子表示为$\delta_j^L = \sum\limits_{k}\frac{\partial E}{\partial a_k^L}\frac{\partial a_k^L}{\partial z_j^L}$由于$E$只通过$a_j^L$与$z_j^L$关联,所以,当$k\neq j$时,$\frac{\partial a_k^L}{\partial z_j^L}$消失了,于是,简化后的方程为:$\delta_j^L = \frac{\partial E}{\partial a_j^L}\frac{\partial a_j^L}{\partial z_j^L}$这正是分量形式的(BP1)(BP2)的证明$\delta_j^l=\frac{\partial E}{\partial z_j^l}$$=\sum\limits_{k}\frac{\partial E}{\partial z_k^{l+1}}\frac{\partial z_k^{l+1}}{\partial z_j^l}$$=\sum\limits_{k}\frac{\partial z_k^{l+1}}{\partial z_j^l}\delta_k^{l+1}$ (1)由于$z_k^{l+1}=\sum\limits_{j}w_{kj}^{l+1}a_j^l+b_k^{l+1}=\sum\limits_{j}w_{kj}^{l+1}\sigma(z_j^l)+b_k^{l+1}\$所以,做微分,可以得到$\frac{\partial z_k^{l+1}}{\partial z_j^l}=w_{kj}^{l+1}\sigma'(z_j^l)$所以,把他带入(1)得:$\delta_j^l=\sum\limits_{k}w_{kj}^{l+1}\delta_k^{l+1}\delta '(z_j^l)$ (BP3)与(BP4)证明:$\frac{\partial E}{\partial w_{jk}^l}=\frac{\partial E}{\partial z_j^l}\frac{\partial z_j^l}{\partial w_{jk}^l}$ (2A)$\frac{\partial E}{\partial b_{j}^l}=\frac{\partial E}{\partial z_j^l}\frac{\partial z_j^l}{\partial b_{j}^l}$ (2B)因为:$\delta_j^l$的定义就是$\frac{\partial E}{\partial z_j^l}$,所以将其代入(2)变为:$\frac{\partial E}{\partial w_{jk}^l}=\frac{\partial z_j^l}{\partial w_{jk}^l}\delta_j^l$ (3A)$\frac{\partial E}{\partial b_{j}^l}=\frac{\partial z_j^l}{\partial b_{j}^l}\delta_j^l$ (3B)由于:$z_j^l=\sum\limits_{k}w_{jk}^la_k^{l-1}+b_j^l$,所以:$\frac{\partial z_j^l}{\partial w_{jk}^l}=a_k^{l-1}$ (4A)$\frac{\partial z_j^l}{\partial b_{j}^l}=1$ (4B)于是将(4A)带入(3A),(4B)带入(3B)中,得:$\frac{\partial E}{\partial w_{jk}^l}=a_k^{l-1}\delta_j^l$$\frac{\partial E}{\partial w_{jk}^l}=\delta_j^l$以上即(BP3)和(BP4)的证明 以上为BP算法最基础的证明公式参考资料:[1] Mitchell.机器学习[M][2] Michael Nielsen.《神经网络与深度学习》[M][3] Hagan.《神经网络设计》[M]以上格式是根据《神经网络与深度学习》书中的格式进行的,为了完全理解其概念,先后阅读了Mitchell的《机器学习》与《神经网络设计》。Mitchell的机器学习中的推导最容易理解,神经网络设计中将其用矩阵形式进行实现。  

查看原文:http://data.1kapp.com/?p=218
原创粉丝点击