卷积神经网络的可视化理解(Visualizing and Understanding Convolutional Networks)

摘要(Abstract)

近来,大型的卷积神经网络模型在Imagenet数据集上表现出了令人印象深刻的效果,但是现如今大家并没有很清楚地理解为什么它们有如此好的效果,以及如何改善其效果。在这篇文章中,我们对这两个问题均进行了讨论。我们介绍了一种创新性的可视化技术可以深入观察中间的特征层函数的作用以及分类器的行为。作为一项类似诊断性的技术,可视化操作可以使我们找到比Krizhevsky (ALexNet模型)的更好的模型架构。

在Imagenet分类数据集上,我们还进行了一项抽丝剥茧的工作,以发现不同的层对结果的影响。我们看到,当softmax分类器重训练后,我们的模型在Imagenet数据集上的结果可以很好地泛化到其他数据集,瞬间就击败了现如今caltech-101以及caltech-256上的最好的方法。

1、介绍(Introduction)

自从1989年LeCun等人研究推广卷积神经网络(以下称为CNN)之后,在1990年代, CNN在一些图像应用领域展现出极好的效果,例如手写字体识别,人脸识别等等。在去年,许多论文都表示他们可以在一些更有难度的数据集上取得较好的分类效果,Ciresan 等人于2012在NORB和CIFAR-10数据集上取得了最好的效果。更具有代表性的是Krizhevsky等人2012的论文,在ImageNet 2012数据集分类挑战中取得了绝对的优势,他们的错误率仅有16.4%,与此相对的第二名则是 26.1%。

造成这种有趣的现象的因素很多 (i)大量的训练数据和已标注数据; (ii) 强大的GPU训练 (iii) 更好的正则化方法如Dropout(Hinton et al., 2012)。尽管如此,我们还是很少能够深入理解神经网络中的机理,以及为何它们能取得如此效果。 从科学的角度讲,这是远远不够的。如果木有清楚地了解其中的本质,那么就只能变成整天像无头苍蝇一样乱试。在本文中,我们介绍一种可视化技术来揭示 输入响应如何在每一层得到独得的特征图谱的。

这也能让我们观察到特征在训练过程中的进化过程,以便分析出模型的潜在问题。我们使用的可视化技术是一种多层的反卷积网络,由Zeiler在2011年提出,把特征映射回最初的像素层层. 我们还进行了一项很有意义的研究,那就是遮挡输入图像的一部分,来说明哪一部分是最分类最有影响的。

我们从Krizhevsky的模型开始,逐步探索了其他不同的模型,并发掘出效果更好的模型。我们还探索了不同数据集上的模型泛化能力,仅依靠重训练softmax层。我们这儿讨论的上一种有监督的预训练, 与Hinton 和Bengio, Vincent等人的无监督的训练不同.另外特征泛化能力的讨论在Donahue的2013的论文中也有提及。

1.1. 相关工作(Related Work)

通过对神经网络可视化方式来获取一些科研灵感是很常有的,但大多数情况人们都只关注第一层,因为第一层比较容易映射到像素层。在较高的网络层就难以处理了, 有一些比较有局限的方法,可以推断出节点的活跃性---Erhan等2009的方法,找到每个节点的最大响应刺激方式, 这是通过在图像空间做梯度下降得到每个节点的最大响应。这需要很细心的操作, 而且也没有给出关于节点某种恒定属性的描述。

受此启发有一种改良的方法(Le et al, 2010),在 (Berkes & Wiskott,2006))的基础上作一些延伸,通过计算一个节点的Hessian矩阵来观测节点的一些稳定的属性,问题是对于高层的网络节点, 这些属性变量过于复杂,根本无法通过二次近似法(quadratic approximation)来描述(不懂,大概意思就是该方法难以描述高层复杂网络节点的性质)。

相反,我们的方法并不是通过大量参数来对节点属性进行描述, 而是看图像的哪一部分激活了特征(类似Donahue et al., 2013,看可视化结果能表明模型中高层的节点究竟是被哪一块区域给激活).我们的可视化结果与此不同,不仅仅是一些输入图像的集合,而是进行了由顶向下的映射来揭示出到底是什么样的结构激活了特征。

2. 我们的方法(Approach)

