池化层
上一节我们介绍了二维卷积层,二维卷积层可以帮助我们检测图像物体边缘。无论是原始图片,还是经过卷积核处理的中间特征,都是基于像素的基础进行的数学运算。实际图像里,我们感兴趣的物体不会总出现在固定像素位置:即使我们用三脚架固定相机去连续拍摄同一个物体也极有可能出现像素位置上的偏移。这会导致同一个物体的边缘对应的输出可能出现在卷积输出中的不同位置,进而对后面的模式识别造成不便。另外,绝大多数计算机视觉任务对图像处理终极目标是识别图片内的物体,所以不需要细致到对每个像素进行检测,只需要找到图片中物体的大概轮廓就好了。池化层可以缓解卷积层对位置的过度敏感性。
同卷积层一样,池化层每次对输入数据的一个固定形状窗口(又称池化窗口)中的元素计算输出。不同于卷积层里计算输入和核的互相关性,池化层直接计算池化窗口内元素的最大值或者平均值。该运算也分别叫做最大池化或平均池化。在二维最大池化中,池化窗口从输入数组的最左上方开始,按从左往右、从上往下的顺序,依次在输入数组上滑动。当池化窗口滑动到某一位置时,窗口中的输入子数组的最大值即输出数组中相应位置的元素。
上图展示了池化窗口形状为2×2的最大池化,阴影部分为第一个输出元素及其计算所使用的输入元素。输出数组的高和宽分别为2,其中的4个元素由取最大值运算max得出。比如,输出的第一个元素4 = max(0, 2, 3, 4)。
二维平均池化的工作原理与二维最大池化类似,但将最大运算符替换成平均运算符。池化窗口形状为p×q的池化层称为p×q池化层,其中的池化运算叫作p×q池化。
类型 | Max pooling | Average pooling |
---|---|---|
计算方式 | 选择当前窗口的最大值 | 选择当前窗口的平均值 |
考虑到物体边缘检测的例子。现在我们将卷积层的输出作为2×2最大池化的输入。设该卷积层输入是X
、池化层输出为Y
。假设样本1的物体边缘在X[i, j]
和X[i, j+1]
上,样本2的物体边缘X[i, j+1]
和X[i, j+2]
上,使用2×2最大池化层时,只要卷积层识别的模式在高和宽上移动不超过一个元素,我们依然可以将它检测出来。
同卷积层一样,池化层也可以在输入的高和宽两侧的填充(Padding)并调整窗口的移动步幅(Stride)来改变输出形状。池化层填充和步幅与卷积层填充和步幅的工作机制一样。
在处理多通道输入数据时,池化层对每个输入通道分别池化,而不是像卷积层那样将各通道的输入按通道相加。这意味着池化层的输出通道数与输入通道数相等。
在卷积神经网络中,卷积层和池化层一般成对出现。