AlexNet是划时代的,可以说掀起了机器学习的一场革命,标志着神经网络的凤凰涅槃、浴火重生,标志着深度学习大一统时代的来临,标志着通用人工智能又一次触手可及,也标志着一个超大级的人工智能泡沫的起点。
今天,就让我们以崇敬的心态,重温划时代之作AlexNet,具体论文是《ImageNet Classification with Deep Convolutional Neural Networks》。
模型结构
AlexNet的模型结构如下图。
是不是不太直观?改成如下图会容易懂一些。
可以看出,AlexNet模型主要有以下几个主要特点:
1)更深(8层,LeNet5层), 参数更多(比LeNet多1000倍)
AlexNet网络更深,共有8层(5层卷积层+3层全连接层),提出卷积神经网络的LeNet总共5层(2层卷积层+3层全连接层)。
AlexNet另一个革命性的特点是,参数特别多,多达6000万左右的参数,是LeNet的1000多倍。
2)Conv(特征层)+ FC(输出层)的组合配置
经过多层的Conv层提取特征后,利用FC层整合特征再输出,是早期卷积神经网络的经典配置。LeNet开创了这种配置,AlexNet保持了这种配置。
3)FC层占据绝对多数的模型参数
AlexNet 96%的参数都集中在3层全连接层中,卷积层只占据4%。(因全连接层参数太多,现在一般尽量避免全连接层,改用全卷积+GlobalAvgPooling)
4)卷积层与Pooling层交替
从而每隔一个stage,feature map的分辨率就减半。这种pattern是LeNet提出的,AlexNet及现在所有的网络模型都沿用这个pattern。
5)当分辨率(HW)减少时,要增加通道数,保证有效特征数量。
这种pattern也是LeNet提出的,AlexNet及现在所有的网络模型都沿用这个pattern。
6)多卷积核尺度
卷积核尺寸多样,大致层数越深,卷积核尺寸越小,11x11,5x5,3x3。(现在一般使用多层小卷积核代替大卷积核,这样参数变少深度变深,效果更好)
Training tricks
AlexNet的模型参数非常巨大,必须使用一些训练技巧才能收敛,下图给出了,AlexNet在训练过程中使用到的主要Tricks。
从输入到输出,依次使用的技巧是:
- 多GPU训练和分组卷积
由于AlexNet的参数多,数据规模大,为了有效的训练,作者开创了使用GPU训练的先河。这个是革命性的。
2012年还没有成熟的深度学习框架,作者为了训练更大的模型,采用了分组卷积(group=2),相当于直接把模型等分为两个独立模型,在两个GPU上单独训练,在第三个卷积层和最后的三个全连接层做特征交流。
2)data augmentation
1. 使用了random crop和horizontal reflection
由于ImageNet中图片分辨率不固定,作者先将每张图片的最短边resize到256,并保持图片长宽比例,再裁取图片正中部分的256x256,再从这256x256中随机裁取224x224的patch,这也是为什么模型输入是224x224分辨率的来源,总共有32x32种patch。再加上horizontal reflection,总共会有32x32x2=2048种patch。
2. 图片像素值的PCA
一张图片有3个通道,RGB。3个通道间的3x3协方差矩阵,求出其特征值λi和特征向量Pi,λi再乘以一个服从高斯分布N(0;0.1)的随机数αi的到λi * αi(i=1,2,3)。再利用下式,就可以求出RGB每个通道不随图片灰度值变化的重要特性object identity。
每个通道加上上述相应的特性值。
3)Local Response Normalization
每一个卷积层的输出形状为[B, H, W, C],以第一个卷积层为例,batch_size取32,则输出为[32, 55, 55, 96],取定b, h, w, c,假如b=5, h=10, w=10, c=30,Local Response Normalization的意思是将b,h,w相同,c附近n个结果做归一化,即[5, 10, 10, 30-n/2~30+n/2]的元素归一化作为[5, 10, 10, 30]的结果。具体的计算公式如下:
下图的示意比较直观:
4)ReLU激活函数
激活函数ReLU的发明是伟大的,这是神经网络能够再次崛起的重要因素之一。ReLU有效解决了数学上看似完美的非线性激活函数sigmoid和tanh的易饱和的问题,大大加快了收敛速度,大概提高6倍。如下图,相同的网络,只是激活函数不同(实线为ReLU,虚线为tanh),在CIFAR10上,ReLU的收敛速度显著加快6-7倍。
5)Overlapping Pooling
当下采样的kernel size大于stride,下采样之间就是有重叠的。AlexNet的所有Maxpooling kernel size=3x3,stride=2,均为overlapping pooling。
6)dropout
dropout在BatchNormalization之前是常用且非常有效的正则化技巧,但BatchNormalization出世之后,基本就销声匿迹了。AlexNet第一第二个全连接层使用了dropout rate=0.5的dropout。
7)weight decay
使用了0.0005的weight decay。
上述大部分trick都可以看做是为了防止过拟合,包括
data augmentation
Local Response Normalization
dropout
weight decay
结果
下图是上文中的标准模型在2010年ImageNet测试集上的Top-1和Top-5准确度 ,提升相当明显,说明了深度学习性能的优越性。
下图是单模型、多模型集成,有无预训练等的结果对比,可以看出一下几点:
效果提升超10个点,质的提升,说明了深度学习性能的优越性
预训练是有效的
多模型继承是有效的
下图第一列是test set中的5张照片,右边是训练集中,模型最后一个隐藏层FC4096,与第一列中的照片欧式距离最近的6张。可以看出,训练集中的照片与测试集的照片姿态变化挺大的,说明模型能学习到物体有效特征。
下图是第一层卷积神经网络的96个11x11x3卷积核的可视化,上面48个是在GPU1上学习的,下面48个是在GPU2上学习的,GPU1上学习的都是与颜色无关的特征,GOU2上学习的大部分都是与颜色相关的特征。
革命性的启示
证明了大型神经网络,配合各种技巧,在大规模数据上的收敛性
证明了大型神经网络,在大规模数据上,相较于传统机器学习算法的巨大性能优势
证明了GPU训练的高效性
结论
AlexNet是伟大的,代表着质的飞跃,代表着新时代的来临。