卷积的反向传播
以一个input为3x3,kernel为2x2,卷积得到2x2的output为例:
其计算关系如下:
用矩阵乘法表示为:
根据链式法则,代价函数C对a求导等于:
令:
根据上述公式可得:
用卷积可以表示为:
或者用矩阵乘法表示为:
注:这一步其实可以通过矩阵求导公式直接得到:
我们可以发现:
因此:
卷积的反向传播,本质上是转置卷积(Transposed Convolution)
或者说,转置卷积在工程上是通过计算正向卷积的反向传播来实现的
转置卷积的计算等价
我们还发现,转置卷积可以通过在input外面padding (kernel-padding-1),内部padding (stride-1)然后将卷积核旋转180°的正向卷积来实现:
同样以上述卷积的转置卷积为例(input为2x2,kernel为2x2,得到3x3的output):
这个算式可以通过卷积来实现:
因此,这个卷积:
他的转置卷积可以这样计算:
结论:转置卷积可以通过在input外面padding (kernel-padding-1),然后将卷积核旋转180°的正向卷积来实现
Stride卷积的转置
对于一个步长不为1的卷积:
我们可以有如下insight:
1. stride大于1的卷积层扮演了下采样的角色
2. stride的含义是kernel每次移动的步数,但也可以看成是每n步只保留1步的结果,舍弃其他部步。
例如:stride=2可以看为:以stride=1进行卷积,但最后只保留奇数元素
因此,stride卷积的转置,也是相反的路径
可视化就是如下:
结论:Stride的转置卷积,可以看做在内部padding (stride-1)的正向卷积,这也是Transposed Convolution也被叫做Fractionally Strided Convolution的原因,比如原来stride=1,其转置卷积的stride=1/2
备注:可视化gif图来自https://github.com/vdumoulin/conv_arithmetic/tree/master