Alexnet

Alexnet是一种经典的CNN网络架构。他的作者Alex Krizhevsky在论文中提出了许多训练CNN网络的技巧,同时得出结论:CNN模型的深度越深,CNN模型的表现效果越好。

Alexnet Architecture

论文中Alexnet的Architecture图是
Alexnet 笔记
这个图应该有个错误,输入图像的大小应该是227×227。从网上找的另外一个描述更加清晰的表格
Alexnet 笔记
作者实现的Alexnet使用2个GPU同时训练,所以上面的架构图分为两部分,每个GPU训练1部分网络。第2,4,5层网络只与一个GPU的前一层连接,其他层则与两个GPU的前一层连接。作者提出了Local Response Normalization(LRN)层,在第1,2层卷积层池化层后面。如果使用单个GPU训练,把两部分合起来,可以把LRN层去掉,因为在VGG-16的论文中证明LRN没有太大作用。

训练技巧

ReLU Activation

作者在论文中提出了ReLU**函数,这是这篇论文的主要贡献之一,ReLU**函数有助于加快网络快速收敛,从此之后许多CNN都使用ReLU**函数。ReLU函数为:f(x)=max(0,x)

这里放上一张图证明ReLU加速网络收敛
Alexnet 笔记
论文发表之前,神经网络主要使用tanh函数作为**函数,上图的虚线表示tanh在训练中错误率的收敛情况,实线代表ReLU函数。作者说一个4层的卷积网络在CIFAR-10中训练错误率下降到25%,ReLU比tanh快6倍。

Training on Multiple GPUs

作者使用两个GPU训练Alexnet网络,说明使用GPU能够加快训练速度。

Local Response Normalization

作者添加了LRN层之后,实验的结果有所改善。Response Normalization实现了一种侧向抑制形式,其受到真实神经元中发现的类型的启发,在使用不同内核计算的神经元输出之间产生对大**值的竞争。

定义ax,yi是第i个feature map在位置(x,y)上的**值,Local response Normalizated后对应的值为bx,yi

bx,yi=ax,yi/(k+αj=max(0,in/2)min(N1,i+n/2)(ax,yj)2)β

其中N表示feature map的层数(或者说卷积的过滤器的个数),n就是局部响应标准化的局部范围,在i个feature map前后n个feature map中进行标准化处理。另外的几个参数k,α,β是超参数,作者在论文中的取值为k=2,n=5,α=104,β=0.75

Overlapping Pooling

Pooling层的过滤器大小为z×z,步长为s。之前的CNN使用的Pooling都是s=z,每个池化区域不重叠。作者则让s=2,z=3,使得池化区域重叠。重叠的池化层改善了实验结果。作者发现重叠的池化层使得模型过拟合稍微困难一些。

Data Augmentation

因为Alexnet有60 million个参数,如果训练集的样本个数不多,网络会出现过拟合。作者使用两种方法避免网络出现过拟合,第一种方法就是数据生成。

为了避免过拟合,最简单的方法就是增加训练集的个数。作者通过数据生成的方法增加训练的图片个数。第一种数据生成的方法是对图像位移和水平反射。对训练集256×256大小的图片从4个角和中间位置中截取224×224大小的部分,然后再对每部分进行水平反射。这样,一张原始图片生成10张训练图片。

第二种数据生成的方法是在RGB通道改变图片的强度。

Dropout

作者防止网络出现过拟合的第二种方法是Dropout。Dropout会以0.5的概率设置隐藏单元的输出值为0,因此,每次梯度下降,网络都会学习一个新的架构,这些架构共享权重。Dropout减少了神经元之间的依赖关系,强迫神经元学习鲁棒性更强的特征。作者在Alext的前两个全连接层应用了Dropout,如果没有dropout,作者训练的网络产生了严重的过拟合现象。虽然Dropout可以有效地防止过拟合,但是加倍了网络收敛使用的迭代次数。

相关文章: