神经网络中pooling池化层如何参与反向传播?

       池化层pooling操作常见的有平均池化mean pooling和最大池化max pooling,前者取某特征区域的平均值进行输出,而后者则取某特征区域的最大值进行输出,池化层的一般作用是对特征图进行下采样,它本身没有参数权重,计算也简单,但它可达到降维特征、突显特征、减少参数量、减少计算量、增加非线性、防止过拟合及提升模型泛化能力等作用,池化层的前向传播我们都比较好理解,但是其是如何参与反向传播的呢?本文就让我们一起来了解关于池化层的反向传播实现方法吧。

池化层在反向传播时,它是不可导的,因为它是对特征图进行下采样会导致特征图变小,比如一个2x2的池化,在L+1层输出的特征图是16个神经元,那么对应L层就会有64个神经元,两层之间经过池化操作后,特征图尺寸改变,无法一一对应,这使得梯度无法按位传播。那么如何解决池化层不可导但却要参与反向传播呢?

在反向传播时,梯度是按位传播的,那么,一个解决方法,就是如何构造按位的问题,但一定要遵守传播梯度总和保持不变的原则

对于平均池化,其前向传播是取某特征区域的平均值进行输出,这个区域的每一个神经元都是有参与前向传播了的,因此,在反向传播时,框架需要将梯度平均分配给每一个神经元再进行反向传播,相关的操作示意如下图所示。

 对于最大池化,其前向传播是取某特征区域的最大值进行输出,这个区域仅有最大值神经元参与了前向传播,因此,在反向传播时,框架仅需要将该区域的梯度直接分配到最大值神经元即可,其他神经元的梯度被分配为0且是被舍弃不参与反向传播的,但如何确认最大值神经元,这个还得框架在进行前向传播时记录下最大值神经元的Max ID位置,这是最大池化与平均池化差异的地方,相关的操作示意如下图所示。

 其中,上述表格中,前向传播时,每个单元格表示特征图神经元值,而在反向传播时,每个单元格表示的是分配给对应神经元的梯度值。

本文转载自:池化层pooling操作如何参与反向传播? - 知乎

猜你喜欢

转载自blog.csdn.net/thequitesunshine007/article/details/120332972