AlexNet-文献阅读笔记
论文介绍
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-文献阅读笔记的更多相关文章
- 文献阅读笔记——group sparsity and geometry constrained dictionary
周五实验室有同学报告了ICCV2013的一篇论文group sparsity and geometry constrained dictionary learning for action recog ...
- 人体姿势识别,Convolutional pose machines文献阅读笔记。
开源实现 https://github.com/shihenw/convolutional-pose-machines-release(caffe版本) https://github.com/psyc ...
- CI框架源代码阅读笔记3 全局函数Common.php
从本篇開始.将深入CI框架的内部.一步步去探索这个框架的实现.结构和设计. Common.php文件定义了一系列的全局函数(一般来说.全局函数具有最高的载入优先权.因此大多数的框架中BootStrap ...
- 《Graph Neural Networks: A Review of Methods and Applications》阅读笔记
本文是对文献 <Graph Neural Networks: A Review of Methods and Applications> 的内容总结,详细内容请参照原文. 引言 大量的学习 ...
- Nature/Science 论文阅读笔记
Nature/Science 论文阅读笔记 Unsupervised word embeddings capture latent knowledge from materials science l ...
- [系统重装日志1]快速迁移/恢复Mendeley的文献和笔记
一时手贱把原先系统的EFI分区给删了,按照网上的教程还没有恢复成功,无奈之下只能重装系统,想想这么多环境和配置真是酸爽. 身为一个伪科研工作者,首先想到的是自己的文献和阅读笔记.我所使用的文献管理工具 ...
- 阅读笔记 1 火球 UML大战需求分析
伴随着七天国庆的结束,紧张的学习生活也开始了,首先声明,阅读笔记随着我不断地阅读进度会慢慢更新,而不是一次性的写完,所以会重复的编辑.对于我选的这本 <火球 UML大战需求分析>,首先 ...
- [阅读笔记]Software optimization resources
http://www.agner.org/optimize/#manuals 阅读笔记Optimizing software in C++ 7. The efficiency of differe ...
- 《uml大战需求分析》阅读笔记05
<uml大战需求分析>阅读笔记05 这次我主要阅读了这本书的第九十章,通过看这章的知识了解了不少的知识开发某系统的重要前提是:这个系统有谁在用?这些人通过这个系统能做什么事? 一般搞清楚这 ...
- <<UML大战需求分析>>阅读笔记(2)
<<UML大战需求分析>>阅读笔记(2)> 此次读了uml大战需求分析的第三四章,我发现这本书讲的特别的好,由于这学期正在学习设计模式这本书,这本书就讲究对uml图的利用 ...
随机推荐
- ES6中class方法及super关键字
ES6 class中的一些问题 记录下class中的原型,实例,super之间的关系 //父类 class Dad { constructor(x, y) { this.x = 5; this.y = ...
- 【Java线程池】 java.util.concurrent.ThreadPoolExecutor 分析
线程池概述 线程池,是指管理一组同构工作线程的资源池. 线程池在工作队列(Work Queue)中保存了所有等待执行的任务.工作者线程(Work Thread)会从工作队列中获取一个任务并执行,然后返 ...
- Java学习 (九)基础篇 包机制&JavaDoc
包机制 为了更好地组织类,Java提供了包机制,用于区别类名的命名空间 包语句的语法为: package pkg[.pkg2[.pkg3...]]; 一般利用公司域名倒置作为包名:com.feng.x ...
- SpringBoot 如何集成 MyBatisPlus - SpringBoot 2.7.2实战基础
SpringBoot 2.7.2 学习系列,本节通过实战内容讲解如何集成 MyBatisPlus 本文在前文的基础上集成 MyBatisPlus,并创建数据库表,实现一个实体简单的 CRUD 接口. ...
- PROFIBUS,PROFINET,Ethernet三者的区别
PROFIBUS,PROFINET,Ethernet三者的区别 简单一点说,PROFINET=PROFIbus+etherNET,把Profibus的主从结构移植到以太网上,所以profinet会有C ...
- Linux Shell 自动交互功能
需求背景: 近日,在安装某软件过程,发现在安装过程需要输入一些信息才能继续下一步操作,在机器数量较少情况下,我们可以单台登录上去完成安装操作,但当机器数量超过一定时,如果再手动登录操作,就会产生大 ...
- @Autowired注解 --required a single bean, but 2 were found出现的原因以及解决方法
@Autowired注解是spring用来支持依赖注入的核心利器之一,但是我们或多或少都会遇到required a single bean, but 2 were found(2可能是其他数字)的问题 ...
- Luogu2343 宝石管理系统(平衡树)
平衡树维护总第K大:插入 #include <iostream> #include <cstdio> #include <cstring> #include < ...
- React报错之JSX element type does not have any construct or call signatures
正文从这开始~ 总览 当我们试图将元素或react组件作为属性传递给另一个组件,但是属性的类型声明错误时,会产生"JSX element type does not have any con ...
- anltr 解析MYSQL
String sql = "select a as c,b as s,'zhange' F, 1/5 as e from t_order"; final MysqlQueryLex ...