Visualizing and Understanding Convolutional Networks
-
主要工作是AlexNet的可视化,以及在此基础上做了一些分析,对于理解卷积神经网络很有裨益。
-
知道图像能够进行分类,但是不知道为什么图像能够进行分类。这篇关于ZFNET就解释了图像能够进行分类的种图像各部分对语义的相关性。
-
在医疗影像,自动驾驶等领域,我们需要对设计的模型赋予可解释性。
- 比如肿瘤的判定具体是图像的哪些地方导致的判定结果。
- 网络的各个层次之间分别是提取了什么样的特征?每一个卷积核和feature map分别是对哪些特点感兴趣,对图像的遮挡会对结果产生什么样的影响。图像不同部位之间具有相关性嘛?
-
ZFnet是2013年图像分类大赛的冠军
-
主要工作
- 直观了解和分析CNN学到的特征(中间层特征对应什么样的图像)
- 可以找到提升模型的办法(观察中间层特征,分析模型可以改进的地方)
- 分析CNN的遮掩敏感性(遮住某一块区域后对分类结果的影响)
-
AlexNet是2012年图像分类大赛的冠军,能够取得冠军主要原因有
- 大规模的结构化数据集
- GPU硬件算力的支持
- DropOut等模型正则化方法
-
研究方法
- 局部敏感性分析
- 局部相关性分析
- deconvnet
- 提供了一个无参数研究图像不变性的方法,能够表明每个中间层的feature map,模式对那种特征感兴趣
-
其它研究法
- 梯度上升,使得激活feature map最大的原图。需要谨慎的初始化
- 用海森矩阵的数值解表明最优响应的不变性。但是神经网络的高层特征很难简单用二阶近似去表示
-
网络结构
-
ZFNet的网络架构是在AlexNet基础上修改而来,与AlexNet相比,差异不大:
- 第1个卷积层,kernel size从11减小为7,将stride从4减小为2(这将导致feature map增大1倍)
- 为了让后续feature map的尺寸保持一致,第2个卷积层的stride从1变为2
-
网络中可训练的参数有:卷积核的权重,全连接层的权重
-
-
多分类交叉熵函数
-
在二分类问题中,损失函数为交叉熵损失函数。对于样本(x,y)来讲,x为样本 y为对应的标签。在二分类问题中,其取值的集合可能为{0,1},我们假设某个样本的真实标签为yt,该样本的yt=1的概率为yp,则该样本的损失函数为:
-
在多分类问题中,损失函数也是交叉熵损失函数,对于样本(x,y)来讲,y是真实的标签,预测标签为所有标签的集合,我们假设有k个标签值,第i个样本预测为第K个标签的概率为pi,k,一共有N个样本,则总的数据集损失函数为:
可视化方法
-
主要是通过
deconv
的方法将某一层特征图的Top-k
激活反向投射到原图像上,从而判断该激活值主要识别图像的什么部分。- 卷积神经网络通过逐层卷积将原始像素空间逐层映射到特征空间,深层feature map上每个位置的值都代表与某种模式的相似程度,但因为其位于特征空间,不利于人眼直接观察对应的模式,为了便于观察理解,需要将其映射回像素空间
-
要求针对每一层都必须有对应的逆向操作。
- 对于
MaxPooling
层,在前馈时使用switch
变量来记录最大值来源的index
,然后以此近似得到Unpooling
- 对于
Relu
层,直接使用Relu
层。而对于conv层
,使用deconv
,即使用原来卷积核的转置作为卷积核 - 反向重建过程如下图所示:
- 对于
特征分析
-
作者对AlexNet的各层的Top-9激活值进行了可视化,如下图所示:
-
- layer 2对应边、角、颜色的识别
- layer 3具有更多的不变性,捕获了一些纹理特征
- layer 4显示了类别的重要差异,比如狗的脸啊,鸟的脚等等。
- layer 5则开始关注目标整体。
- 对于神经网络的认识,底层网络专注于识别低级特征,更高层网络通过对下层低级特征的组合抽象形成更高级的特征。
-
作者利用这种可视化方法,找出了原
AlexNet
结构的问题(比如第一层缺少中频信息,第二层由于步长太大导致了一些叠加效应等等)并对结构进行了改变,之后进行了对比,发现改变之后的模型top-5
性能高于原网络。作者还进行了遮挡敏感性和一致性分析 -
训练过程的特征演化[6个特征]、[1,2,5,10,20,30,40,64轮次]
-
- 随着训练的迭代,特征图的变化,每一层里面的8列表示不同epoch时的特征图。
- 列出的特征图是,对于该层的某个feature map,在所有训练集中激活最强的那个样本的feature map。
- 可以看到,低层的特征图收敛地比较快,而高层的特征图要到后面的epoch才开始变动。
- 有效果突变,表示能够使filter激活最大的特征图变了
-
平移不变性,不具有旋转不变性
-
遮挡实验
-
不同图像的指定目标局部块之间是否存在一致性的关联,作者认为深度模型可能默认学习到了这种关联关系。作者通过对五张不同的狗的图像进行局部遮挡,然后分析原图和遮挡后的图像的特征之间的汉明距离的和值,值越小说明一致性越大。实验表明,对不同的狗的图像遮挡左眼、右眼和鼻子之后的汉明距离小于随机遮挡,证明存在一定的关联性。
反卷积实现可视化:
-
作者以标准的有监督的cnn模型为基础,在每个卷积层后面附加了一个反卷积层,反卷积层可以看成是卷积层的逆过程,同样包含有卷积核以及pooling函数(或者说是逆函数),反卷积层的作用就是将输出特征重新映射为输入信号。
-
这个过程,主要包含三个操作:
- unpooling
- 矫正
- 反卷积
实验
-
作者进行了网络结构尺寸调整实验。去除掉包含大部分网络参数最后两个全连接层之后,网络性能下降很少;去掉中间两层卷积层之后,网络性能下降也很少;但是当把上述的全连接层和卷积层都去掉之后,网络性能急剧下降,由此作者得出结论:模型深度对于模型性能很重要,存在一个最小深度,当小于此深度时,模型性能大幅下降。
-
链接:https://www.jianshu.com/p/0718963bf3b5
反池化
- 池化是不可逆的过程,然而我们可以通过记录池化过程中,最大激活值的坐标位置。
- 只把池化过程中最大激活值所在的位置坐标的值激活,其它的值置为0,当然这个过程只是一种近似,因为我们在池化的过程中,除了最大值所在的位置,其它的值也是不为0的。
反激活
- 这个过程就是使用relu函数的逆过程,正向计算中采用relu函数保证了非负性,这个约束在反过程中依然有效,反激活过程和激活过程没有什么差别,都是直接采用relu函数。
反卷积
- 采用了正向卷积计算中的卷积核转置,与矫正过的输出特征卷积。
总结
- 揭示了这些特征远远不是随机的、无法理解的模式。
- 显示了许多直观上令人满意的特性,如合成性、增加的不变性和我们在上升层时的类别区分。
- 还展示了如何使用这些可视化来调试模型的问题,以获得更好的结果
- 通过一系列遮挡实验证明,该模型虽然经过分类训练,但对图像中的局部结构高度敏感,并且不仅仅使用广泛的场景上下文。对模型的消融研究表明,对网络的最小深度,而不是任何单个截面,对模型的性能至关重要。
- 消融研究:消融研究通常是指删除模型或算法的某些“功能”,并查看其如何影响性能。
系列遮挡实验证明,该模型虽然经过分类训练,但对图像中的局部结构高度敏感,并且不仅仅使用广泛的场景上下文。对模型的消融研究表明,对网络的最小深度,而不是任何单个截面,对模型的性能至关重要。
- 消融研究:消融研究通常是指删除模型或算法的某些“功能”,并查看其如何影响性能。