译自:https://distill.pub/2016/deconv-checkerboard/
Part1
当我们使用神经网络生成图像时,往往需要从一个低维空间(低分辨率)图像映射回高维空间(高分辨率)图像,实现的方法就是反卷积。
不幸的是,反卷积很容易导致输出的某些位置产生重叠。这种情况发生在卷积核不是步长的整数倍的情况下。
对于一个一维信号反卷积
- 卷积核大小为3,步长为2(对于步长s>1的反卷积,会在输入单元之间插入s-1个0,如下图空白。)卷积的结果在某些位置不重叠,在某些位置重叠一次,产生了不均匀重叠。
- 卷积核大小为4,步长为2,卷积的结果(不考虑两端)只重叠了一次,均匀重叠。
- 卷积核大小为5,步长为2,卷积的结果某些位置不重叠,在某些位置重叠一次,在某些位置重叠多次,产生了不均匀重叠。
不均匀重叠的情况在二维信号中更严重,因为在两个维度上都会产生重叠,如下图所示。
这就意味着如果生成的图像如果有颜色十分艳丽的区域如大红,那很可能是在这个区域反卷积时重叠了多次造成的。
Part2
上面讨论的情况是反卷积的卷积核有相同的权重。在实际的网络学习过程中,即使卷积核大小不是步长的整数倍,网络也可能反卷积出均匀的重叠。如:
同样是步长为2,卷积核为3的情况,但是网络给卷积核中间的权重值赋予了两侧权重的两倍。这时反卷积的结果仍是均匀重叠的。
但是在卷积核大小是步长的整数倍的情况下若出现下面这种情况,反卷积的结果仍然可能是非均匀重叠的。
因此能否完全避免反卷积的不均匀重叠,不仅依赖于卷积核大小是否是步长的整数倍,还要看每个卷积核的权重能否被正确地学习。
Part3
解决方法:可以调整图像的大小(使用最近邻插值或双线性插值),然后进行卷积层。这似乎是一种自然的方法,并且类似的方法在图像超分辨率中也能很好地工作。