论文下载
这篇论文的背景作者在参加2010年的ILSVRC比赛,取得了冠军
摘要主要介绍了其神经网络的结构——5个卷积层(每个卷积层( c o n v o l u t i o n a l l a y e r s convolutional\ layers convolutional layers)后面都跟有池化层( m a x − p o o l i n g l a y e r s max-pooling\ layers max−pooling layers))和三个全连接层,最后是一个1000维的softmax。然后作者还提到一个比较有意思的想法:“为了避免全连接层的过拟合,我们采用一种名为 d r o p o u t dropout dropout的正则化方法”
引言和数据集的部分都不重要,这里就略过了
第三部分开始简略介绍了AlexNet的架构,其实就和摘要说的是一样,然后作者说他会把他网络中新奇的点接下来按照重要程度(重->轻)依次说明
首先作者认为他网络最重要的部分是激励函数的选取。传统的激励函数是 t a n h ( x ) tanh(x) tanh(x),他认为 t a n h ( x ) tanh(x) tanh(x)模型收敛太慢,所以改用收敛更快的** R e l u Relu Relu函数**,右边的图中虚线是 t a n h ( x ) tanh(x) tanh(x)函数,实线是 R e l u Relu Relu函数。使用 R e l u Relu Relu的四层神经网络比 t a n h tanh tanh在达到25%的误差时快6倍
接着作者认为他们多CPU并行计算很重要,这一块主要是硬件,我个人感觉不是很重要,所以略过
局部响应归一化。“Relu不需要将输入层的数据进行归一化防止其饱和”(这里我暂时不是很懂,先放一放)
重叠池化。传统池化的窗口大小 z ∗ z z*z z∗z中的 z z z等于池化的步长 s s s。作者设置 z < s zz<s,这样每次滑动窗口的时候,总有一部分是重叠的(这次池化窗口的内容包含部分上次池化窗口的内容)。与重叠相比,两者的输出维度是相同的,但是采用重叠池化更难过拟合。关于重叠池化,当时作者提出来可能还算比较新颖,但其实目前(到2019年)大部分CNN都用的这种方法
整体架构。文章中GPU部分我就直接略过了,直接看这个图很好理解。
第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个神经元
最后一层输出是一个softmax,用于产生1000类标签的概率
数据增强。原本一张图是256 × 256的,但是作者把一张图当作十张图来用。在测试时,网络会提取5个224 × 224的图像块(四个角上的图像块和中心的图像块)和它们的水平翻转(因此总共10个图像块)进行预测,然后对网络在10个图像块上的softmax层进行平均。
第二种数据增强的方法包括改变训练图像的RGB通道的强度。具体地说就是,对整个ImageNet训练集上对RGB像素值集合执行PCA(降维),之后对于每个训练图像,添加多个找到的主成分,其大小与相应的特征值成正比,乘以一个随机变量,这个随机变量服从高斯分布,平均值为零,标准差为0.1。因此对于每幅RGB图像像素 I x y = [ I x y R , I x y G , I x y B ] T I_xy = [I^R_{xy} , I^G_{xy} , I^B_{xy} ]^T Ixy=[IxyR,IxyG,IxyB]T,加上下面的数量:
[ p 1 , p 2 , p 3 ] [ α 1 λ 1 , α 2 λ 2 , α 3 λ 3 ] T [p_1, p_2, p_3][\alpha_1\lambda_1, \alpha_2\lambda_2, \alpha_3\lambda_3]^T [p1,p2,p3][α1λ1,α2λ2,α3λ3]T
p i p_i pi、 λ i \lambda_i λi分别是RGB像素值3 × 3协方差矩阵的第 i i i个特征向量和特征值, α i α_i αi是前面提到的随机变量。对于某个训练图像的所有像素,每个 α i α_i αi只获取一次,直到图像进行下一次训练时才重新获取。这个方案近似抓住了自然图像的一个重要特性,即光照的颜色和强度发生变化时,目标身份是不变的
失活。“以0.5的概率对每个隐层神经元的输出设为0。那些“失活的”的神经元不再进行前向传播并且不参与反向传播。因此每次输入时,神经网络会采样一个不同的架构,但所有架构共享权重。这个技术减少了复杂的神经元互适应,因为一个神经元不能依赖特定的其它神经元的存在。因此,神经元被强迫学习更鲁棒的特征,它在与许多不同的其它神经元的随机子集结合时是有用的。在测试时,我们使用所有的神经元,但将它们的输出乘以0.5,对指数级的许多失活网络的预测分布进行几何平均,这是一种合理的近似。”
学习细节。作者使用的梯度下降模型是SGD,batch size为128,动量(momentum)为0.9,权重衰减为0.0005,权重 w w w的更新规则是
v i + 1 : = 0.9 ⋅ v i − 0.0005 ⋅ ε ⋅ w i − ε ⋅ ⟨ ∂ L ∂ w ∣ w i ⟩ D i w i + 1 : = w i + v i + 1 v_{i+1} := 0.9 · v_i - 0.0005 · \varepsilon · w_i - \varepsilon · \langle \frac{\partial L} {\partial w} |_{w_i}\rangle _{D_i} \\ w_{i+1} := w_i + v_{i + 1} vi+1:=0.9⋅vi−0.0005⋅ε⋅wi−ε⋅⟨∂w∂L∣wi⟩Diwi+1:=wi+vi+1
i i i是迭代索引, v v v是动量变量, ε ε ε是学习率(learning rate), ⟨ ∂ L ∂ w ∣ w i ⟩ D i \langle \frac{\partial L} {\partial w} |_{w_i}\rangle _{D_i} ⟨∂w∂L∣wi⟩Di是目标函数对 w w w,在 w i w_i wi上的第 i i i批微分 D i D_i Di的平均
“我们使用均值为0,标准差为0.01的高斯分布对每一层的权重进行初始化。我们在第2,4,5卷积层和全连接层将神经元偏置(biases)初始化为常量1。这个初始化通过为ReLU提供正输入加速了早期的学习阶段。我们在剩下的层将神经元偏置初始化为0”
以上就是这篇论文的重点部分