DNN的反向传播

1. DNN反向传播图解

转载自:https://www.cnblogs.com/MatrixPlayer/p/7661232.html

 

其实反向传播算法从公式上来看,损失C对W的权重有两部分,

1)激活函数Z对W的偏导数 \frac{\partial z}{\partial W}=a,此项其实就是前向传播(a当前这个神经元的输入)

2)C对激活函数Z的偏导数,此项就是反向传播。

总结反向传播的计算:

为什么权值矩阵在反向传播是是乘以W的转置?

数学推导部分

正向传播:

反向传播:求梯度

2. 整个神经网络的公式推导

反向传播需要用到链式法则,所以定义一个中间变量\delta _i^{l+1}:

\delta _i^{l+1}=\frac{\partial L}{\partial z_i^{l+1}}

求单个神经元的梯度

根据链式求导法则,第 l 层的第 i 个神经元的梯度为:

\delta _i^{l}=\frac{\partial L}{\partial z_i^{l}}

    =\sum_k^{N^{l+1}}\frac{\partial L}{\partial z_k^{l+1}}\cdot \frac{\partial z_k^{l+1}}{\partial z_i^{l}}

因为正向传播时,第l+1层的神经元(共N^{l+1}个)会接收第l层所有神经元的输出值作为输入,所以反向传播时

l层的每个神经元的梯度都有第l+1层的所有结点的梯度累积求和得到。

\delta _i^{l}=\frac{\partial L}{\partial z_i^{l}}

    =\sum_k^{N^{l+1}}\frac{\partial L}{\partial z_k^{l+1}}\cdot \frac{\partial z_k^{l+1}}{\partial z_i^{l}}=\sum_k^{N^{l+1}}\frac{\partial L}{\partial z_k^{l+1}}\cdot \frac{\partial z_k^{l+1}}{\partial a_i^{l}}\cdot \frac{\partial a_i^{l}}{\partial z_i^{l}}

   =\sum_{k=1}^{N^{l+1}}\delta_k^{l+1}\cdot W_{ki}^{l+1}\cdot f(z_i^l)

lN^l个神经元的反向传播公式为:

简写成矩阵乘法的形式为:

\delta^l=(W^{l+1})^T\cdot \delta ^{l+1}\bigodot f'(z^l),其中\bigodot表示向量的对应元素相乘(点乘)

求权重W的梯度

l层权重矩阵W^l中某个权重W_{ij}^l 的梯度:

\frac{\partial L}{\partial W_{ij}^l}=\frac{\partial L}{\partial z_i^l}\cdot \frac{\partial z_i^l}{\partial W_{ij}^l}=\delta_i^l\cdot a_j^{l-1}

写成矩阵的形式为:

简写为:

\frac{\partial L}{\partial W^l}=\delta^l\cdot (a^{l-1})^T

对偏置b的梯度

\frac{\partial L}{\partial b_i^l}=\frac{\partial L}{\partial z_i^l}\cdot \frac{\partial z_i^l}{\partial b_i^l}=\delta_i^l\cdot 1

写成矩阵形式:

简写为:

\frac{\partial L}{\partial b_i^l}=\delta_i^l

 

论nn.Conv2d中的反向传播实现过程:https://blog.csdn.net/g11d111/article/details/83021651

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章