卷积层的反向梯度传播
我们先从最简单的情况开始推导
普通的反向传播
![](https://img.haomeiwen.com/i12302190/68b847986242ac40.jpg)
其中,
,我们想要更新权重,根据
,那么我们可以根据链式法则:
, 这样我们可以写成 w1,w2的更新公式:
#如果我们用的是Sigmoid函数,其导数的最大值为0.25,如果权重初始化的不合适,那很容易造成中间的累乘项越乘越小,从而导致梯度消失,所以我们一般会选择relu作为激活函数,同时权重的初始化也需要调好
上面的情况是最简单的情况,如果我们现在的网络隐藏层有多个神经元:
![](https://img.haomeiwen.com/i12302190/93e769548402d355.jpg)
我们还是用上面的思路,先求网络的残差:
然后我们就可以继续写出权重的更新公式,这里以w11作为一个参考:
卷积层的反向梯度传播
卷积的操作可以看作是两个矩阵的乘法,那这里假设左边的是我们的特征图或者输入图像,中间的是我们的卷积核,得到右边的卷积结果:
其中:
上面的式子也可以用图来表示出来:
![](https://img.haomeiwen.com/i12302190/41802fedd27bb1fd.png)
图中的左边的深绿色的圆点表示我们原图或者特征图中的a11-a33, 而中间的橘色的圆点表示的是卷积核的权重w11-w22,那么根据上图我们可以尝试写出反向传播的公式,其中卷积层的残差项, 其中
是计算的难点,我们用
来表示
然后尝试一项一项展开看看:
通过以上可以发现一个规律:
=
那么也就是说卷积层的残差计算可以写成:
对于卷积核权重的更新,
, 根据上图,我们可以尝试把每个权重的更新写出来:
同样,我们也可以写成矩阵的形式:
,其中
可以根据上面推出来的残差更新公式进行计算
池化层的反向梯度传播
池化层在反向梯度传播中做的就是起到了一个梯度传递的作用,将一个pixel的梯度传递给多个pixel,但是要保证传递的梯度的总和不变。同时根据不同的池化层,反向传播也是不一样的。
Average Pooling:
正向传播的时候,取一个patch的平均值作为pooling的结果,那么反向传播的时候,就是把一个pixel的梯度平均分给多个pixel
![](https://img.haomeiwen.com/i12302190/f5bfafcd918d2507.png)
Max pooling:
正向传播的时候,取一个patch的最大值作为pooling的结果,反向传播的时候,要记住哪个位置的像素值最大,我们将对应的梯度传递给最大像素所在的位置,其他位置是0
![](https://img.haomeiwen.com/i12302190/efc3280ca0fa5292.png)
网友评论