对A guide to convolution arithmetic for deep 的第四章部分翻译,纯属个人学习的。
前面大部分都讲的是卷积操作,包括卷积核、步长、pad,(pad表示一个维度左右各补充几个0,总共是2*pad的补充)
这几个怎么影响输出的size的,公式:
i是原尺寸,p是补充的pad,k是卷积核的长,s是步长,are you ok? 哈哈
图解:
下面这个才是重点
基本意思就是,有一个输入4*4的图片,暂定为一个通道,然后flattened拉平成一行,shape是(16,)用X表示,然后将3*3的卷积核表达成一个稀疏矩阵C,其中的值没有变化。原矩阵:
[[w00,w01,w02],
[w10,w11,w12],
[w20,w21,w22]
]
然后是CX=result,再reshape成2*2,注意图2.1。这样在反向传播时用的就是CT(C的转置),很容易得到。
转置卷积——也称为分阶跃卷积或反卷积-通过交换卷积的正向和反向传递来实现。一种方法是注意到核函数定义了卷积,但是
它是直接卷积还是转置卷积是由如何计算向前和向后传递。
For instance, although the kernel w defines a convolution whose forward and backward passes are computed by multiplying with C and CT respectively, it also defines a transposed convolution whose forward and backward passes are computed by multiplying with CT and (CT ) T = C respectively.
例如,虽然核w定义了一个卷积,它的前向传播和反向传播通过C或者CT乘计算,还定义了一个转置卷积,它的前向和反向传播是用CT和(CT)T的乘计算。
Finally note that it is always possible to emulate a transposed convolution with a direct convolution.The disadvantage is that it usually involves adding many columns and rows of zeros to the input, resulting in a much less efficient implementation
最后请注意,总是可以通过用直接卷积模拟一个转置卷积。缺点是,它通常需要在输入中添加许多列和行0,导致实现效率大大降低.(也就说作者不赞成正向卷积操作,转置卷积操作高效)
考虑对给定输入的用转置卷积的最简单的方法是:
把输入想象成直接卷积的结果-特征图。因此,变换卷积可以被认为是允许恢复此初始特征映射的形状的操作。
下面的图表示:
一种可以认为对2*2的恢复成了4*4的,先填充pad=2,然后用3*3卷积核,得到4*4的特征图;
一种认为对4*4的做了转置卷积操作,得到2*2特征图。(高效 )
最后这几个,我还没看懂,暂时放图上来