AlexNet笔记

来源:互联网 发布:空调换热器设计软件 编辑:程序博客网 时间:2024/03/29 16:06

1. 简介

AlexNet是Hinton小组在ISVRC2012中使用的神经网络模型,并获得了第一名,top5测试错误率是15.3%,第二名是26.2%。AlexNet有60M个参数,650,000个神经元,5个卷积层和3个全连接层(1000类的softmax分类器)。AlexNet模型在两个GTX 580 3GB GPU上训练5、6天左右,如果有更大的数据集和更高效GPU出现,结果还会更好。

贡献
  • ILSVRC2010和ILSVRC2012上的最好结果(state-of-the-art)
  • 高效的二维卷积等操作的GPU实现并公开
  • 提高性能,减少训练时间
  • 防止过拟合技巧。(data augmentation,Dropout)

2. 数据集

ImageNet拥有超过22000个类别的1.5千万的图片。作为Pascal Visual Object Challenge的一部分,ILSVRC始于2010年,使用ImageNet的一个子集,包含1000各类别的120万张训练图片,5万验证图片,15万测试图片。

ILSVRC-2010是唯一的测试集标签公开的版本,所以经常被使用。评估分类结果有两个指标:top-5错误率和top-1错误率。

由于ImageNet的图片并不是具有相同分辨率,而AlexNetx需要同样格式的图像输入,所以先要将图片降采样到256*256的尺寸。对于一个长方形图片,先缩放图片使其短边长度为256像素,然后从图片中裁剪中间的256*256的图片。对训练集图片中心化操作,无其他预处理。

3. 结构

AlexNet包含8层神经网络:5个卷积层和3个全连接层。以下根据重要程度,依次介绍AlexNet的重要特征。

3.1 非线性ReLu

以前标准的激活函数使用tanh或sigmoid函数,但是使用梯度下降训练,这些饱和(saturating)的非线性激活函数会造成梯度消失现象,降低训练速度。使用非饱和的非线性激活函数ReLu可以避免这个问题。使用ReLu可以使训练速度加快几倍。

3.2 多GPU并行训练

GPU内存限制了网络的大小,所以将网络扩展在两个GPU上,并行训练。并行训练地策略是在每一个GPU上分配相同数目的神经元。另一个技巧:GPU只在特定的网络层间通信。网络连接的模式,可以交叉验证(cross-validation)的方式确定。

这个方案不仅减少了训练时间,而且对top-5和top-1错误率分别减少了
1.7%和1.2%。

3.3 局部响应标准化

ReLu有个好的特点,就是它不要求输入标准化以防止饱和。因为只要有一些神经元产生正(positive)的输入,这个神经元就能起到学习的作用。但是,局部标准化是有助于泛化的。公式如下,详解见论文:
这里写图片描述

这种标准化实现了在一种自然神经元中发现的机制——侧抑制(lateral inhibition)。在一些层的ReLu激活函数后使用这种标准化。

使用这种标准化,top5和top-1错误率分别降低了1.4%和1.2%。

3.4 重叠池化

一个池化层可以被看做一个池化层单元格网,每个池化层单元间隔s个像素且概括了z*z的临近输入。如果s=z,就是传统的池化操作,如果s<z,就是重叠池化(overlapping pooling)。在AlexNet中,s=2,z=3。

这个方案分别减少了top-5和top-1错误率的0.4%和0.3%,相对于s=2,z=2的非重叠方案。在训练过程中,我们发现重叠池化可以避免过拟合。

3.5 整体结构

AlexNet包含5个卷积层,3个全连接层,输出1000*1向量,输入到1000类的softmax分类器,得到分类结果。

第2,4,5卷积层的kernel(卷积核)只连接同一个GPU上的前一层的kernel map,第3层kernel则连接第2层所有kernel map(feature map)。全连接层(fully-connected)中的神经元与前一层是全连接的。Response-normalization层在1,2卷积层后。max-pooling层在所有Response-normalization层和第5卷积层后。ReLu应用于每一个卷积层和全连接层。

这里写图片描述
输入是224*224*3的图像,首先用96个11*11*3,步长为4的卷积核对图像卷积操作,得到55*55*96的第一个卷积层,因为分配在两个GPU上,所以每个GPU是55*55*48。
然后经过response-normalization和max-pooling,用256个5*5*48的卷积得到第二个卷积层,得到两个27*27*128的卷积层.
第三卷积层用384个3*3*256的卷积核,得到13*13*192*2的卷积层。
第四卷积层用384个3*3*192的卷积核,得到13*13*192*2的卷积层。
第五卷积层用256个3*3*192的卷积核,得到13*13*128*2的卷积层。
每个全连接层有4096个神经元。

