您的位置:首页 > 其它

DNN反向传播推导过程

2018-03-21 21:52 309 查看

DNN反向传播推导简介

如果对DNN前向传播,梯度下降不熟悉,建议先了解一下。

这里假设DNN的损失函数如:J(W,b,x,y)=12||aL−y||22J(W,b,x,y)=12||aL−y||22

其中输出层为第L层,输出结果aL=σ(zL)=σ(WLaL−1+bL)aL=σ(zL)=σ(WLaL−1+bL),这样损失函数变为:

J(W,b,x,y)=12||σ(WLaL−1+bL)−y||22J(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)∂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)∂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∂J(W,b,x,y)∂zL,因此可以先把这一部分算出来,既损失函数对zLzL的导数记为:

δL=∂J(W,b,x,y)∂zL=(aL−y)⊙σ′(zL)δL=∂J(W,b,x,y)∂zL=(aL−y)⊙σ′(zL)

现在我们终于把输出层的梯度算出来了,那么如何计算上一层L−1L−1层的梯度,上上层L−2L−2层的梯度呢?这里我们需要一步步的递推,注意到对于第ll层的未激活输出zlzl,它的梯度可以表示为:

δ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)∂zl=∂J(W,b,x,y)∂zL∂zL∂zL−1∂zL−1∂zL−2···∂zl+1∂zl

如果可以算出来第ll层δlδl,则该层的Wl,blWl,bl很容易计算,因为根据前向传播有:

zl=Wlal−1+blzl=Wlal−1+bl

所以求得Wl,blWl,bl梯度如下:

∂J(W,b,x,y)∂Wl=∂J(W,b,x,y)∂zl∂zl∂Wl=δl(al−1)T∂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∂J(W,b,x,y)∂bl=∂J(W,b,x,y)∂zl∂zl∂bl=δl

所以问题的关键就是求δlδl,我们用数学归纳法,第LL层的δLδL上面我们已经求出,假设第l+1l+1层的δl+1δl+1已经求出来了,那么如何求第ll层的δ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)∂zl=∂J(W,b,x,y)∂zl+1∂zl+1∂zl=δl+1∂zl+1∂zl

可见,用归纳法递推δl+1δl+1和δlδl的关键在于如何求解δl+1δlδl+1δl

zl+1zl+1和zlzl的关系很容易找出:

zl+1=Wl+1al+bl+1=Wl+1σ(zl)+bl+1zl+1=Wl+1al+bl+1=Wl+1σ(zl)+bl+1

可以得出:

∂zl+1∂zl=(Wl+1)T⊙(σ′(zl),..,σ′(zl))nl+1∂zl+1∂zl=(Wl+1)T⊙(σ′(zl),..,σ′(zl))⏟nl+1

上式的Hadamard乘积表达的意义是 权值矩阵的每一个列向量都点乘σ′(zl)σ′(zl)

将上式带入上面δlδl和δl+1δl+1的关系我们得出:

δl=δl+1∂zl+1∂zl=(Wl+1)Tδl+1⊙σ′(zl)δl=δl+1∂zl+1∂zl=(Wl+1)Tδl+1⊙σ′(zl)

得到了δlδl的递推关系,只要求出某一层的δlδl,求解Wl,blWl,bl对应的梯度就很简单了。

参考资料:

http://www.cnblogs.com/pinard/p/6422831.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: