abstract
- 介绍alexnet的组成:
有6000万个参数650000个神经元。
有五个卷积层,其中有些后面跟着池化层
三个最终有1000-way的softmax的全连接层 - 介绍应用的技术:
为了加快训练速度 使用了non-saturating neurons(非饱和神经元),以及有效利用gpu - 减少过拟合:
dropout
introduce
对象识别任务的巨大复杂性意味着这个问题不能被指定,即使通过像ImageNet这样的大数据集,,因此我们的模型应该也有许多先验知识来补偿我们所没有的数据。
dataset
介绍了ImageNet,ILSVRC-2010数据集,alexnet对图像进行下采样到256*256,之后仅对图像上的像素减去平均值。然后进行训练
The Architecture
- ReLU:
在进行梯度下降运算时,ReLu要比tanh宽很多,使用ReLU的神经元也要比tanh的在训练时快好几倍,配图展示了在CIFAR-10上,relu要比tanh从0.75错误率下降到0.25的错误率快上好几倍
也有人尝试别的激活函数,例如|tanh|在Caltech101上就表现的非常好,然而他们的目的是配合归一化增加模型的防过拟合能力,而不同于我们使用ReLU的加速能力。
Training on Multiple GPUs:
一张cpu上放不下整个网络时,那就用两个。在每个gpu上放一半神经元,还有一个额外的技巧:只在某些特定的层上进行GPU通信,例如,第3层的神经元会将第2层的所有神经元映射作为输入。然而,第4层的核只将位于相同GPU上的第3层的核映射作为输入。连接模式的选择是一个交叉验证的问题,可以使得计算更准确。Local Response Normalization(局部响应归一化):
局部响应归一化有助于泛化,在特定的ReLU层之后使用这种归一化,有助于泛化,强无敌(如今更常使用Batchnorm)
Overlapping Pooling(重叠池化):
在训练中发现,重叠池化更难过拟合
Overall Architecture:
AlexNet网络包含8个带权重的层,前五层是卷积层,后三层是全连接层。最后的全连接层的输出是1000维softmax的输入,对应着1000个类别。
第2,4,5卷积层的核只与位于同一GPU上的前一层的核映射相连接。第3卷积层的核与第2层的所有核映射相连。全连接层的神经元与前一层的所有神经元相连。第1,2卷积层之后是响应归一化层。最大池化层在响应归一化层和第5卷积层之后。ReLU非线性应用在每个卷积层和全连接层的输出上
第1卷积层使用96个核对224 × 224 × 3的输入图像进行滤波,核大小为11 × 11 × 3,步长是4个像素(核映射中相邻神经元感受野中心之间的距离)。第2卷积层使用用第1卷积层的输出(响应归一化和池化)作为输入,并使用256个核进行滤波,核大小为5 × 5 × 48。第3,4,5卷积层互相连接,中间没有接入池化层或归一化层。第3卷积层有384个核,核大小为3 × 3 × 256,与第2卷积层的输出(归一化的,池化的)相连。第4卷积层有384个核,核大小为3 × 3 × 192,第5卷积层有256个核,核大小为3 × 3 × 192。每个全连接层有4096个神经元。
Reducing Overfitting:
alexnet有6000万个参数,有这么多参数如果不考虑过拟合是相当不明智的,alexnet主要有以下两种方式避免过拟合。
Data Augmentation
图像数据上最简单常用的用来减少过拟合的方法是使用标签保留变换来人工增大数据集,我们使用了两种在cpu上通过小型的计算完成的图像变换,当gpu在进行训练时cpu就可以进行这种变换,因此并不会对整体带来负担。
第一种是在256256上随机取224224的部分和他们的水平翻转,虽然这些增加的部分有比较高的相关性,但是没有这些的话alexnet就会有很高的过拟合,也会逼迫我们使用更小的网络,在测试的时候,我们在四角和中心取五个224*224的部分和他们的水平翻转也就是一共10个部分,然后计算他们的softmax平均值。
第二种方式是改变训练图集中的rgb通道的强度,我们在Imagenet的训练集上做pca,对每张图片我们加上主成分的倍数,即大小成正比的对应特征值乘以一个随机变量,随机变量通过均值为0,标准差为0.1的高斯分布得到。因此对于每幅RGB图像像素Ixy=
,我们加上
pi,λi分别是RGB像素值3 × 3协方差矩阵的第i个特征向量和特征值,αi是前面提到的随机变量。对于某个训练图像的所有像素,每个αi只获取一次,直到图像进行下一次训练时才重新获取。这个方案近似抓住了自然图像的一个重要特性,即降低了光照和颜色和灯光对结果的影响。这个方案减少了top 1错误率1%以上。
dropout
结合多个不同的训练模型是降低错误率的很好的办法,但是这对于一个需要训练很久的大型网络例如alexnet来说成本太大了,dropout就是一种非常巧妙的办法。它会以0.5的概率对每个隐层神经元的输出设为0。那些“失活的”的神经元不再进行前向传播并且不参与反向传播。因此每次输入时,神经网络会采样一个不同的架构,但所有架构共享权重。这个技术减少了复杂的神经元互适应,因为一个神经元不能依赖特定的其它神经元的存在。因此,神经元被强迫学习更鲁棒的特征,它在与许多不同的其它神经元的随机子集结合时是有用的。在测试时,我们使用所有的神经元但它们的输出乘以0.5。
dropout在前两个全连接层中使用,非常有效避免了过拟合
details of learning
使用随机梯度下降,batch大小128,momentum0.9 权重衰减0.0005 少量的权重衰减对于模型的学习是重要的。换句话说,权重衰减不仅仅是一个正则项:它减少了模型的训练误差。权重w的更新规则是
我们使用均值为0,标准差为0.01的高斯分布对每一层的权重进行初始化。我们在第2,4,5卷积层和全连接隐层将神经元偏置初始化为常量1。这个初始化通过为ReLU提供正输入加速了学习的早期阶段。我们在剩下的层将神经元偏置初始化为0。
我们对所有的层使用相等的学习率,这个是在整个训练过程中我们手动调整得到的。当验证误差在当前的学习率下停止提供时,我们遵循启发式的方法将学习率除以10。学习率初始化为0.01,在训练停止之前降低三次。我们在120万图像的训练数据集上训练神经网络大约90个循环,在两个NVIDIA GTX 580 3GB GPU上花费了五到六天。
Result
结果,反正强无敌
discussion
我们发现,如果移除任何一个隐藏层的卷积层的话,最终大概会有2%的损失,所以对于alexnet来说深度还是很有必要的,