DNN反向传播推导过程

DNN反向传播推导简介

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

这里假设DNN的损失函数如: J ( W , b , x , y ) = 1 2 | | a L y | | 2 2
其中输出层为第L层,输出结果 a L = σ ( z L ) = σ ( W L a L 1 + b L ) ,这样损失函数变为:

J ( W , b , x , y ) = 1 2 | | σ ( W L a L 1 + b L ) y | | 2 2

求解W,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

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 ) z L ,因此可以先把这一部分算出来,既损失函数对 z L 的导数记为:
δ L = J ( W , b , x , y ) z L = ( a L y ) σ ( z L )

现在我们终于把输出层的梯度算出来了,那么如何计算上一层 L 1 层的梯度,上上层 L 2 层的梯度呢?这里我们需要一步步的递推,注意到对于第 l 层的未激活输出 z l ,它的梯度可以表示为:
δ 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 ,则该层的 W l , b l 很容易计算,因为根据前向传播有:
z l = W l a l 1 + b l

所以求得 W l , b l 梯度如下:
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 ) b l = J ( W , b , x , y ) z l z l b l = δ l

所以问题的关键就是求 δ l ,我们用数学归纳法,第 L 层的 δ L 上面我们已经求出,假设第 l + 1 层的 δ l + 1 已经求出来了,那么如何求第 l 层的 δ l 呢?注意这里:
δ 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 的关键在于如何求解 δ l + 1 δ l
z l + 1 z l 的关系很容易找出:
z l + 1 = W l + 1 a l + b l + 1 = W l + 1 σ ( z l ) + b l + 1

可以得出:
z l + 1 z l = ( W l + 1 ) T ( σ ( z l ) , . . , σ ( z l ) ) n l + 1

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

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

δ l = δ l + 1 z l + 1 z l = ( W l + 1 ) T δ l + 1 σ ( z l )

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

参考资料:
http://www.cnblogs.com/pinard/p/6422831.html

猜你喜欢

转载自blog.csdn.net/xuezhan123/article/details/79646719