编者按:考虑到原作者写的“面向新手的CNN入门指南(二)”没有太多实质性的计算内容,而是直接推荐论文建议读者阅读,因此论智决定跳过这一部分,直接总结过去几年中计算机视觉和卷积神经网络领域的一些重大发展。本文主要介绍了从AlexNet到ResNet的网络架构进步,对原文提到的包括GAN在内的一些有趣的论文不做具体翻译。
虽然许多人会认为Yann LeCun在1989年和1998年发表的论文是CNN的开山之作,但真正让它广泛地为人所知并进入科研领域的确实是这篇论文:ImageNet Classification with Deep Convolutional Neural Networks。截至目前,它的引用次数已经高达23324。
2012年,来自多伦多大学的Alex Krizhevsky、Ilya Sutskever和Geoffrey Hinton创建了一个“大而深的卷积神经网络”,一举赢得ILSVRC(ImageNet大规模视觉识别挑战)。对于不熟悉计算机视觉领域的人来说,ImageNet大赛在CV界的地位可以类比体育界的奥运会,每年来自世界各地的团队会在大赛中竞相角逐,看谁拥有能用于分类、检测等任务的最佳CV模型。
就在那一年,CNN的Top-5错误率稳定在15.4%,而原比赛记录是26.2%,这是一个令整个行业都为之震惊的进步。可以肯定地说,从那之后,CNN在竞赛中已经成为一个家喻户晓的名字。
在论文中,Hinton等人提出了一种名为AlexNet的新型网络架构。和当时的已有CNN相比,AlexNet布局精简,由5个卷积层、最大池化层、dropout层和3个全连接的层组成,可以对1000种目标进行分类。
AlexNet整体架构
提要
在ImageNet数据上训练网络,其中包含超过22000个类别的超过1500万张注释图像。
把ReLu作为激活函数(可以缩短训练用时,因为ReLU比传统tanh函数快几倍)。
使用了图片转换、水平翻转和改变颜色通道等图像增强技术。
加入Dropout层以解决过拟合问题。
用批量随机梯度下降训练模型,并手动调试了momentum和权重衰减率的值。
在两台GTX 580 GPU上训练5-6天。
评价
Krizhevsky、Sutskever和Hinton在2012年提出的AlexNet称得上是计算机视觉领域的一次狂欢,这是CNN模型首次在ImageNet数据集上表现出惊人的性能,他们也为以后的研究贡献了大量技巧,其中图像增强技术和dropout层一直被沿用至今。总而言之,这篇论文真正展现了CNN的优势,并在竞赛中创造了破纪录的成绩。
自从2012年AlexNet在竞赛中成功“超神”后,参加ILSVRC 2013的CNN模型数量大幅提升,其中纽约大学的Matthew Zeiler和Rob Fergus凭借ZF Net成为了竞赛的最终获胜者。ZF Net的Top-5错误率只有11.2%,虽然从结构上看它和AlexNet大体差不多,但它提出了一些关于提升性能的关键想法,而且比赛结果确实也比AlexNet提高了不少。
而ZF Net的成功之处不限于此,Matthew Zeiler和Rob Fergus写了一篇非常出色的论文:Visualizing and Understanding Convolutional Neural Networks。他们详细介绍了CNN背后的许多原理,并用可视化的方式说明了filter和权重所发挥的作用。
在论文中,他们首先讨论了一个观点,即CNN的崛起离不开大型数据集的建立和计算机算力的大幅提升。他们也指出研究人员对模型内部机制知之甚少的严峻现状,并认为如果研究人员对CNN缺乏洞察力,那他们其实是在本着“开发更好的模型的愿景去试错和不断失败”。
的确,比起2013年,现在我们对CNN了解得更深了,但不可否认的是许多行业内的人到现在还对它一知半解。所以像Zeiler和Fergus这样的工作还是很有意义的,这篇论文稍微修改了AlexNet模型的细节,并用可视化的方式揭示了许多有趣的问题。
ZF Net整体架构
提要
除了一些小修改,大体和AlexNet相同。
AlexNet在1500万张图片上进行训练,而ZF Net只用了130万张图片。
ZF Net没有在第一层用11× 11的filter,而是把尺寸改成了7×7并减少步长。这么做的原因是在卷积层中,用更小的filter有利于保留更多原始像素信息,而保留大量信息对第一个卷积层来说尤为重要。
随着网络不断发展,filter的数量也逐渐增加了。
把ReLU作为激活函数,把交叉熵损失作为损失函数,并用批量随机梯度下降训练模型。
在GTX 580 GPU上训练了12天。
开发了一种名为Deconvolutional Network的可视化技术,有助于检查不同特征激活与输入像素值的关系。之所以称它“Deconvenet”(反卷积),是因为它将特征映射回像素空间(与卷积层正好相反)。
DeConvNet背后的基本思想是在训练好的CNN的每一层后,在某个位置附加一个“反卷积”(DeConvNet)的操作,它有一个通道能把提取到的特征反过来映射回图像像素。
往CNN里输入一张图像,然后在每一层的计算激活,这是我们熟知的前向传递。现在,假设我们想检查第四个卷积层中某个特征的激活情况,我们可以先把其他所有激活设置为0,只把目标特征映射作为DeConvNet的输入。DeConvNet和CNN共享filter,所以只要网络确实都训练好了,这些特征映射就能通过一系列反池化(unpooling)、整流(rectify)和反滤波重新还原为原始输入图像的像素值。
它的出发点是研究图像中能激活特征映射的结构类型。让我们看看第一层和第二层的可视化。
第一层和第二层的可视化:很容易看出对于给定filter,哪部分激活得最强
正如面向新手的CNN入门指南(一)中介绍的,CNN的第一层始终是一个低层次特征检测器,它在上图中只能检测到简单的边缘和颜色,而第二个卷积层明显比上一个捕捉到了更多特征。趁热打铁,我们来看第3、4、5层。
第三层、第四层和第五层的可视化
这些层检测到了更多更高层次的特征,如狗脸和鲜花。需要注意的一点是,第一个卷积层后通常都有一个池化层对图像做下采样,它的作用是在保留更多的细节特征的前提下减少冗余,比如把32×32×3转成16×16×3。所以第二个卷积层的filter在原始图像中“看”到的范围其实是更广了。
评价
ZF Net不仅是2013年ImageNet大赛的冠军,它还提供了有关CNN的大量可视化原理解释,为后期研究贡献了提高性能的多种路径。这些可视化方法既能被用于解释CNN的内部工作原理,又提供了改进网络架构的诸多见解,这样的贡献使它成为一篇当之无愧的优秀论文。
简单而深入,这是VGG Net给所有人的普遍印象。和AlexNet、ZF Net不同,VGG Net并不是ILSVRC 2014的获胜者,但这并不妨碍它在11.2%的基础上进一步把Top-5错误率降低到7.3%。
VGG是牛津大学的Oxford Visual Geometry Group的名称缩写。2014年,牛津大学的Karen Simonyan和Andrew Zisserman创建了一个19层的CNN,它的每一层都使用大小为3×3、pad=1、stride=1的filter,同时网络的池化核也不再是3×3,而是2×2、stride=2。凭借这个新型架构,牛津大学当年在ImageNet大赛上斩获分类第二、定位任务第一的佳绩。
6种不同的VGG Net架构,其中D性能最好
提要
不同于AlexNet的11×11和ZF Net的7×7,VGG Net把卷积核全部替换成了3×3,因为作者发现2个3×3filter的感受野和1个5×5filter的相同。这样做的好处是既能保持较小的filter尺寸,又能模拟更大的filter的性能。此外,它也减少了参数数量,允许使用更多的激活函数——多了两个卷积意味着能多用两次ReLU。
3个3×3filter的堆叠所获得的感受野相当于一个7×7的filter。
随着网络层数递增,feature map的宽度高度会逐渐减小(卷积层和池化层的结果),但由于filter数量增加,它的深度会不断加深。
VGG Net在图像分类和目标定位这两个任务上表现得尤为出色。
用Caffe构建模型。
数据增强技术:Scale Jittering。
在每个卷积层后把ReLU作为激活函数,并用批量随机梯度下降训练模型。
在4块Nvidia Titan Black GPU上训练了两到三周。
评价
VGG Net是最有影响力的论文之一,因为它论证了卷积神经网络必须依靠足够深的深度才能使视觉数据的分层表示发挥作用的观点。
在GoogLeNet出现之前,上述这些架构在提升CNN性能上的做法就是加深、拓宽神经网络,为了防止过拟合,他们还要尽可能减少参数数量。但Google显然不吃这一套,在ILSVRC 2014上,它往一堆CNN中丢了一个Inception,以6.7%的Top-5错误率成了最后赢家。
据不完全统计,这应该是第一个真正不再继续往CNN里怼卷积层和池化层的成熟架构。此外,作者还强调新模型已经针对内存和计算量做了优化,让研究人员开始注意到加深网络带来的各种硬件上的不良影响。
GoogLeNet整体架构
当第一次看到GoogLeNet的整体架构时,我们一眼就能发现这是一个按顺序进行的神经网络。当然,其中也有不少并行网络。
上图的这个模块被称为Inception,下面是它的具体构成:
Inception模块全貌
图片底部的绿色框是输入,最上面的绿色框是输出。如果是一个传统的CNN,它在每一层只能执行一个操作,比如池化和卷积(还要选filter大小),但Inception模块允许网络以并行的方式同时完成所有操作——这也正是作者“naive”的地方。
Naive版Inception
上图其实是作者的最初想法,但为什么这个Naive版的Inception不起作用?如图所示,随着层数的加深,feature map中特征的空间集中度会下降,这就需要更多5×5的filter,相应的网络也需要更多的参数。因此作者在3×3和5×5的filter前加了一个1×1的filter,它可以帮助降维。假设我们有一个100×100×60的输入,这时20个1×1的卷积核就能把它降维到100×100×20,无论后面的filter是3×3还是5×5,它们输入的数组就远没有原始数据那么高维了。
换句话说,这也可以被看做是在对特征做池化,因为它的直接结果是减小特征深度,和最大池化层减小feature map的宽度和高度类似。
那么这样的结构真的有效吗?GoogLeNet(Inception v1)包含一个Network In Network层、一个中等大小的filter、一个大型的filter和一个池化操作。Network In Network层可以从图像中提取非常精细的纹理细节信息;而5×5的filter能覆盖大范围的感受野,也能从中提取大量信息。通过联合操作,研究人员能控制输入的尺寸并防止过拟合。更重要的是,每个卷积层后都跟有ReLU,它能提高网络的非线性。
简而言之,这个架构能在减小输入空间的同时防止过拟合,并兼顾内存占用和计算量的节约。
提要
在整个架构中用了9个Inception模块,总共超过100层!
没有使用全连接层,而是用了平均池化,把大小从7×7×1024降到了1×1×1024,减少了大量参数。
使用的参数量是AlexNet的十二分之一。
在测试过程中对同一张图像进行多次裁剪,输入网络用softmax计算平均值后再给出结果。
沿用R-CNN的思路检测模型。
Inception模块的后期更新。
用“一些高端GPU”训练了一周。
评价
GoogLeNet是第一个不按寻常套路堆叠层次的模型,而对于Inception模块,作者也表示创造层次结构可以提高CNN的性能和计算效率。
8层、19层、22层,之后数年,CNN在深度这条路上越走越远。想象一个普通的CNN,我们把它的层数翻倍,然后再加几个层次,这已经很深了,但很可惜,它还是远远比不上微软亚洲研究院何凯明团队于2015年年底提出的ResNet。
ResNet是一个深度达152层的新型CNN架构,除了在层数上打破了原有的记录,它在分类、检测和定位任务上也成绩斐然,以3.6%的错误率赢得了2015年的ILSVRC。这是一个令人惊叹的成果,因为目前人类依靠自身认知能力和专业水平所达到的平均成绩一直徘徊在5%-10%。
残差块(Residual Block)
ResNet的核心是残差块,而残差块背后的思路是当向网络中输入一个x后,x会经历一系列卷积—ReLU—卷积,我们把这过程中发生的的计算看做函数F(x),再加上输入的x,实际上网络要学会的函数应该是H(x)=F(x)+x。
对于以往的CNN,当训练完成后,H(x)应该恰好等于F(x)。但何凯明团队认为像这样直接求H(x)太过困难,既然H(x)=F(x)+x,那不如就从它的的残差形式F(x)+x开始进行优化。如下图所示,通过加入一个identity mapping(恒等映射),残差块对原始输入x做了一些细微的调整,这样做的直接结果就是ResNet的优化过程比普通CNN更简单。
残差块
残差块能发挥作用的另一个原始是在反向传播的反向传递过程中,因为H(x)=F(x)+x中包含加法运算,所以它们可以分配梯度,梯度传播更加顺畅。
提要
“超深!”——Yann LeCun。
152层……
仅在通过网络的前两层后,输入的空间就从224×224被压缩到了56×56。
何凯明团队尝试过建立一个1202层的CNN,但可能是因为过拟合,模型准确率较低。
用8块GPU训练了两到三周。
评价
3.6%的错误率,这个数字本身就能说明不少问题。虽然距离提出已经过去了2年多,但到目前为止,ResNet还是最好的CNN之一。同时它也开创了残差块这种伟大的做法。
福利:残差块里的残差块(好像有点晕)
这些CNN的目的是解决目标检测的问题。给定一个图像,我们希望模型能够在所有对象上绘制出检测框,它一般分为两步:一是用CNN从图像区域中检测出特征,二是利用分类器预测当前区域包含目标特征的置信度(图像分类)。
R-CNN-2013
Fast R-CNN-2015
Faster R-CNN-2015
能够确定图像中包含特定对象是一回事,但确定它具体在哪一位置就是另一回事了。从R-CNN到Fast R-CNN再到Faster R-CNN,如今的物体检测技术正趋于完善。
这是被Yann LeCun誉为下一个重大发展的神经网络。它包含两部分:一个生成模型和一个判别模型。其中判别模型的任务是确定输入图像的真实性:它是来自数据集的自然图像,还是其他渠道生成的伪图像。而生成模型的任务是通过判别模型的判定结果一遍遍提升自我,生成能愚弄对方的伪图像。
如今围绕GAN的研究有很多,但因为不是很成熟,许多人会建议新人不要盲目去深入尝试。但正如Yan Le Leun在他的Quora文章中所说的那样,GAN的判别模型其实已经意识到了数据的内部表示,它了解真实图像和生成图像之间的差异,因此把它作为CNN的特征提取器也未尝不可。如果不放手实践,可能你将错失许多学习成长的乐趣。
如果把CNN和RNN结合在一起,我们会得到什么?反正肯定不是R-CNN :laughing: 。Andrej Karpathy和李飞飞在这篇论文里向我们展示了一个很有趣的成果,即用CNN和双向RNN生成不同图像区域内的自然语言注释。
具体内容我们这里不做详谈。它的贡献在于将计算机视觉和自然语言处理等领域结合起来,为构建跨领域任务模型打开了一扇新的大门。
原文地址:adeshpande3.github.io/adeshpande3.github.io/The-9-Deep-Learning-Papers-You-Need-To-Know-About.html