论文介绍

ImageNet Classification with Deep Convolutional Neural Networks- Alex Krizhevsky, Ilya Sutskever, and Geoffrey E. Hinton

该论文是 ImageNet Large-Scale Visual Recognition Challenge (ILSVRC)-2012 competitions的 参赛模型,top 5测试错误率达到15.3%,远低于第二好的26.2%的错误率。模型使用两块GPU进行训练,有6000万参数和65万个神经元,包含5个卷积层,其中几个卷积层后连接着max-pooling层,以及三个全连接层,输出为1000路softmax。模型使用了ReLU非饱和神经元,以及dropout等方法来避免过拟合。Alex Krizhevsky的SuperVison网络在ImageNet数据集上的改进,证明了大规模数据是神经网络成功应用的基础之一,也证明了卷积神经网络模型的深度与模型的表现具有一定的相关性。

序言

受到Yann LeCun发布的关于神经网络的启发,Alex等发现卷积神经网络能够很好二维图像的特征。尽管多层神经网络和反向传播算法早在1980s就已经被发现能够很好地从训练数据中进行特征检测,但是直到海量标注数据和计算力到来他们才开始展现作用。

介绍

小型数据集(NORB、Caltech-101/256、CIFAR-10/100等)的出现,使得机器学习方法在简单的对象识别任务方面有成效。但是新的超大型图像数据集,如LabelMe(包含数十万分割图像)和李飞飞博士发起的ImageNet(包含1500万张已标注高清图片,这些图片超过22000个类别)才使得基于卷积神经网络的复杂图像识别有可能成功。并且,基于先验知识和模型设计,卷积神经网络可以弥补机器学习方法在图像复杂度方面的缺陷。卷积神经网络与前馈神经网络相比(feedback neural networks)在模型网络结构和层数类似的情况下,网络中的连接数和参数都要少得多,更加容易训练,并且在最终的模型效果来说相差无几。

尽管卷积神经网络非常优秀和高效,但是应用在大规模高分辨率图像上成本仍然很高。GPU训练与优化的2D卷积结合,在有足够多标注的图像数据集的训练下,可以避免严重的过拟合。

该论文的主要工作为训练了一个大型卷积神经网络,并在ILSVRC-2012取得了非常好的成绩。并贡献了一种在GPU上实现的优化算法,提升卷积神经网络中的2D卷积操作和其他卷积神经网络训练中的原子操作。该GPU优化算法,即cuda-convnet算法已开源。模型中也包含了其他用以改进算法表现和减少训练时间的操作,整个模型在2个3GB内存的GPU上并行进行训练。为了避免过拟合,模型也提出了ReLu激活函数和Dropout等方法。最终的网络包含5个卷积层和三个全连接层,经过实验这种网络结构表现最优,去掉任何一层后模型性能都会下降。

数据集

ILSVRC的数据集包含了120万训练图像、5万验证图像和15万测试图像。该比赛主要由两个错误率指标,top-1 error rate 和 top-5 error rate,在比赛中指的是:对于一张测试图像,模型给出五个可能性递减的分类,第一个分类标签错误率和前五个标签错误率。通常来说top-5错误率会远低于top-1错误率。

网络结构



网络模型包含5个卷积层,3个全连接层。分别在2个GPU上进行训练,并且只在必要的步骤才进行GPU间的数据交换,例如第2个卷积层的输出连接到两个GPU上的网络上,所有的全连接层也是在2个GPU之间进行数据交换。这种双GPU的训练模式,允许训练更大的模型和参数,经过卷积和池化后,参数和连接的大小可以在一台计算机上进行计算,并且能够降低些许错误率。

ReLu

模型使用了ReLu(Rectified Linear Unit)非线性单元,最先由Nari和Hinto提出该方法。在卷积神经网络模型中效果要比tanh 或 $(1+e{-x}){-1}$等线性激活函数要好,可以降低梯度下降所用的训练时间。

Response normalization

该模型使用了局部响应归一化来帮助泛化。

