参考链接:
李沐 AlexNet【论文精读】
同济子豪兄 【精读AI论文】AlexNet深度学习图像分类算法
还可以多去看看其他相关博客,有助于读懂和细读~
1 Introduction
目前存在的数据集如NORB,Caltech-101/256和CIFAR-10/10等都是样本量为几万的小数据集,且大部分都是小尺寸图像,通过图像增强可以实现简单的识别任务,比如说MNIST手写数字识别任务能达到人类识别的正确率。但现实图像背景多变,想要进行识别任务需要更大的训练集。此时小图像数据集的不足就很明显了。新的大型数据集如LabelMe包含几十万张全分割图像,ImageNet包含150万22000种类别的已标注的高分辨率图像。
但就算是像ImageNet这种大数据集,我们也不能直接将数据喂进模型中,就是说我们的模型需要许多特定的先验知识来补偿数据集中潜在空白的部分。而有着局部连接、权重共享、下采样等特性的CNNs符合对图像特性的处理,相较于同样大小的标准前馈神经网络,CNNs因为连接数和参数量更少故更易于训练,虽然CNNs的理论最优性能不如标准前馈神经网络。
论文思路:我们在ImageNet的子集ILSVRC-2010/2012上训练了迄今为止最大的卷积神经网络之一并达到目前最优的效果。我们为二维卷积和卷积神经网络训练中固有的所有其他操作编写了一个高度优化的GPU实现并将此方法开源。我们的网络包含许多新的不常见的特征,这些特征提升了网络性能并减少其训练时间。因为我们的模型有着较大参数量而容易过拟合,故我们使用了一些防过拟合的有效技术。我们的模型包含5个卷积层和3个全连接层,我们发现这个深度很重要,移除任意一个卷积层(尽管每一个卷积层包含的参数量少于总量的1%)都会让最终性能大打折扣。
受目前GPU内存和可忍受训练时间的限制,我们的网络在两个GTX 580 3GB的GPU上用了五到六天的时间完成了训练。但更快的GPU和更长的训练时间可以进一步提升模型最终性能。
2 The Dataset
使用的Pascal VOC竞赛中的ILSVRC(the ImageNet Large-Scale Visual Recognition Challenge)比赛的数据集,也是ImageNet数据集的子集,有1000个类别,每个类别有1000张图像。总约120万训练集,5万张验证集和15万张测试集。
其中ILSVRC中的几个指标:
- top-1:概率最高的预测类别为正确标签
- top-5:五个预测类别中包含正确标签
- top-5 error rate:测试图像中正确标签不在模型认为最可能的5个标签中的比例。
因为ImageNet中的图像尺寸大小不一,故我们将所有图像下采样为256×
256大小的图像。即给定一个矩形的图像,我们先缩放图像,使其短边为256长,之后裁剪出其中心大小为256×256的图像。此外,我们计算出训练集中每张图像的像素均值并让该图像中所有像素减去该均值(中心化操作)。所以说,我们的用于输入的训练集为中心化了的原始的RGB图像(除了缩放和裁剪之外没有做任何类似SIFT等的特征抽取工作)。
3 The Architecture
先介绍了结构细节,后面给出整个结构
3.1 ReLU Nonlinearity
如上图所示,4层CNN在
C
I
F
A
R
−
10
CIFAR-10
CIFAR−10上训练,收敛至训练误差为0.25时,ReLU比tanh收敛快6倍。
使用非线性激活函数为模型引入非线性:考虑到梯度下降,饱和的非线性激活函数如 t a n h , s i g m o i d tanh,sigmoid tanh,sigmoid函数要比非饱和非线性激活函数 R e L U ReLU ReLU慢得多(现在看来,其实是因为ReLU的计算快导致使用该函数的网络的训练速度快)。网络使用 R e L U ReLU ReLU函数来加速训练。即使对不同的网络结构,使用ReLU的效果不同,但是其加速效果是普遍的。对于更大的神经网络,ReLU函数的加速效果更大,快速训练对于在大型数据集上的训练的大型模型的性能有很大的影响。
tan h ( x ) = e x − e − x e x + e − x , tan h ( x ) ϵ ( − 1 , 1 ) ,饱和 sigmoid ( x ) = 1 1 + e − x , sigmoid ( x ) ϵ ( 0 , 1 ) ,饱和 Re L U ( x ) = max ( 0 , x ) , tan h ( x ) ϵ ( 0 , x ) ,非饱和,输入直接和 0 作比较就能得到输出 \tan\text{h}\left( x \right) =\frac{e^x-e^{-x}}{e^x+e^{-x}},\ \ \tan\text{h}\left( x \right) \epsilon \left( -1,1 \right) ,饱和 \\ \text{sigmoid}\left( \text{x} \right) =\frac{1}{1+e^{-x}},\ \ \text{sigmoid}\left( x \right) \epsilon \left( 0,1 \right) ,饱和 \\ \text{Re}LU\left( x \right) =\max \left( 0,x \right) ,\ \tan\text{h}\left( x \right) \epsilon \left( 0,x \right) ,非饱和,输入直接和0作比较就能得到输出 tanh(x)=ex+e−xex−e−x, tanh(x)ϵ(−1,1),饱和sigmoid(x)=1+e−x1, sigmoid(x)ϵ(0,1),饱和ReLU(x)=max(0,x), tanh(x)ϵ(0,x),非饱和,输入直接和0作比较就能得到输出
3.2 Training on Multiple GPUs(GPU并行,切模型,属于工程细节)
当年单个GTX 580的GPU只有3G的显存,而120万个训练示例足以训练一个GPU无法容纳的大网络,故作者将网络分置于两个GPU中,这两个GPU可以直接互相读取对方显存,不用经过主机内存。作者使用的并行策略为每个GPU分整个网络一半的神经元,并且两个GPU只在特定层进行通信。Layer3和Layer2全部连接,Layer4只与Layer3各自一半的输出连接。
全参数双GPU的训练时间比半参数单GPU的更短,该并行策略将作者模型的top-1和top-5错误率分别降低了1.7%和1.2%。注意的是,此处的半参数单GPU模型中最后一个卷积层和全连接层参数数量和全参数双GPU模型相同,因此半参数并非真的只有整个网络的一半参数。
3.3 Local Response Normalization(局部对比度归一化)
传统的饱和激活函数需要对输入进行normalization来防止输入信号陷入饱和,但是ReLU函数不需要,只要输入为正,ReLU函数就能够进行学习。
但作者发现局部归一化能够帮助泛化,所以还是在特定层(第1、2卷积层)使用了响应归一化。(但是现在有了更好的Normalization技术,可以不用细看)
3.4 Overlapping Pooling
Pooling就是用(之前卷积时候用的)相同的卷积核来总结相邻神经元的输出(其实就是计算)
一般来说两个Pooling是不会重叠的,作者使用的Overlapping Pooling改动不大,但是效果挺好
3.5 Overall Architecture
该图片(包括下文含有标注的图片)来自b站 同济子豪兄 ,注意输入图像应该为227×227×3,如果是224×224×3,最终卷积后为非整数。
模型上下两部分分别由一个GPU进行训练,两个GPU只在第二卷积层和第三卷积层之间、第五卷积层和第一个全连接层之间进行信息传递。
5个卷积层:
- 空间信息压缩,即图像大小变化:224,224 - 55,55 - 27,27 - 13,13 - 13,13 - 13,13
- 语义信息增加,通道数变化:3-48-128-192-192-128 (每一个通道数用于识别不同的模式,如猫眼,猫腿,边,轮廓等等)
也就是说,2、4、5层只与自己的前一个核有关系,即只与自己当前所在的GPU前一层训练的输入有关系。第三层卷积层与前一层的两个GPU训练出来的都有关系,在通道维度上做了一个融合。全连接层就与前一层中所有神经元相连。
3个全连接层:
将前5个卷积层最后的输出全部合并作为输入,每个全连接层都为2048,2048,最后两个GPU的全连接结果拼接为一个4096长的向量再进入最后的softmax分类层。也就是说一张224,224,3的图片最后会被表示为长度为4096的向量,最后用softmax线性分类器做分类。(若两个4096向量很接近,说明这两张图像表示的很可能是同一个物体)
4 Reducing Overfitting(如何避免过拟合)
4.1 Data Augmentation
将图片人工方法,随机抠出大小为224,224的patch
使用PCA来变换图像通道,也就是说图像的颜色会有变化
4.2 Dropout
概率设为50%,每次都能得到新的模型,作者的意思为通过使用Dropout使得用这一个模型作为每次变换得出的新模型的融合(后续证实并非如此,现在看来Dropout更类似于正则化)
作者将Dropout放在了前两个全连接前面,并通过实验证实没有dropout模型过拟合得很严重,有dropout会比没有dropout的训练速度慢两倍
(作者设计的4096大小的全连接太大,所以需要dropout。这种大全连接层是AlexNet结构设计的一大缺陷,导致模型太大。现在的CNN更看重模型结构设计,且一般不会用这么大的全连接,所以不常使用dropout。现在的dropout主要用于RNN,Attention中的全连接层)
5 Details of learning
使用SGD来训练模型,SGD中的噪音其实有利于提升模型泛化。使用momentum来优化梯度下降,如下式:
此处$\epsilon $为学习率
主要就是炼丹细节了
蓝色为AlexNet的调参方法,红色为现在常用的调参方法
6 Results
与其他模型的比较
作者只报告了他在5层和7层网络上的结果
6.1 Qualitative Evaluations
发现的现象:作者将图像通道拆分到两个GPU来训练模型,发现GPU1上的学习结果大部分都是颜色无关的,GPU2上的学习结果大部分都是颜色无关的。
左图为图像识别,右图为图像分类