深度学习

步幅与填充(stride and padding)

/ STRYD and PAD-ing /

步幅与填充,是决定一块滑动滤镜如何在图像上行进、以及结果出来是多大的两个旋钮。要想象这两者,最简单还是回到那张你在照片上滑动的模板。步幅,是你每次落脚之间跨多远。步幅为 1,意味着你让滤镜一次只挪一个像素,检查每一个位置,产出又大又细的结果。步幅为 2,意味着你隔一个位置跳一次,于是每个方向上少做一半的活,结果缩到大约四分之一大小——这是一种内建的缩小办法,很像池化。

填充,处理的是边缘处的一桩麻烦。当滤镜走到图像的边界,它有一部分会悬空在「无」之上,所以若不帮忙,输出图会比输入略小一圈,而最靠边的地方被走到的次数也比中间少。填充的办法,是在图像四周加上一圈额外的像素——通常是零,故称「补零」。配上恰当的填充,输出可以与输入保持一模一样的大小(即「same」填充),边角也能得到公平的对待。不加填充(即「valid」填充)时,特征图就会在每一层刻意地缩小。

这两个设置合在一起,让设计者得以掌控「细节」与「开销」之间的取舍。小步幅加充足填充,保住了分辨率,却堆起了运算量;大步幅加不填充,缩得又快又省,却扔掉了精细的空间信息。它们是超参数——训练之前就定下的选择,而非网络去学的东西——一旦设错,常常会害得特征图出来时形状不对,接不上下一层。

用一块 3×3 滤镜扫过一张 5×5 的图像。步幅为 1、不填充时,输出是 3×3(缩小了)。加上一圈一像素的补零边框(即「same」填充),输出又回到 5×5。改成步幅 2,输出就降到约 3×3——这是有意的缩小。

填充把尺寸稳住;更大的步幅则有意把它缩小。

记住:步幅管的是滤镜每次跳多远(也因此决定输出缩多少),填充管的是边缘处怎么处理(也因此决定输出是否保持原尺寸)。把这两者搞混,是初学者的经典失误。

又称
stridepadding步幅步長填充补零zero-padding