- 卷积的输出形状取决于输入形状和卷积核的形状
- 在应用连续的卷积后,我们最终得到的输出大小远小于输入大小,这是由于卷积核的宽度和高度通常大于1导致的
- 比如,一个 240 × 240 240×240 240×240像素的图像,经过10层 5 × 5 5×5 5×5的卷积后,将减少到 200 × 200 200×200 200×200像素。如此一来,原始图像的边界丢失了许多有用信息。而填充是解决此问题最有效的方法
- 有时,我们可能希望大幅降低图像的宽度和高度。例如,如果我们发现原始的输入分辨率十分冗余。步幅则可以在这类情况下提供帮助。
1. 填充
- 上面提到我们在应用多层卷积的时候常常丢失边缘像素
- 解决此问题的简单方法就是填充:在输入图像的边界填充元素(通常是0)
- 下图就是一个填充的例子
- 通常,如果我们添加
p
h
p_h
ph 行填充,大约一半在顶部一半在底部,和
p
w
p_w
pw 列填充,大约一半在左边一半在右边,那么输出的形状就会变为如下所示
- 这就意味着输出的高度和宽度分别增加 p h p_h ph 和 p w p_w pw
- 在许多情况下我们会设置 p h = k h − 1 p_h=k_h-1 ph=kh−1 和 p w = k w − 1 p_w=k_w-1 pw=kw−1,使输入和输出具有相同的高度和宽度。这样可以在构建网络时更容易预每个图层的输出形状。
- 如果 k h k_h kh 为奇数,那么我们将在高度的两侧填充 p h / 2 p_h/2 ph/2 行。而如果 k h k_h kh 是偶数,则另一种可能性就是在顶部输入填充 p h / 2 p_h/2 ph/2 上取整,而对底部下取整。宽度同理
- 而卷积神经网络中卷积核的高度和宽度通常为奇数。选择计数的好处是保持空间维度的同时可以在顶部和底部填充数量相同的行,在左侧和右侧填充相同适量的列
- 对于任何二维张量 x,当满足:① 卷积核的大小是奇数 ② 所有边的填充行数和列数相同 ③ 输出与输入具有相同的宽度和高度。那么我们就可以说输出
V[i,j]
是通过以输入X[i,j]
为中心,与卷积核进行互相关计算得到的 - 在下面给出上面所述情形的一个例子
- 当卷积核的高度和宽度不同时,我们可以填充不同的高度和宽度,如下图所示
2. 步幅
- 有时为了高效计算或缩减采样次数,卷积窗口可以跳过中间位置,每次滑动多个元素
- 我们将每次滑动元素的数量称为步幅,目前为止我们只使用过高度或者宽度为1的步幅
- 下图是垂直步幅为 3,水平步幅为 2 的互相关运算。着色部分是输出元素以及用于输出计算的输入和内核张量元素
- 通常,当垂直步幅为
s
h
s_h
sh,水平步幅为
s
w
s_w
sw 时,输出形状为:
- 如果我们设置了
p
h
=
k
h
−
1
p_h=k_h-1
ph=kh−1 和
p
w
=
k
w
−
1
p_w=k_w-1
pw=kw−1,那么输出形状将简化为如下
- 如果更进一步,输入和输出的高度和宽度可以被垂直和水平步整除的话,输出形状可以被进一步简化为
- 下面我们将高度和宽度的步幅都设置为2,从而将输入的高度和宽度都减半
- 下面是一个稍微复杂的例子
- 然而在实践中我们很少用不一致的步幅和填充