BP网络反向传播推导

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

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

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

在这里插入图片描述

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

损失函数

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

计算输出层第L层的梯度

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

损失函数就变为:
J ( W , b , x , y ) = 1 2 ∣ ∣ a L − y ∣ ∣ 2 2 = 1 2 ∣ ∣ σ ( W L a L − 1 + b L ) − y ∣ ∣ 2 2 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 J(W,b,x,y)=21aLy22=21σ(WLaL1+bL)y22
从上式就可以求 W W W b b b的梯度:
∂ J ( W , b , x , y ) ∂ W L = ∂ J ( W , b , x , y ) ∂ z L ∂ z L ∂ W L = [ ( a L − y ) ⊙ σ ′ ( z L ) ] ( a L − 1 ) 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 WLJ(W,b,x,y)=zLJ(W,b,x,y)WLzL=[(aLy)σ(zL)](aL1)T
求导过程中用到了链式法则和复合函数的求导法则,而对于离散型变量的求导则是将其系数矩阵转置,且座乘右乘也要相同,其中 A ⊙ B = ( a 1 b 1 , a 2 b 2 , . . . a n b n ) T A \odot B = (a_1b_1, a_2b_2,...a_nb_n)^T AB=(a1b1,a2b2,...anbn)T

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

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

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

现在就可以对每一层的 W W W b b b求解梯度了,由于 z l = W l a l − 1 + b l z^l= W^la^{l-1} + b^l zl=Wlal1+bl
∂ J ( W , b , x , y ) ∂ W l = ∂ J ( W , b , x , y ) ∂ z l ∂ z l ∂ W l = δ l ( a l − 1 ) 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 WlJ(W,b,x,y)=zlJ(W,b,x,y)Wlzl=δl(al1)T

∂ J ( W , b , x , y ) ∂ b l = ∂ J ( W , b , x , y ) ∂ z l ∂ b l ∂ W l = δ 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} blJ(W,b,x,y)=zlJ(W,b,x,y)Wlbl=δl

参数更新

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值