我们使用标准的卷积神经网络模型来实验(LeCun et al.,1989)和(Krizhevsky et al., 2012)。这些模型输入一张2维图像 x i , 通过一系列网络层计算最后输出C个类别的概率向量 y i .每一层都是通过对上一层的(i)个卷积操作得到 (第一层则是原图) ,其中所有的滤波器(卷积权重)都是学习得到的; (ii) 将结果通过一个线性修正函数(relu(x) = max(x,0)); (iii) [可选操作] 对临近点进行最大值池化 (iv) [可选操作] 通过(local contrast operation) 归一化特征(不懂)。更多细节参考(Krizhevsky et al., 2012)的论文以及 (Jarrett et al.,2009)的论文.

神经网络的顶部是全连接层,最后一层是softmax层,图3展示了我们实验中使用最多的模型。我们使用一个N幅图像组成的大数据集{x,y},y是类别表签,我们使用交叉熵代价函数,因为这比较适合图像分类,通过ˆy i与 y i计算得到。网络中的参数:包括卷积权重和全链接权重、偏移值,都是通过梯度反向传播训练得到, 采用的是随机梯度下降法. 第3部分详细讲述其中的细节。

2.1. 反卷积可视化(Visualization with a Deconvnet)

想要理解卷积操作要先理解中间层的特征激活是怎么一回事,我们在此介绍一种创新的方法来把特征响应映射回初始的像素空间,看看到底是怎样的输入模式导致了节点响应,我们通过一个反卷积来做到这点 (Zeiler et al., 2011). 反卷积也可以认为是一种神经网络模型,具有同样功能,包括卷积滤波,池化,但是均为反操作, so

instead of mapping pixels to features does the oppo-

site. In (Zeiler et al., 2011), deconvnets were proposed

as a way of performing unsupervised learning. Here,

they are not used in any learning capacity, just as a

probe of an already trained convnet.

To examine a convnet, a deconvnet is attached to each

of its layers, as illustrated in Fig. 1(top), providing a

continuous path back to image pixels. To start, an

input image is presented to the convnet and features

computed throughout the layers. To examine a given

convnet activation, we set all other activations in the

layer to zero and pass the feature maps as input to

the attached deconvnet layer. Then we successively

(i) unpool, (ii) rectify and (iii) filter to reconstruct

the activity in the layer beneath that gave rise to the

chosen activation. This is then repeated until input

pixel space is reached.

Unpooling: In the convnet, the max pooling opera-

tion is non-invertible, however we can obtain an ap-

proximate inverse by recording the locations of the

maxima within each pooling region in a set of switch

variables. In the deconvnet, the unpooling operation

uses these switches to place the reconstructions from

the layer above into appropriate locations, preserving

the structure of the stimulus. See Fig. 1(bottom) for

an illustration of the procedure.

Rectification: The convnet uses relu non-linearities,

which rectify the feature maps thus ensuring the fea-

ture maps are always positive. To obtain valid fea-

ture reconstructions at each layer (which also should

be positive), we pass the reconstructed signal through

a relu non-linearity.

Filtering: The convnet uses learned filters to con-

volve the feature maps from the previous layer. To

Visualizing and Understanding Convolutional Networks

invert this, the deconvnet uses transposed versions of

the same filters, but applied to the rectified maps, not

the output of the layer beneath. In practice this means

flipping each filter vertically and horizontally.

Projecting down from higher layers uses the switch

settings generated by the max pooling in the convnet

on the way up. As these switch settings are peculiar

to a given input image, the reconstruction obtained

from a single activation thus resembles a small piece

of the original input image, with structures weighted

according to their contribution toward to the feature

activation. Since the model is trained discriminatively,

they implicitly show which parts of the input image

are discriminative. Note that these projections are not

samples from the model, since there is no generative

process involved.

