【论文精读2】11年后重读深度学习奠基作之一:AlexNet | 您所在的位置:网站首页 › 尚美苑画室北京 › 【论文精读2】11年后重读深度学习奠基作之一:AlexNet |
基本论文结构:1.title 2.abstract 3.introduction 4.method 5.experiments 6.conclusion 第一遍:【读首尾】关注标题、摘要、结论,看是否自己研究的相关。看完之后可以看部分实验和方法里的关键图和表,进而判断这篇论文是否适合自己。 第二遍:【通读论文、不推细节】忽略部分细节,看懂重要图和表里的每个词,方法对比等。圈出部分重要文献。看懂文章针对的问题、解决方法、效果怎么样。 第三遍:【推细节】最详细的一遍,知道每一段和每一句干什么,脑补过程、换位思考。提出什么问题,用什么方法来解决这个问题。实验是怎么做的。合上文章,回忆每一个部分在讲什么。思考作者的流程、实验步骤和遗留问题,是否能复现 or 继续解决? 前言这篇论文是由Hinton、Alex等人在2012年发表的,提出了一种基于深度卷积神经网络的图像分类方法,并在ImageNet数据集上实现了突破性的结果,将误差降低了约15%。这篇论文的贡献在于提出了一种新的方法,利用深度卷积神经网络来提取高层次的特征表示,并成功地应用于大规模图像分类问题。这个方法被称为“深度学习革命”的开端,推动了深度学习领域的发展和应用。 第一遍论文标题:《ImageNet Classification with Deep Convolutional Neural Networks》 AlexNet:深度学习(DL)浪潮的奠基作之一 视角1:回到 2012 年, 理解文章 视角2:回到现在, 哪写东西仍然成立的 or 过时的 1.标题ImageNet(当时最大的图片分类数据集 100w 图片 1000类) Classification Deep Convolutional:2012 convolution 没有 tree、SVM 火 关于作者 Alex:第一作者命名的网络 轶事:2012 年的Goolge 研究院 引用次数 > 10w 有 20 + 人,都去参加了讲座;Ilya 讲了 3 个 dirty tricks:图片增强、ReLU、dropout,赢了比赛。说效果特备好,给大家分享了这个事情。 大佬们的期待:这个工作揭示了深刻的见解,对世界的新理解;模型的新理解 or 任意关于模型的解释部分,不单纯只是 提出模型效果好 就可以。 整个报告结束后 不知道 Why 效果好?How to apply? 在哪些地方的应用好? Hinton:DL 先驱 2.摘要1 What:干了什么? 训练了一个large 的 deep CNN 以分类ImageNet LSVRC-2010比赛中的120 w 图片的 1000 个类别。 2 Outcome:效果如何? 比前人的工作都好 top-1 error: 37.5% top-5 error: 17% 3 网络长什么样? 6000w parameters(参数),65 w neurons(神经元) 5 个卷积层 (< 5 max-pooling 层) + 3 个全连接层(1000-way softmax) 4 这么多参数、怎么训练快点? non-saturating neurons(非饱和神经元) + GPU 实现卷积运算 当时的情况:GPU的实现在2012年已经算是比较正常了,在07年NVIDIA出了cuda这个库之后,那几年在机器学习界用的还挺多,MATLAB GPU加速包 5 这么多参数、学过头了怎么办? 减少FC过拟合(Fully-Connected layers),通过正则化方法dropout,效果非常好 6 为什么我这么厉害? 想知道?不告诉你,但我们很厉害!比赛冠军!效果远超第二! 3.结论本文无 conclusion(一般和摘要一一对应),只有 discussion (吐槽hh,未来还要做什么) P1:文章总结 一句话,怎么总结我的好? 我们的结果表明,一个大型的深度卷积神经网络能够使用纯监督学习在高度具有挑战性的数据集(ImageNet )上实现破纪录的结果。 什么情况,我们的网络性能会下降呢? 如果去掉一个卷积层(a single convolutional layer),网络性能就会下降。 例如,删除任何中间层都会导致网络top-1性能损失约2%。 深度非常重要。 现在的角度讨论:深度重要,但深度是最重要的吗? 去掉一层 convolutional layer, 降低 2%;不能证明深度是最重要的。 可能的情况:没设置好参数。 实际上AlexNet 可以去掉一些层、调节中间参数,效果不变。当时直接砍掉一层,掉 2% 可能是搜索参数做的不够,没调好参数。 但反过来讲,结论没问题 深宽都重要,类比:照片的高宽比 深度重要 --> CNN 需要 很深。 宽度也重要 -->不能 特别深 + 特别窄 or 特别浅 + 特别宽 P2:未来研究 我们没有做什么? did not use any unsupervised pre-training 不用 unsupervised pre-training 也没关系? 2012年 DL 的目的是:像“人”(不一定知道真实答案) 书读百遍、其意自现。 通过训练一个非常大的神经网络,在没有标签的数据上,把数据的内在结构抽取出来。 关注的潮流怎么改变的? 在有AlexNet之前 大佬们爱:无监督学习 (那Why 大佬们不爱 有监督学习?) (有监督学习 打不赢 树 SVM ) AlexNet 证明 “大力出奇迹”。模型够大、有标签数据够多、我就最强 直到最近几年(2021前后)BERT、GAN在自然语言界的兴起,才把大家注意力又回到了无监督。 我们认为 pre-training 为什么好? 有充足计算资源 可以 增加网络 size 时,无需增加标注数据。 我们有多牛? 我们可以通过 让网络变大、训练更久,变得更强。 但2012年的结果 和人类比还是有差距。 而现在图片里找简单的物品,DL 比人类好很多;图片识别在 无人车驾驶 的应用。 我们怎么继续牛呢,未来要做什么呢? 在 video 上训练 very large and deep CNN,因为 video 里的时序信息可以 辅助理解 图片的空间信息。 就算到目前(2021),video 还是很难。why?图片和语言进展不错,video相对于图片的计算量大幅增加,video 还有一些版权问题。 4.重要的图和公式结果测试展示:效果在比较难的 case 表现不错。 向量集合:输入图片在 CNN 的倒数第二层的输出,作为每个图片的语义向量 给定一张图片,返回和我向量相似的 图片;结果还挺靠谱。 虽然文章中没说讨论这个有多重要,其实这是这篇文章最重要的结果,为什么? 深度神经网络训练的结果,图片最后的向量,在语义空间里的表示特别好~相似的图片会把他放在一起,是一个非常好的特征。非常适合后面的 ML,一个简单的 softmax 就能分类的很好! 和当前最好结果的对比:远远超过别人(大大的卖点~) 96个卷积核 模型架构图 第一遍可能看不懂。 第一遍能看懂什么图? 实验结果图,比较了解的方向的模型结构图。 以后第一遍读论文,遇到比较新、开创性、看不懂的模型结构图,第一遍放下,后面再看。 5.知道了什么第一遍的印象:结果特别好、NN实现的,为什么好?怎么做的? 第一遍读完做什么? 要不要继续读? 不读:这是一个很好用的 视觉网络;研究无关,放弃 读:CV研究者,这项工作很好,赢了今年(2012)的比赛,明年大家都用这个模型打比赛,我不试试吗? 第二遍AlexNet论文逐段精读 1.Introduction 介绍一篇论文的第一段通常是讲个故事、做什么研究、哪个方向、这个方向有什么东西、为什么很重要 第一段:目前的目标识别方法主要利用机器学习方法。为了提高它们的性能,我们可以收集更大的数据集,学习更强大的模型,并使用更好的技术来防止过拟合。小图像数据集的缺点已经被广泛认识到。 第二段:为了从数百万张图像中了解数千个物体,我们需要一个具有强大学习能力的模型。描述了怎么做神经网络,这里只介绍了CNN。 第三段:CNN虽然很好,但是很难训练、训练不动。但是好在我现在有了gpu,gpu算力能跟上,使得我能够训练很大的东西。而且最近的数据集(如ImageNet)包含足够多的标记示例,可以在没有严重过拟合的情况下训练此类模型。 第四段:讲了一下paper的贡献: 我们在比赛中使用的ImageNet子集上训练了迄今为止最大的卷积神经网络之一,并获得了迄今为止报道过的最好的结果。我们编写了一个高度优化的2D卷积GPU实现,以及训练卷积神经网络中固有的所有其他操作,我们将其公开。我们的网络包含了许多新的和不寻常的特征,这些特征提高了它的性能,减少了它的训练时间(第三节描述)。我们的网络的规模使得过拟合成为一个重要的问题,即使有120万个标记的训练示例,所以我们使用了几种有效的技术来防止过拟合(第四节描述)。我们最终的网络包含5个卷积层和3个全连接层,这个深度似乎很重要:我们发现删除任何卷积层(每个卷积层包含的模型参数不超过1%)都会导致性能较差。第五段:得出结论,只要等待更快的gpu和更大的数据集出现,我们的结果就可以得到改善。 2.The Dataset 数据集第一二段介绍了一下用了哪些数据集,在哪些数据集上测试了。 第三段说了对图片的处理方式。ImageNet由可变分辨率的图像组成,而我们的系统需要恒定的输入维数。因此,我们将图像采样到256 × 256的固定分辨率。给定一个矩形图像,我们首先重新缩放图像,使较短的边的长度为256,然后从结果图像中裁剪出中央的256×256补丁。我们没有以任何其他方式对图像进行预处理,除了从每个像素中减去训练集上的平均活动。所以我们在像素的原始RGB值(居中)上训练我们的网络。 沐: 重点是最后一段:ImageNet中图片的分辨率是不一样的,因此将每张图片变成了一个256*256的图片: 将图片的短边减少到256,长边是保证高宽比不变的情况下也往下降,长边如果依然多出来的话,如果多于256的话,就以中心为界将两边裁掉,裁成一个256*256的图片没有做任何的预处理,只是对图片进行了裁剪网络是在raw RGB Value上训练的当时做计算机视觉都是将特征抽出来,抽SIFT也好,抽别的特征也好(imagenet数据集也提供了一个SIFT版本的特征),这篇文章说不要抽特征,直接是在原始的Pixels上做了在之后的工作里面基本上主要是end to end(端到端):及那个原始的图片或者文本直接进去,不做任何的特征提取,神经网络能够帮助你完成这部分工作3.The Architecture 架构架构包含八个学习层——五个卷积层和三个全连接层。 3.1ReLU非线性 在梯度下降的训练时间方面,这些饱和非线性比非饱和非线性曲线慢。 用了ReLU之后训练的特别快 (和tanh对比) 3.2多GPU训练 讲了一下他们在工程上的细节。 3.3局部响应归一化(Local Response Normalization) relu有一个理想的特性,即它们不需要输入归一化来防止它们饱和。如果至少有一些训练示例对ReLU产生正输入,学习将在该神经元中发生。然而,我们仍然发现下面的局部归一化方案有助于泛化。 3.4重叠的池 Overlapping Pooling 对一个传统的用Pooling的方法做了一定的改动,改动不大,但效果不错。 3.5总体架构 网络包含8层权重;前五个是卷积的,剩下三个是完全连接的。最后一个全连接层的输出被馈送到一个1000路softmax,它产生1000个类标签的分布。我们的网络最大化了多项逻辑回归目标,这相当于最大化了预测分布下正确标签的对数概率的跨训练案例的平均值。 方框表示每一层的输入和输出的数据的大小输入的图片是一个高宽分别为224*224的3通道RGB图片第一层卷积:卷积的窗口是11*11,有48个输出通道,stride等于4有两个GPU,GPU1和GPU0都有自己的卷积核参数对抗过拟合的两种主要方法: 4.1 Data Augmentation 数据增强 第一种形式的数据增强包括生成图像平移和水平反射。第二种形式的数据增强包括改变训练图像中RGB通道的强度。4.2 Dropout 随机的把一些隐藏层的输出变成用50%的概率设为0,每一次都是把一些东西设置为0,所以模型也就发生了变化,每次得到一个新的模型,但是这些模型之间权重是共享的除了设置成0的,非0的东西都是一样的,这样就等价于做了模型融合后来大家发现dropout其实也不是在做模型融合,更多的dropout就是一个正则项(dropout在现行模型上等价于一个L2正则项)这里将dropout用在了前面的两个全连接层上面文章说没有dropout的话,overfitting会非常严重,有dropout的话,训练会比别人慢两倍现在CNN的设计通常不会使用那么大的全连接层,所以dropout也不那么重要,而且GPU、内存也没那么吃紧了dropout在全连接上还是很有用的,在RNN和Attension中使用的非常多5 Details of learning 学习/训练细节讲述了模型是如何训练的 使用SGD(随机梯度下降)来进行训练,SGD调参相对来说可能会比较难调,后来发现SGD里面的噪音对模型的泛化性其实是有好处的,所以现在深度学习中普遍使用SGD对模型进行训练。在这个文章之后SGD基本上在机器学习界成为了最主流的一个优化算法。他们使用的SGD,批大小为128个样本,动量/momentum为0.9,权重衰减/weight decay为0.0005,momentum也是因为这篇文章之后用的特别多,虽然在2010年的时候有大量的加速算法,里面有很fancy的各种加速SGD算法,但是现在看起来似乎用一个简单的momentum也是不错的权重用的是一个均值为0,方差为0.01的高斯随机变量来初始化(0.01对很多网络都是可以的,但是如果特别深的时候需要更多优化,但是对于一些相对简单的神经网络,0.01是一个不错的选项)现在就算是比较大的那些BERT,也就是用了0.02作为随机的初始值的方差在第二层、第四层和第五层的卷积层把初始的偏移量初始化成1,剩下的全部初始化成0每个层使用同样的学习率,从0.01开始,然后呢如果验证误差不往下降了,就手动的将他乘以0.1,就是降低十倍ResNet中,每训练120轮,学习率每30轮就下降0.1另外一种主流的做法就是,前面可以做得更长一点,必须能够60轮或者是100轮,然后再在后面下降在Alex之后的很多训练里面,都是做规则性地将学习率往下下降十倍,这是一个非常主流的做法,但是现在很少用了,现在使用更加平滑的曲线来降低学习率,比如果用一个cos的函数比较平缓地往下降。一开始的选择也很重要,如果选的太大可能会发生爆炸,如果太小又有可能训练不动,所以现在主流的做法是学习率从0开始再慢慢上升,慢慢下降沐:看完之后,有些东西可能还不是很理解,可以去看文章所引用的文章。 第三遍就不读了,毕竟是很多年前的文章了。 自用总结,主要参考: 单位年的个人空间-单位年个人主页-哔哩哔哩视频9年后重读深度学习奠基作之一:AlexNet【论文精读·2】_哔哩哔哩_bilibili如果我是泡橘子的个人空间-如果我是泡橘子个人主页-哔哩哔哩视频 |
CopyRight 2018-2019 实验室设备网 版权所有 |