4. 减少过拟合

4.1数据增强

减少过拟合最容易和普遍的方法就是数据增强(data augmentation),即通过对图像进行变换,人为的扩大数据集。我们使用了两种变换方式,两种方式都需要很少的计算,所以不用在硬件上存储图像。GPU训练图像,在CPU上用python代码变换图像。

第一种形式:图像平移(image translation)和水平镜像(horizontal reflection)。此发法让数据集增大了2048倍,但是也使训练样本之间存在内部依赖性(inter-dependent).如果没有这个方法,AlexNet就很有可能过拟合而减小网络结构。

第二种方式:改变训练图像RGB通道的强度(intensity)。在所有ImageNet训练图像的RGB像素值上执行PCA.对每一张训练图像,我们以一定比例添加多个找到的主成分。对于图像每个像素,增加以下量
这里写图片描述
p是主成分,lamda是特征值,alpha是N(0,0.1)高斯分布中采样得到的随机值。此方案名义上得到自然图像的重要特性,也就是说,目标是不随着光照强度和颜色而改变的。此方法降低top-1错误率1%。

4.2 随机失活Dropout

结合多个模型的预测值是减少错误的有效方法,但是对于训练时间用好几天的大型神经网络是太昂贵了。dropout是有效的模型集成方法,一旦神经元失活,输出为0,不参与反向传播。测试时,用0.5的概率随机失活神经元。dropout减少了过拟合,也使收敛迭代次数增加一倍。

5. 学习细节

batch size:128, SGD+momentum(0.9), weight decay.

weight decay不仅是正则化方法,还减低了模型训练误差。权重更新方法:
这里写图片描述

初始化权重:高斯分布N(0,0.01)
初始化bias:2,4,5卷积层和全连接层用常量1。其它层设为0。

这种初始化方法加速了前期阶段的学习,通过为ReLu提供正值。

学习率learning rate在每一层都初始化为0.01,在训练时,当验证误差不改善时就让学习率除以10。在结束前一共减少了3次。

训练AlexNet用了90个周期,1.2 million图像,5到6天,两个NVIDIA GTX 580 3GB GPU。

6. 结果

ILSVRC2010比赛冠军方法是Sparse coding,这之后(AlexNet前)报道最好方法是SIFT+FVs。CNN方法横空出世,远超传统方法。
这里写图片描述

ILSVRC-2012,AlexNet参加比赛,获得冠军。远超第二名SIFT+FVs。
这里写图片描述

6.1 定量评价

这里写图片描述

图3显示了卷积层学到的有频率和方向选择性的卷积核,和颜色斑点(color blob)。GPU 1 (color-agnostic)和GPU 2(color-specific)学习到的卷积核并不一样。不一样的原因是3.5中的受限连接(restricted connectivity)。

这里写图片描述

图4显示,即使目标偏离中心,也可以被识别出来,比如mite。top-5预测结果是reasonable的,比如leopard的预测的可能结果是其他类型的猫科动物。但是也存在对intended focus的模糊问题,就是网络不知道我们到底想识别图片中的什么物体,比如cherry,分类结果是dalmatian,网络显然关注的是dog。

网络最后4096-d隐藏层产生的是feature activations是另一个重要指标。如果两张图像产生欧氏距离相近的feature activation vectors,那么网络的higher levels就认为他们是相似的。使用此度量,可以实现较好的图像检索。

计算4096-d的向量效率太低,可以使用auto-encoder压缩向量成二进制码。这比直接在原始像素上使用auto-encoder效果更好。因为在raw pixels上使用quto-encoder,没用到标签数据,只是检索有相似边缘模式(similar patterns of edges)的图像,却不管他们语义(semantically)上是否相似。

7. 讨论

深度(depth)很重要。去掉任一层,性能都会降低。

为了简化实验,没有使用非监督预训练。但是当有足够计算能力扩大网络结构,而没增加相应数据时,非监督预训练可能会有所帮助。

虽然通过增大网络结构和增加训练时长可以改善网络,但是我们与达到人类视觉系统的时空推理能力(infero-temporal pathway of the human visual system)还相距甚远。所以,最终希望能将CNN用到视频序列分析中,视频相对静态图像有很多有用的时间结构信息。

参考文献
1.ImageNet Classification with Deep Convolutional Neural Networks

0 0