首页 > 其他分享 >AlexNet-文献阅读笔记

AlexNet-文献阅读笔记

时间:2022-10-13 16:34:08浏览次数:57  
标签:训练 卷积 模型 笔记 神经网络 GPU 图像 文献 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数据集上的改进,证明了大规模数据是神经网络成功应用的基础之一,也证明了卷积神经网络模型的深度与模型的表现具有一定的相关性。
image.png

序言

受到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错误率。

网络结构

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

ReLu

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

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天训练完成。

结果

image.png
在ILSVRC-2010测试集上,在竞赛中取得最好成绩的模型采用了六个在不同特征集上训练的sparse-coding模型的平均预测值方法。公开发表的论文中有一个模型取得了比sparse-coding模型更好的效果,它采用了SIFT特征提取和FisherVector(FVs)方法。
在ILSVRC-2012比赛中,使用5层神经网络在测试集的top-5错误率为16.4%,再加上两层预训练的卷积神经网络后,错误率下降为15.3%。这证明神经网络的深度有助于提高模型的表现。

量化评估

image.png
通过将训练任务分布在两个GPU上进行,模型中间过程也展现出了这种方法的一些特点。上图是模型第一层卷积层输出的结果,包含了96个11113的卷积核。上面的48个是GPU 1上的学习结果,可以看到它主要学习了图像的结构特征,下面48个GPU 2的学习结构,它更多地学习到了图像的颜色特征。
image.png
图4展示了一些示例图片和top-5预测结果,可以看到大部分都是正确并且具有合理性,给出的5个预测结果都是与图片内容近似的。对于不在图像中心的物体也可以很好地识别。
通过对卷积神经网络的全连接层进行分析,发现全连接层中的4096维向量,可以通过计算两张图片的激活函数向量欧氏距离,可以用来分析图形之间的相似性。相比较与直接用原始的像素值进行判断,激活函数向量计算更加容易和有效。这种方法相比于自动编码器,不使用图像标签,而是尝试检索具有相似边缘模式的图形。

总结

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

标签:训练,卷积,模型,笔记,神经网络,GPU,图像,文献,AlexNet
From: https://www.cnblogs.com/d42z/p/16788621.html

相关文章

  • 自动阅读文献工具: PaperDigest
    输入文献的DOI号或者直接上传PDF在几秒内就能自动生成文献研究的内容总结以及文献得出的结论: ......
  • Python 学习笔记
    代码编写过程中的需要注意事项1.PEP是PythonEnhancementProposal的缩写,通常翻译为“Python增强提案”2.类总是使用驼峰格式命名,即所有单词首字母大写其余字母小写,类......
  • k8s笔记2(Harbor)
    1、安装官方文档通过Helm部署Harbor(​​Harbordocs|DeployingHarborwithHighAvailabilityviaHelm(goharbor.io)​​)----->nodePort方式暴露服务;----->按提示填写c......
  • 文献综述必备工具Connected Papers如何使用
    ConnectedPapers是一款知名的文献分析工具。只要输入要分析论文的以下信息(doi、arXivurl、标题、SemanticScholarurl或PubMedurl),就可查询到该论文的引用网络、先前研......
  • 221013初学C语言笔记
    把Test()强制类型转换成int(*)() 函数指针,再解引用而Test()函数本身就是int型而Test函数名是一个指针。......
  • [学习笔记]拉格朗日插值
    对于拉格朗日插值的了解始于知乎上的数列问题:问:\(1,3,5,7\)的下一项是什么啊?答:根据拉格朗日插值公式,可以显然地构造函数\[\largef(x)=\dfrac{18111}{2}x^4-90555x^3+......
  • SQL封装库学习笔记1.0
    自用学习写的封装库使用方法:Nuget中搜索HNGYSql1.查询数据方法publicstringCommandSelect(stringconnectionString,stringcommandString)connectionString:所连......
  • 第四章学习笔记——并发编程(20201217王菁)
    并发编程  在早期,大多数计算机只用一个处理组件,称为处理器或中央处理器(CPU)。并行算法是一种计算方法,它会尝试使用多个执行并行算法的处理器更好地解决问题。并行计算......
  • tf.py_func的一些使用笔记
    tensorflow.py_func是TensorFlow1.x版本下的函数,在TensorFlow.2.x已经不建议使用了,但是依然可以通过tf.compat.v1.py_func的方式来进行调用。 可以说TensorFlow1.x下的p......
  • 学习笔记7
    第四章并发编程教材学习内容总结本章论述了并发编程,介绍了并行计算的概念,指岀了并行计算的重要性;比较了顺序算法与并行算法,以及并行性与并发性;解释了线程的原理及其相......