关于反卷积为什么有效的一些思考
Visualizing and Understanding Convolution Networks论文思考记录
序言
Fully convolution network for semantic segmentation以及Learning Deconvolution network for semantic segmentation两篇论文中都涉及反卷积的操作,在阅读完了A guide to convolution arithmetic for deep learning中的反卷积部分后,弄清楚了反卷积的操作过程,然而对为什么反卷积有效依然有很大的疑惑,FCN中简单的使用反卷积进行32倍,16倍,8倍的上采样原理实在诡异,DeconvNet的反卷积也是如此。通过这篇论文我有了一些新的认识。
反卷积实现中间层特征图映射
作者使用unpooling,rectification,decon将中间层的特征图一步一步映射到原图空间。从操作上来看和DeconvNet没什么区别,作者通过这组操作得到了令人印象深刻的结果,特征图映射后效果如下:
可以发现中间层特征图映射之后确实得到了有用的信息,低层特征映射到原图空间后,发现是一些颜色,边角等信息,再往后出现了一些纹理信息如Layer3,高层特征图如Layer4映射到原图空间后得到了语义很强的信息,如Layer4中的小狗轮廓,Layer5的人脸轮廓等,这些语义性强的高层信息可以很好地表征物体所属的类别,另外,高层特征图提取到的信息不含有背景信息(卷积神经网络不感兴趣的背景被过滤掉了)。作者的可视化结果证明了高层特征图拥有一定重建待识别物体轮廓的能力,也就是说,通过某些操作,高层特征图可以还原物体的位置信息。这在一定程度上证明了语义分割的可行性。
反卷积为什么有效
假设有如下卷积运算:
从此处可以看出,反卷积并不能还原出原始输入,仅仅只是根据卷积核的信息,推算出最可能的激活输入图。
假设卷积核
那么显然x11,x22相对来说是更重要的特征点(3,4相对较大),它们在计算y时会趋向于给出更大的贡献,反卷积正是考虑了这一点,根据卷积核的信息(即计算对应y时的贡献)来反推可能的输入激活图,得到的输入激活图可以反映出相对的激活程度(输入图值越大证明这个点的贡献越高,反卷积认为这个点是最应该激活的,是最重要的特征点,因为只要这个点激活,再结合它的最大贡献,可以更大可能使输出图激活),这也可以在一定程度上解释为什么FCN使用双线性插值初始化,中间大,四角逐渐减小的卷积核满足贡献关系,越往中心的点越可能与多个输出结果相关,具有更大的贡献度,因此双线性插值初始化是合适的。