$bi_{x,y}=ai_{x,y}/\left(k+\alpha \sum_{j=max(0,i-n/2)}{min(N-1,i+N/2}(aj_{x,y})2\right)\beta,$

其中,参数k,n,α,β是模型超参,在训练前就已经设置好。所有的ReLu非线性之后都会应用局部归一化。这种归一化可以帮助减少top1和top5错误率至少1.4%和1.2%。

Overlapping Pool

池化层在卷积神经网络中汇集同一卷积核映射中的向量神经元的输出。一般相邻的神经元汇总的池化层并不重合。池化层可以看作是相邻s个像素的池化单元网格组成,每个网格汇总了以池化单元位置为中心的z*z的领域。如果s=z,那么该池化操作就是卷积网络中的局部池化层。如果 s<z ,那么该池化层就是重叠池化。重叠池化能够减少模型错误率并且一定程度上防止过拟合。

模型架构

网络在第一层和第二层卷积层之后添加了响应归一化(Response normalization),最大池化层(max pooling)在每一个Response normalization后记第四层卷积层后添加,ReLu非线性激活函数在每一层卷积层和全连接层的输出上应用。最后一层全连接层的输出通过1000-way softmax处理后产生一个1000类标签的分布。

第一个卷积层的输入是2242243的图像,包含96个11113的卷积核,步幅为4像素,这是卷积核中相邻神经元感受野中心之间的距离。第二层卷积层将第一层卷积层响应归一化和池化后的输出作为输入,用256个大小为5548的核进行过滤,三、四、五层卷积层互相连接,没有经过任何的池化或者归一层。第三个卷积层有384个大小为33256的卷积核,连接到第二层经过归一化和池化的输出后。第四卷积层有384个33192大小的核,第五卷积层有256个33192大小的核,全连接层各有4096各神经元。

防止过拟合

数据增强

防止过拟合的方法之一就是扩充数据集,通过使用带标签转换方法对原始数据进行处理生成新的数据,也就是说对于原始数据的转换不会影响其分类标签。通过对图像进行水平翻转,并且从256256像素的原图像和翻转后图像中抽取224224的分块。该方法将原始训练集扩充到2048倍(23232,2种图像按照224224从原始256256像素矩阵中提取,水平和垂直方向上各可移动256-224=32次)。

第二种数据增强的方式就是改变训练图像RGB通道的强度来模拟图像的光照和颜色改变。通过主成分分析提取RGB通道矩阵的特征向量,并将特征向量乘以一个平均值为0方差0.1的高斯噪音。图像像素矩阵进行变换:

$I_{xy}'=[IR_{xy},IG_{xy},IB_{xy}]+[p_1,p_2,p_3][\alpha_1\lambda_1,\alpha_2\lambda_2,\alpha_3\lambda_3]T,$

p和λ是RGB像素值的3*3协方差矩阵的特征向量和特征值,α则是上述的高斯噪声随机值。这种数据增强的方案代表一个重要的特征,即自然图像的照明强度和颜色不改变其本身的分类。该方案将top1错误率降低了1%以上。

Dropout

模型使用了参数为0.5的Dropout方法来减少过拟合,通过对神经元的输出以随机概率进行置零被dropout的神经元不参与前向传播和反向传播。对于模型输入,神经网络以一种随机的架构进行数据采样,但是这些架构贡献权重。这种技术降低了神经元的复杂协同,每个神经元不依赖其他神经元的存在,这使得神经元更多地去学习鲁棒的特征。

模型细节

训练过程使用随机梯度下降方法,批大小为128,动量为0.9,权重衰减率为0.0005。权重衰减不仅仅是一个正则化因子,它还减少了模型的训练错误。

权重的$w$更新公式如下:

$v_{i+1} :=0.9\cdot v_i-0.0005\cdot\epsilon \cdot w_i-\epsilon\cdot \left<\frac{\partial{L}}{\partial{w}}|{w_i}\right>{D_i},$

$i$是迭代指数,$v$是动量,$\epsilon$是学习率,$\left<\frac{\partial{L}}{\partial{w}}|{w_i}\right>{D_i}$是第i个batch $D_i$关于$w$的目标导数的平均值。

对权重进行均值为0、方差为0.01的高斯分布初始化,对第2、4、5卷积层和全连接层用常量1进行bias偏差的初始化。这种初始化通过向ReLu输入正数,加速了早期的训练过程。其余层的神经元的bias用0进行初始化。

模型的学习率手动设置为0.01,在验证集错误率停止降低后将把新的学习率设置为前一学习率的1/10。

整个训练过程使用2块GTX 580 3GB显卡,在120万图像的ImageNet训练集上花费5-6天训练完成。

结果



在ILSVRC-2010测试集上,在竞赛中取得最好成绩的模型采用了六个在不同特征集上训练的sparse-coding模型的平均预测值方法。公开发表的论文中有一个模型取得了比sparse-coding模型更好的效果,它采用了SIFT特征提取和FisherVector(FVs)方法。

在ILSVRC-2012比赛中,使用5层神经网络在测试集的top-5错误率为16.4%,再加上两层预训练的卷积神经网络后,错误率下降为15.3%。这证明神经网络的深度有助于提高模型的表现。

量化评估



通过将训练任务分布在两个GPU上进行,模型中间过程也展现出了这种方法的一些特点。上图是模型第一层卷积层输出的结果,包含了96个11113的卷积核。上面的48个是GPU 1上的学习结果,可以看到它主要学习了图像的结构特征,下面48个GPU 2的学习结构,它更多地学习到了图像的颜色特征。



图4展示了一些示例图片和top-5预测结果,可以看到大部分都是正确并且具有合理性,给出的5个预测结果都是与图片内容近似的。对于不在图像中心的物体也可以很好地识别。

通过对卷积神经网络的全连接层进行分析,发现全连接层中的4096维向量,可以通过计算两张图片的激活函数向量欧氏距离,可以用来分析图形之间的相似性。相比较与直接用原始的像素值进行判断,激活函数向量计算更加容易和有效。这种方法相比于自动编码器,不使用图像标签,而是尝试检索具有相似边缘模式的图形。

总结

该篇论文展示了深度神经网络的深度与宽度对于模型表现的影响,对于ImageNet训练集为例,移除任何一个中间网络都会导致模型的表现下降。在使用更深的神经网络和更长的训练时间后,模型表现也会有一定的提升。同时也可以在视频序列中使用深度神经网络,它在时间上的上下文将为对象识别提供更多信息。也感谢李飞飞做出了巨大的贡献和努力,制作了ImageNet这样一个标记数据集来展示神经网络真正的能力。

AlexNet-文献阅读笔记的更多相关文章

  1. 文献阅读笔记——group sparsity and geometry constrained dictionary

    周五实验室有同学报告了ICCV2013的一篇论文group sparsity and geometry constrained dictionary learning for action recog ...

  2. 人体姿势识别,Convolutional pose machines文献阅读笔记。

    开源实现 https://github.com/shihenw/convolutional-pose-machines-release(caffe版本) https://github.com/psyc ...

  3. CI框架源代码阅读笔记3 全局函数Common.php

    从本篇開始.将深入CI框架的内部.一步步去探索这个框架的实现.结构和设计. Common.php文件定义了一系列的全局函数(一般来说.全局函数具有最高的载入优先权.因此大多数的框架中BootStrap ...

  4. 《Graph Neural Networks: A Review of Methods and Applications》阅读笔记

    本文是对文献 <Graph Neural Networks: A Review of Methods and Applications> 的内容总结,详细内容请参照原文. 引言 大量的学习 ...

  5. Nature/Science 论文阅读笔记

    Nature/Science 论文阅读笔记 Unsupervised word embeddings capture latent knowledge from materials science l ...

  6. [系统重装日志1]快速迁移/恢复Mendeley的文献和笔记

    一时手贱把原先系统的EFI分区给删了,按照网上的教程还没有恢复成功,无奈之下只能重装系统,想想这么多环境和配置真是酸爽. 身为一个伪科研工作者,首先想到的是自己的文献和阅读笔记.我所使用的文献管理工具 ...

  7. 阅读笔记 1 火球 UML大战需求分析

    伴随着七天国庆的结束,紧张的学习生活也开始了,首先声明,阅读笔记随着我不断地阅读进度会慢慢更新,而不是一次性的写完,所以会重复的编辑.对于我选的这本   <火球 UML大战需求分析>,首先 ...

  8. [阅读笔记]Software optimization resources

    http://www.agner.org/optimize/#manuals 阅读笔记Optimizing software in C++   7. The efficiency of differe ...

  9. 《uml大战需求分析》阅读笔记05

    <uml大战需求分析>阅读笔记05 这次我主要阅读了这本书的第九十章,通过看这章的知识了解了不少的知识开发某系统的重要前提是:这个系统有谁在用?这些人通过这个系统能做什么事? 一般搞清楚这 ...

  10. <<UML大战需求分析>>阅读笔记(2)

    <<UML大战需求分析>>阅读笔记(2)> 此次读了uml大战需求分析的第三四章,我发现这本书讲的特别的好,由于这学期正在学习设计模式这本书,这本书就讲究对uml图的利用 ...

随机推荐

  1. 20220724-Java的封装相关

    目录 含义 常见使用方法 个人理解 含义 封装 (encapsulation) 指隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读取和修改的访问级别. 常见使用方法 class Pers ...

  2. std::hash<std::pair<int, int> >

    标题是搞笑的 ! 这个问题只需要 since C++11 问题:怎么让 unordered_map 支持使用 pair 作为 key? 如果你能把两个东西压到一个基本类型里那么就不用解决这个问题了 . ...

  3. 基于图像二维熵的视频信号丢失检测(Signal Loss Detection)

    1 图像二维熵 ​图像二维熵作为一种特征评价尺度能够反映出整个图像所含平均信息量的高低,熵值(H)越大则代表图像所包含的信息越多,反之熵值(H)越小,则图像包含的信息越少.对于图像信息量,可以简单地认 ...

  4. 完整代码:AgileFontSet迅捷字体设置程序

    AgileFontSet用于快捷设置Windows系统字体和桌面图标间距,介绍参见:https://www.cnblogs.com/ybmj/p/11340105.html .这里提供AgileFon ...

  5. 牛客网 十二桥问题(状压DP)

    https://ac.nowcoder.com/acm/contest/1104/B 注意到\(\text{K}\)只有\(12\),因此对起点与每个毕经边对应的点单源最短路,\(\text{DP}\ ...

  6. Redis 10 位图

    参考源 https://www.bilibili.com/video/BV1S54y1R7SB?spm_id_from=333.999.0.0 版本 本文章基于 Redis 6.2.6 概述 Redi ...

  7. Web 前端实战:Gitee 贡献图

    前言 这次要做的 Web 前端实战是一个 Gitee 个人主页下的贡献图(在线 Demo),偶尔做一两个,熟悉熟悉 JS 以及 jQ.整体来说这个案例并不难,主要是控制第一个节点以及最后一个节点处于星 ...

  8. kafka手动设置offset

    项目中经常有需求不是消费kafka队列全部的数据,取区间数据 查询kafka最大的offset: ./kafka-run-class.sh kafka.tools.GetOffsetShell --b ...

  9. 回溯、贪心、DP的区别和联系

    四大常用算法:分治.贪心.回溯.动态规划 回溯算法是个"万金油".基本上能用跟动态规划.贪心解决的问题,都可以用回溯去解决.回溯算法相当于穷举搜索,穷举所有情况,然后得到最优解.不 ...

  10. [CF1525D] Armchairs (DP / 模拟费用流)

    题面简述 一条线上等距地分布着 n n n 老鼠和 m m m 洞( m ≥ n m\geq n m≥n),这连续 n + m n+m n+m 个位置上要么是老鼠要么是洞,一个老鼠进一个洞,代价是所有 ...