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