天天看点

有哪些函数可以反截图、_“直观理解”卷积神经网络(一):反卷积(Deconvnet)

有哪些函数可以反截图、_“直观理解”卷积神经网络(一):反卷积(Deconvnet)

“直观理解”卷积神经网络(一):反卷积(Deconvnet)

本文整理/翻译自论文 "Visualizing and Understanding Convolutional Networks",假如文中观点有误,欢迎讨论/指正!
#***文章大纲***#
           

1. 简介

时间倒退回2014年,大量基于卷积神经网络的模型在ImageNet数据集上的分类性能有了巨大的提升,其中翘楚当属AlexNet,凭借16.4%的错误率拿下2012年冠军,远远领先第二名的26%。但大多数人并没有完全理解这些模型表现为何如此之好,模型的改善也就无从谈起。对于模型的直观理解迫在眉睫,而本文提到的反卷积技术(Matthew D.Zeiler)就是该领域的开山之作:该技术尝试在输入图片的像素空间中找出最大化激活某一特征的像素,实现了对应特征的可视化,其中反卷积的过程就是寻找像素的过程。借助反卷积,作者也探索了“模型训练过程中,特征的演化”、“分类结果相对于图片遮挡部位的敏感性”、“特征不变性”和“图片相关性”等问题。

2. 卷积网络和反卷积网络

2.1 卷积网络

一个典型的卷积神经网络模型由一系列层(layer)构成,将一张RGB图像x转化为一个向量y_hat,向量中的C个值对应了C类的可能性。当时,卷积网络还很单纯(没有shortcut connection、没有DW、PW Conv等),每一层都由如下构成:

  1. 卷积操作:采用一组训练得到的卷积核对上一层的输出作卷积。
  2. 增加非线性:让卷积结果通过非线性函数,例如relu(x) = max(x, 0)。
  3. 池化操作[可选]:取相邻元素的最大值(MaxPooling)或平均值(AveragePooling),进行下采样;MaxPooling中池化索引记录了最大值对应的位置。最后添加全连接层和Softmax分类器,输出C个类别的可能性。
有哪些函数可以反截图、_“直观理解”卷积神经网络(一):反卷积(Deconvnet)

2.2 反卷积网络

为了理解卷积网络,需要理解中间层的特征值,反卷积网络提供了办法。反卷积网络的每一层都可以看做卷积网络中对应层的逆过程,它们拥有相同的卷积核和池化索引,因此反卷积将特征值逆映射回了输入图片的像素空间,借此说明图片中的哪些像素参与激活了该特征值。下图将卷积网络和反卷积网络的过程合并,展示了两者各层之间的关系,且两者在整体上互为逆过程:首先,卷积网络将一张图片作为输入,计算得到各层的特征表示;为了验证某层一个具体的特征值,我们将该层特征值之外的所有值置零后,将其作为反卷积网络的输入,经过反卷积网络每一层的操作,该特征值被映射回了输入图片的像素空间.

有哪些函数可以反截图、_“直观理解”卷积神经网络(一):反卷积(Deconvnet)

反卷积网络由如下部分构成:

  1. 反池化操作[对应卷积网络 池化操作 ]:理论上,卷积网络中的最大池化操作是不可逆的,但我们可以通过池化索引进行近似可逆。下图(图片来源:附录3)是反池化过程:
有哪些函数可以反截图、_“直观理解”卷积神经网络(一):反卷积(Deconvnet)

2.矫正[对应卷积网络

ReLU操作

]:卷积网络中采用ReLU确保特征值非负,为了确保正逆过程的一致性,我们将反卷积网络每一层的重构特征也通过ReLU得到非负值。

3.反卷积操作[对应卷积网络

卷积操作

]:卷积操作是低效操作,主流神经网络框架都是通过im2col+矩阵乘法实现卷积,以空间换效率。输入中每个卷积窗口内的元素被拉直成为单独一列,这样输入就被转换为了H_out * W_out列的矩阵(Columns),im2col由此得名;将卷积核也拉成一列后(Kernel),左乘输入矩阵,得到卷积结果(Output)。im2col和矩阵乘法见如下两图(图片来源:附录1)。

有哪些函数可以反截图、_“直观理解”卷积神经网络(一):反卷积(Deconvnet)
有哪些函数可以反截图、_“直观理解”卷积神经网络(一):反卷积(Deconvnet)