0 - Visualizing and Understanding Convolutional Networks(阅读翻译)的更多相关文章

  1. 深度学习论文翻译解析(十):Visualizing and Understanding Convolutional Networks

    论文标题:Visualizing and Understanding Convolutional Networks 标题翻译:可视化和理解卷积网络 论文作者:Matthew D. Zeiler  Ro ...

  2. [论文解读]CNN网络可视化——Visualizing and Understanding Convolutional Networks

    概述 虽然CNN深度卷积网络在图像识别等领域取得的效果显著,但是目前为止人们对于CNN为什么能取得如此好的效果却无法解释,也无法提出有效的网络提升策略.利用本文的反卷积可视化方法,作者发现了AlexN ...

  3. Visualizing and Understanding Convolutional Networks论文复现笔记

    目录 Visualizing and Understanding Convolutional Networks 论文复现笔记 Abstract Introduction Approach Visual ...

  4. Visualizing and Understanding Convolutional Networks

    前言:研究卷积神经网络,把阅读到的一些文献经典的部分翻译一下,写成博客,代码后续给出,不足之处还请大家指出. 本文来自:tony-tan.com Github:github.com/Tony-Tan ...

  5. 深度学习研究理解5:Visualizing and Understanding Convolutional Networks(转)

    Visualizing and understandingConvolutional Networks 本文是Matthew D.Zeiler 和Rob Fergus于(纽约大学)13年撰写的论文,主 ...

  6. 【网络结构可视化】Visualizing and Understanding Convolutional Networks(ZF-Net) 论文解析

    目录 0. 论文地址 1. 概述 2. 可视化结构 2.1 Unpooling 2.2 Rectification: 2.3 Filtering: 3. Feature Visualization 4 ...

  7. ZFNet: Visualizing and Understanding Convolutional Networks

    目录 论文结构 反卷积 ZFnet的创新点主要是在信号的"恢复"上面,什么样的输入会导致类似的输出,通过这个我们可以了解神经元对输入的敏感程度,比如这个神经元对图片的某一个位置很敏 ...

  8. 论文笔记:Visualizing and Understanding Convolutional Networks

    2014 ECCV 纽约大学 Matthew D. Zeiler, Rob Fergus 简单介绍(What) 提出了一种可视化的技巧,能够看到CNN中间层的特征功能和分类操作. 通过对这些可视化信息 ...

  9. 理解LSTM网络--Understanding LSTM Networks(翻译一篇colah's blog)

    colah的一篇讲解LSTM比较好的文章,翻译过来一起学习,原文地址:http://colah.github.io/posts/2015-08-Understanding-LSTMs/ ,Posted ...

随机推荐

  1. hdu 1506 最大子矩阵面积

    //写动态规划的题目 要把主要问题提炼出来 这里的问题就是求area=(j-k+1)*a[i]  如果找到j k是解决这个题目的关键 这里暴力求肯定是要超时的 这里用dp来优化 #include< ...

  2. vue中$router 与 $route区别

    vue-router中经常会操作的两个对象\(route和\)router两个. 1.$route对象 $route对象表示当前的路由信息,包含了当前 URL 解析得到的信息.包含当前的路径,参数,q ...

  3. luogu2568GCD题解--欧拉函数

    题目链接 https://www.luogu.org/problemnew/show/P2568 分析 题目即求\(\sum_{i=1}^N \sum_{j=1}^N [gcd(i,j)\) \(is ...

  4. android项目笔记整理(3)

    61.AlphabetIndexer字母索引辅助类       实现对链表类型的数据进行快速索引. 应用于类似联系人列表右侧的导航栏 注意:       1.链表里的元素必须是Object类型,并实现 ...

  5. ASE19团队项目alpha阶段model组 scrum5 记录

    本次会议于11月7日,19时整在微软北京西二号楼sky garden召开,持续12分钟. 与会人员:Jiyan He, Kun Yan, Lei Chai, Linfeng Qi, Xueqing W ...

  6. vue父组件传值和子组件触发父组件方法

    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script> <scr ...

  7. DataTable序列化及反序列化Json

    添加Json解析引用 using Newtonsoft.Json; 实现方式一:普通转换 private void button1_Click(object sender, EventArgs e) ...

  8. 01.Zabbix监控快速入门

    1.监控知识基本概述 1.为什么要使用监控 1.对系统不间断实时监控 2.实时反馈系统当前状态 3.保证服务可靠性安全性 4.保证业务持续稳定运行 2.如何进行监控,比如我们需要监控磁盘的使用率 1. ...

  9. 并发编程: 生产消费模型、死锁与Rlock、线程、守护线程、信号量、锁

    一.守护进程 二.互斥锁 三.抢票 四.进程间通讯 五.进程间通讯2 一.守护进程 """ 进程间通讯的另一种方式 使用queue queue 队列 队列的特点: 先进的 ...

  10. bat 获取当前文件夹的文件名

    bat 获取当前文件夹的文件名 @echo off pushd %1 & for %%i in (.) do set curr=%%~ni echo %curr% pause