DNN反向传播推导简介
如果对DNN前向传播,梯度下降不熟悉,建议先了解一下。
这里假设DNN的损失函数如:
J(W,b,x,y)=12||aL−y||22
其中输出层为第L层,输出结果
aL=σ(zL)=σ(WLaL−1+bL)
,这样损失函数变为:
J(W,b,x,y)=12||σ(WLaL−1+bL)−y||22
求解W,b的梯度为:
∂J(W,b,x,y)∂WL=∂J(W,b,x,y)∂zL∂zL∂WL=(aL−y)⊙σ′(zL)(aL−1)T
∂J(W,b,x,y)∂bL=∂J(W,b,x,y)∂zL∂zL∂bL=(aL−y)⊙σ′(zL)
注意到,求解W,b梯度时有公共部分
∂J(W,b,x,y)∂zL
,因此可以先把这一部分算出来,既损失函数对
zL
的导数记为:
δL=∂J(W,b,x,y)∂zL=(aL−y)⊙σ′(zL)
现在我们终于把输出层的梯度算出来了,那么如何计算上一层
L−1
层的梯度,上上层
L−2
层的梯度呢?这里我们需要一步步的递推,注意到对于第
l
层的未激活输出
zl
,它的梯度可以表示为:
δl=∂J(W,b,x,y)∂zl=∂J(W,b,x,y)∂zL∂zL∂zL−1∂zL−1∂zL−2⋅⋅⋅∂zl+1∂zl
如果可以算出来第
l
层
δl
,则该层的
Wl,bl
很容易计算,因为根据前向传播有:
zl=Wlal−1+bl
所以求得
Wl,bl
梯度如下:
∂J(W,b,x,y)∂Wl=∂J(W,b,x,y)∂zl∂zl∂Wl=δl(al−1)T
∂J(W,b,x,y)∂bl=∂J(W,b,x,y)∂zl∂zl∂bl=δl
所以问题的关键就是求
δl
,我们用数学归纳法,第
L
层的
δL
上面我们已经求出,假设第
l+1
层的
δl+1
已经求出来了,那么如何求第
l
层的
δl
呢?注意这里:
δl=∂J(W,b,x,y)∂zl=∂J(W,b,x,y)∂zl+1∂zl+1∂zl=δl+1∂zl+1∂zl
可见,用归纳法递推
δl+1
和
δl
的关键在于如何求解
δl+1δl
zl+1
和
zl
的关系很容易找出:
zl+1=Wl+1al+bl+1=Wl+1σ(zl)+bl+1
可以得出:
∂zl+1∂zl=(Wl+1)T⊙(σ′(zl),..,σ′(zl))nl+1
上式的Hadamard乘积表达的意义是 权值矩阵的每一个列向量都点乘
σ′(zl)
将上式带入上面
δl
和
δl+1
的关系我们得出:
δl=δl+1∂zl+1∂zl=(Wl+1)Tδl+1⊙σ′(zl)
得到了
δl
的递推关系,只要求出某一层的
δl
,求解
Wl,bl
对应的梯度就很简单了。
参考资料:
http://www.cnblogs.com/pinard/p/6422831.html