BP网络反向传播推导

COURSERA:多层神经网络反向传播的推导

多层神经网络反向传播的推导

BP网络其实就是多个逻辑斯特模型的组合,逻辑斯特模型的梯度下降反向传播请看上一篇。

在这里插入图片描述

首先,前向传播的过程是这样的
al=σ(zl)=σ(Wlal1+bl) a^l = \sigma(z^l) = \sigma(W^la^{l-1} + b^l)
ala^l是第L层的输出,列向量, WlW^l就是该层前面的权重,矩阵,blb^l是该层的偏置,列向量。

损失函数

在进行DNN反向传播算法前,我们需要选择一个损失函数,来度量训练样本计算出的输出和真实的训练样本输出之间的损失,比如均方误差:
J(W,b,x,y)=12aLy22 J(W,b,x,y) = \frac{1}{2}||a^L-y||_2^2
其中,aLa^Lyy为特征维度为noutn_{out}的向量,而S2||S||^2为S的L2范数。

计算输出层第L层的梯度

那么第L层关于WWbb的表达式为:
aL=σ(zL)=σ(WLaL1+bL) a^L = \sigma(z^L) = \sigma(W^La^{L-1} + b^L)
拆分来看,aL1{a^L}_1由前一层的四个神经元影响,这里就不拆分开了,其表达就是WLaL1W^La^{L-1}两个矩阵的点积,即2$\times444矩阵和4\times121矩阵点积,得到2\times$1矩阵。

损失函数就变为:
J(W,b,x,y)=12aLy22=12σ(WLaL1+bL)y22 J(W,b,x,y) = \frac{1}{2}||a^L-y||_2^2 = \frac{1}{2}|| \sigma(W^La^{L-1} + b^L)-y||_2^2
从上式就可以求WWbb的梯度:
J(W,b,x,y)WL=J(W,b,x,y)zLzLWL=[(aLy)σ(zL)](aL1)T \frac{\partial J(W,b,x,y)}{\partial W^L} =\frac{\partial J(W,b,x,y)}{\partial z^L}\frac{\partial z^L}{\partial W^L} = [(a^L-y) \odot \sigma^{'}(z^L)](a^{L-1})^T
求导过程中用到了链式法则和复合函数的求导法则,而对于离散型变量的求导则是将其系数矩阵转置,且座乘右乘也要相同,其中AB=(a1b1,a2b2,...anbn)TA \odot B = (a_1b_1, a_2b_2,...a_nb_n)^T

同理:
J(W,b,x,y)bL=(aLy)σ(zL) \frac{\partial J(W,b,x,y)}{\partial b^L} =(a^L-y)\odot \sigma^{'}(z^L)
这样,就得到了L层权重和偏置的梯度。

计算非输出层任意第ll层的梯度

为了方便向前面层传播,将J(W,b,x,y)zL\frac{\partial J(W,b,x,y)}{\partial z^L}记做δL\delta^L,叫做该层的误差,有:
δL=J(W,b,x,y)zL=(aLy)σ(zL) \delta^L = \frac{\partial J(W,b,x,y)}{\partial z^L} = (a^L-y)\odot \sigma^{'}(z^L)
现在,得到了第L层的梯度,就可以计算前面的某层ll的梯度,对于第ll层的未激活输出zlz^l,它的误差可以表示为:
δl=J(W,b,x,y)zl=J(W,b,x,y)zL(zLzL1zL1zL2...zl+1zl) \delta^l =\frac{\partial J(W,b,x,y)}{\partial z^l} = \frac{\partial J(W,b,x,y)}{\partial z^L}(\frac{\partial z^L}{\partial z^{L-1}}\frac{\partial z^{L-1}}{\partial z^{L-2}}...\frac{\partial z^{l+1}}{\partial z^{l}})
从第L层直接求第ll层的误差是不好求的,这里用到了数学归纳法,第L层的$\delta^L 上面我们已经求出, 假设第l+1层的\delta{l+1}$已经求出来了,那么我们就可以求第$l$层的$\deltal$:
δl=J(W,b,x,y)zl=J(W,b,x,y)zl+1zl+1zl=δl+1zl+1zl \delta^{l} = \frac{\partial J(W,b,x,y)}{\partial z^l} = \frac{\partial J(W,b,x,y)}{\partial z^{l+1}} \frac{\partial z^{l+1}}{\partial z^{l}} =\delta^{l+1}\frac{\partial z^{l+1}}{\partial z^{l}}
其中:未知量是zl+1zl\frac{\partial z^{l+1}}{\partial z^{l}},而zl+1=Wl+1al+bl+1=Wl+1σ(zl)+bl+1z^{l+1}= W^{l+1}a^{l} + b^{l+1} = W^{l+1}\sigma(z^l) + b^{l+1},所以:
zl+1zl=(Wl+1)Tσ(zl) \frac{\partial z^{l+1}}{\partial z^{l}} = {(W^{l+1})}^T\odot\sigma^{'}(z^l)
同样,求导后矩阵运算是左乘还是右乘需要与求导前保持一致,并且需要经过转置,此处需要进行矩阵的广播,将σ(zl)\sigma^{'}(z^l)广播成可以和前者运算的大小。
δl=(zl+1zl)TJ(W,b,x,y)zl+1=(Wl+1)Tδl+1σ(zl) \delta^{l} = (\frac{\partial z^{l+1}}{\partial z^{l}})^T\frac{\partial J(W,b,x,y)}{\partial z^{l+1}} =(W^{l+1})^T\delta^{l+1}\odot \sigma^{'}(z^l)
由于我们之前计算出了最后一层的delta误差δL\delta^{L} ,通过上式,我们可以依次求得一直到第二层的delta误差δ2\delta^{2} ,第一层为我们的输入,并不存在第一层的delta误差。因此我们的计算到第二层截止。

现在就可以对每一层的WWbb求解梯度了,由于zl=Wlal1+blz^l= W^la^{l-1} + b^l
J(W,b,x,y)Wl=J(W,b,x,y)zlzlWl=δl(al1)T \frac{\partial J(W,b,x,y)}{\partial W^l} = \frac{\partial J(W,b,x,y)}{\partial z^l}\frac{\partial z^l}{\partial W^l} = \delta^{l}(a^{l-1})^T

J(W,b,x,y)bl=J(W,b,x,y)zlblWl=δl \frac{\partial J(W,b,x,y)}{\partial b^l} = \frac{\partial J(W,b,x,y)}{\partial z^l}\frac{\partial b^l}{\partial W^l} = \delta^{l}

参数更新

到现在,就得到了所有层WWbb的梯度,可以进行权重更新了:
Wl=WlαJ(W,b,x,y)Wl W^l = W^l - α\frac{\partial J(W,b,x,y)}{\partial W^l}

bl=blαJ(W,b,x,y)bl b^l = b^l - α\frac{\partial J(W,b,x,y)}{\partial b^l}

,x,y)}{\partial W^l}
$$

bl=blαJ(W,b,x,y)bl b^l = b^l - α\frac{\partial J(W,b,x,y)}{\partial b^l}

发布了4 篇原创文章 · 获赞 0 · 访问量 3123
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览