1-5 卷积步长
卷积步长( Strided convolutions)
卷积中的步幅是另一个构建卷积神经网络的基本操作。
如果你想用 3×3 的过滤器卷积这个 7×7 的图像,和之前不同的是,我们把步幅设置成了2。你还和之前一样取左上方的 3×3 区域的元素的乘积,再加起来,最后结果为 91。
只是之前我们移动蓝框的步长是 1,现在移动的步长是 2,我们让过滤器跳过 2 个步长,注意一下左上角,这个点移动到其后两格的点,跳过了一个位置。然后你还是将每个元素相乘并求和,你将会得到的结果是 100。
现在我们继续,将蓝色框移动两个步长,你将会得到 83 的结果。当你移动到下一行的时候,你也是使用步长 2 而不是步长 1,所以我们将蓝色框移动到这里:
最终结果:
我们用 3×3 的矩阵卷积一个 7×7 的矩阵,得到一个 3×3 的输出。输入和输出的维度是由下面的公式决定的。如果你用一个f × f的过滤器卷积一个n × n的图像,你的 padding 为p,步幅为s,在这个例子中s= 2,你会得到一个输出,因为现在你不是一次移动一个步子,而是一次移动s个步子,输出于是变为:
$\frac{{n + 2p - f}}{s} + 1 \times \frac{{n + 2p - f}}{s} + 1$
在我们的这个例子里, n = 7, p = 0, f = 3, s = 2,所以代入公式中得到的输出就是3×3。
如果商不是一个整数,就需要我们向下取整。用符号$\left\lfloor {} \right\rfloor$表示,也叫做进行进行地板除(floor)这个原则实现的方式是,你只在蓝框完全包括在图像或填充完的图像内部时,才对它进行运算。如果有任意一个蓝框移动到了外面,那你就不要进行相乘操作,这是一个惯例。你的 3×3 的过滤器必须完全处于图像中或者填充之后的图像区域内才输出相应结果,这就是惯例。
如果你看的是一本典型的数学教科书,那么卷积的定义是做元素乘积求和,实际上还有一个步骤是你首先要做的,也就是在把这个 6×6 的矩阵和 3×3 的过滤器卷积之前,首先你将 3×3 的过滤器沿水平和垂直轴翻转,所以:
变成:
这相当于将 3×3 的过滤器做了个镜像。
但是实际使用时,我们跳过了这个镜像操作。从技术上讲,我们实际上做的,我们在前面视频中使用的操作,有时被称为互相关( cross-correlation)而不是卷积( convolution)。但在深度学习文献中,按照惯例,我们将这(不进行翻转操作)叫做卷积操作。