如上图演示了卷积核反卷积的过程,定义输入矩阵为 I I I( 4 × 4 4\times 4 4×4),卷积核为 K K K( 3 × 3 3\times 3 3×3),输出矩阵为 O O O( 2 × 2 2\times 2 2×2):
卷积的过程为: Conv ( I , W ) = O \text{Conv}(I, W)=O Conv(I,W)=O反卷积的过称为: Deconv ( W , O ) = I \text{Deconv}(W,O)=I Deconv(W,O)=I(需要对此时的 O O O 的边缘进行延拓 padding)卷积核移动的步长(stride)小于卷积核的边长(一般为正方行)时,变会出现卷积核与原始输入矩阵作用范围在区域上的重叠(overlap),卷积核移动的步长(stride)与卷积核的边长相一致时,不会出现重叠现象。
4 × 4 4\times 4 4×4 的输入矩阵 I I I和 3 × 3 3\times 3 3×3 的卷积核 K K K:
在步长(stride)为 1 时,输出的大小为 ( 4 − 3 + 1 ) × ( 4 − 3 + 1 ) \left(4-3+1\right)\times \left(4-3+1\right) (4−3+1)×(4−3+1)现考虑其逆问题,原始输入矩阵为多大时,其与 3 × 3 3\times 3 3×3 的卷积核 K K K 相卷积得到的输出矩阵的大小为 4 × 4 4\times 4 4×4:
步长(stride)为 1 时, ( x − 3 + 1 ) × ( x − 3 + 1 ) = 4 × 4 \left(x-3+1\right)\times \left(x-3+1\right)=4\times 4 (x−3+1)×(x−3+1)=4×4 x = 6 x=6 x=6A Beginner’s Guide To Understanding Convolutional Neural Networks Part 2
填充(padding,在原始input的周围进行填充),以保证卷积后的大小与原始 input shape 一致,
z e r o   p a d d i n g = K − 1 2 zero\, padding =\frac{K-1}2 zeropadding=2K−1
K K K 为卷积核的大小,这样如果原始 input 的大小为 w*w,填充后的大小为 (w+k-1)*(w+k-1)(两端都要填充)
卷积后的大小:
o = w − k + 2 p s + 1 o=\frac{w-k+2p}{s}+1 o=sw−k+2p+1
w w w:是 input 的 height/width, k k k:卷积核的 height/width p p p:表示填充的大小; s s s:为 stride 步长;举例:
7*7 的 input,3*3 的 kernel,无填充,步长为1,则 o = 7 − 3 1 + 1 = 5 o=\frac{7-3}{1}+1=5 o=17−3+1=5,也即 output size 为 5*5 7*7 的 input,3*3 的 kernel,无填充,步长为2,则 o = 7 − 3 2 + 1 = 3 o=\frac{7-3}{2}+1=3 o=27−3+1=3,也即 output size 为 3*3