Alexnet
Alexnet是一种经典的CNN网络架构。他的作者Alex Krizhevsky在论文中提出了许多训练CNN网络的技巧,同时得出结论:CNN模型的深度越深,CNN模型的表现效果越好。
Alexnet Architecture
论文中Alexnet的Architecture图是
这个图应该有个错误,输入图像的大小应该是
。从网上找的另外一个描述更加清晰的表格
作者实现的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函数为: 。
这里放上一张图证明ReLU加速网络收敛
论文发表之前,神经网络主要使用tanh函数作为激活函数,上图的虚线表示tanh在训练中错误率的收敛情况,实线代表ReLU函数。作者说一个4层的卷积网络在CIFAR-10中训练错误率下降到25%,ReLU比tanh快6倍。
Training on Multiple GPUs
作者使用两个GPU训练Alexnet网络,说明使用GPU能够加快训练速度。
Local Response Normalization
作者添加了LRN层之后,实验的结果有所改善。Response Normalization实现了一种侧向抑制形式,其受到真实神经元中发现的类型的启发,在使用不同内核计算的神经元输出之间产生对大激活值的竞争。
定义
是第i个feature map在位置
上的激活值,Local response Normalizated后对应的值为
其中N表示feature map的层数(或者说卷积的过滤器的个数),n就是局部响应标准化的局部范围,在i个feature map前后n个feature map中进行标准化处理。另外的几个参数 是超参数,作者在论文中的取值为 。
Overlapping Pooling
Pooling层的过滤器大小为 ,步长为s。之前的CNN使用的Pooling都是 ,每个池化区域不重叠。作者则让 ,使得池化区域重叠。重叠的池化层改善了实验结果。作者发现重叠的池化层使得模型过拟合稍微困难一些。
Data Augmentation
因为Alexnet有60 million个参数,如果训练集的样本个数不多,网络会出现过拟合。作者使用两种方法避免网络出现过拟合,第一种方法就是数据生成。
为了避免过拟合,最简单的方法就是增加训练集的个数。作者通过数据生成的方法增加训练的图片个数。第一种数据生成的方法是对图像位移和水平反射。对训练集 大小的图片从4个角和中间位置中截取 大小的部分,然后再对每部分进行水平反射。这样,一张原始图片生成10张训练图片。
第二种数据生成的方法是在RGB通道改变图片的强度。
Dropout
作者防止网络出现过拟合的第二种方法是Dropout。Dropout会以0.5的概率设置隐藏单元的输出值为0,因此,每次梯度下降,网络都会学习一个新的架构,这些架构共享权重。Dropout减少了神经元之间的依赖关系,强迫神经元学习鲁棒性更强的特征。作者在Alext的前两个全连接层应用了Dropout,如果没有dropout,作者训练的网络产生了严重的过拟合现象。虽然Dropout可以有效地防止过拟合,但是加倍了网络收敛使用的迭代次数。