Bootstrap

论文笔记:ImageNet Classification with Deep Convolutional Neural Networks(AlexNet)

一、基本信息

标题:ImageNet Classification with Deep Convolutional Neural Networks
时间:2012
出版源:Neural Information Processing Systems (NIPS)
论文领域:深度学习,计算机视觉
引用格式:Krizhevsky A, Sutskever I, Hinton G E. Imagenet classification with deep convolutional neural networks[C]//Advances in neural information processing systems. 2012: 1097-1105.
链接:http://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networ

二、研究背景

  • 数据集:出现imageNet这样的大数据集,可以用来训练更复杂的模型 。
  • CNN:而CNNs它们的能力可以通过改变深度和广度来控制,它们还对图像的本质(即统计的平稳性和像素依赖性的局部性)做出了强有力且基本正确的假设。与具有类似大小层的标准前馈神经网络相比,CNNs具有更少的连接和参数,因此更容易训练,而其理论上最好的性能可能只会稍微差一些。
  • GPU: GPU和卷积操作结合,使得训练大型CNN网络成为可能

三、创新点

贡献点:

  1. 对ImageNet的子集进行了迄今为止最大的卷积神经网络训练,并取得了最好效果
  2. 开高度优化GPU实现2D卷积方法,后面提到网络在2块GPU并行
  3. 网络包含很多新的不寻常特征
  4. 防止过拟合
    我们最终的网络包含5个卷积层和3个全连接层,这个深度似乎很重要:我们发现去掉任何卷积层(每个卷积层包含的model s参数不超过1%)都会导致性能下降。

ReLU激活

在这里插入图片描述
图1:使用ReLUs(实线)的四层卷积神经网络在CIFAR-10上达到25%的训练错误率,比使用tanh神经元(虚线)的同等网络快六倍。每个网络的学习率都是独立选择的,以使训练尽可能快。没有任何形式的正规化。这里演示的效果的大小随网络结构的不同而不同,但是使用ReLUs的网络始终比使用饱和神经元的网络学习速度快几倍。

Local Response Normalization 局部响应归一化

b x , y i = a x , y i / ( k + α ∑ j = max ⁡ ( 0 , i − n / 2 ) min ⁡ ( N − 1 , i + n / 2 ) ( a x , y j ) 2 ) β b_{x, y}^{i}=a_{x, y}^{i} /\left(k+\alpha \sum_{j=\max (0, i-n / 2)}^{\min (N-1, i+n / 2)}\left(a_{x, y}^{j}\right)^{2}\right)^{\beta} bx,yi=ax,yi/k+αj=max(0,in/2)min(N1,i+n/2)(ax,yj)2β
此方案有助于泛化,CNN在未归一化的情况下,测试错误率为13%;在归一化的情况下,测试错误率为11%。
参考这篇文章吧 深入理解AlexNet网络,大致意思就是当今kernel的map的(x, y)像素位置在周围邻居相同kernel的map的(x, y)像素。也就是上面式子中的 a ( x , y ) j a_{(x, y)}^{j} a(x,y)j 。然后把这些邻居pixel的值平方再加和。乘以一个系数 α \alpha α 再加上一个常数k, 然后 β \beta β 次冥, 就是分母,分子 就是第次kernel对应的map的(x, y)位置的pixel值。关键是参数 α , β , k \alpha, \beta, k α,β,k 如何确定, 论文中说在验证集中确定, 最终确定的结果为:
k = 2 , n = 5 , α = 1 0 − 4 , β = 0.75 k=2, n=5, \alpha=10^{-4}, \beta=0.75 k=2,n=5,α=104,β=0.75
在这里插入图片描述

Overlapping Pooling 重叠池化

初步理解:假如池化单元为zxz

  • 步长s = z,就是传统的池化
  • 步长s < z,就是重叠池化
    作者提到当s = 2 z = 3时,对比s = z = 2,错误率减少了0.4%(top-1) 和 0.3%(top-5)
    使用重叠池化可以减少过拟合

网络架构

在这里插入图片描述
一共8层,前5层是卷积层,后3层是全连接层:

  • 卷积层除了第3层,其余卷积层直接连接在同GPU上。第3层会连接第2层所有输出。
  • 局部响应规范化(Local Response Normalization)层在第1层和第2层卷积层后。
  • 最大池化层在响应规范化层(第1层和第2层卷积)和第5层卷积后。
  • ReLU非线性激活函数应用在每个卷积和全连接层。

卷积输出计算公式,具体看这里
设图像大小:n*n, 步长:s,卷积核大小:f,padding:p
( n + 2 p − f s + 1 ) ∗ ( n + 2 p − f s + 1 ) \left(\frac{n+2 p-f}{s}+1\right) *\left(\frac{n+2 p-f}{s}+1\right) (sn+2pf+1)(sn+2pf+1)

在这里插入图片描述
具体参数:
输入图片为224x224x3。

  • 第1层卷积:
    卷积
    在这里插入图片描述
    输入:224x224x3
    卷积核大小:11 * 11 *3 步长:4(这个是11x11核的中心视野) 数目:48 * 2 = 96
    输出:55 * 55 * 48 * 2
    (输出为55 * 55:(224 - 11)/4 +1 = 54.25,取了上整55,48个特征map,因为有2个GPU,所以总的特征map数量是48 * 2)
    ReLu激活
    池化层
    核大小:3 * 3 * 1 步长:2
    输出:27 * 27 * 48 * 2
    (输出为27 * 27 :(55 - 3) / 2 + 1 = 27)
    标准化
    【注】图上的结果没有进行池化

  • 第2层卷积:
    在这里插入图片描述
    卷积
    输入:27 * 27 * 48 * 2 扩展2个像素:31 * 31 * 48 * 2
    卷积核大小:5 * 5 * 48 步长:1 数目:128 * 2 = 256(还需要连接局部响应规范化层和池化层)
    输出:27 * 27 * 128 * 2
    (输出为27 * 27:31 - 5 + 1 = 27,128个特征map,因为有2个GPU,所以总的特征map数量是128 * 2)
    ReLu激活
    池化层
    核大小:3 * 3 * 1 步长:2
    输出:13 * 13 * 128 * 2
    (输出为13* 13:(27 - 3) / 2 + 1 = 13)
    标准化

  • 第3层卷积(这层卷积核结合了2个GPU):
    在这里插入图片描述
    卷积
    输入:13 * 13 * 128 * 2 扩展1个像素:15 * 15 * 128 * 2
    卷积核大小:3 * 3 * 256(GPU1:128 + GPU2:128) 步长:1 数目:192 * 2 = 384
    输出:13 * 13 * 192 * 2
    (输出为13 * 13:15 - 3 +1 = 13 192个特征map,因为有2个GPU,所以总的特征map数量是192 * 2)
    ReLu激活

  • 第4层卷积:
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200531194815463.png
    卷积
    输入:13 * 13 * 192 * 2 扩展1个像素:15 * 15 * 192 * 2
    卷积核大小:3 * 3 * 192 步长:1 数目:192 * 2 = 384
    输出:13 * 13 * 192 * 2
    (输出为13 * 13:15 - 3 +1 = 13 192个特征map,因为有2个GPU,所以总的特征map数量是192 * 2)
    ReLu激活

  • 第5层卷积:
    在这里插入图片描述
    卷积
    输入:13 * 13 * 192 * 2 扩展1个像素:15 * 15 * 192 * 2
    卷积核大小:3 * 3 * 192 步长:1 数目:128 * 2 = 256
    输出:13 * 13 * 128 * 2
    (输出为13 * 13:15 - 3 +1 = 13 128个特征map,因为有2个GPU,所以总的特征map数量是128 * 2)
    ReLu激活
    池化层
    核大小:3 * 3 * 1 步长:2
    输出:6 * 6 * 128 * 2
    (输出为6* 6:(13 - 3) / 2 + 1 = 6)

  • 第6层全连接
    在这里插入图片描述
    输入:6 * 6 * 128 * 2
    输出:2048*2个神经元
    Dropout

  • 第7层全连接
    在这里插入图片描述
    输入:20482个神经元
    输出:2048
    2个神经元
    Dropout

  • 第8层全连接
    在这里插入图片描述
    输入:2048*2个神经元
    输出:1000个神经元

防止过拟合

增加数据

就是对图片进行装换,又很简单可以运行时在装换且在cpu上执行,作者认为这个是个free操作。

  1. 图像平移和翻转,具体做法:从256 * 256图片中4个角点和中心点取5个,以及它们的水平翻转 5个,一共10个图进行训练。
  2. 改变RGB颜色,使用PCA分解 [ p 1 , p 2 , p 3 ] [ α 1 λ 1 , α 2 λ 2 , α 3 λ 3 ] T \left[\mathbf{p}_{1}, \mathbf{p}_{2}, \mathbf{p}_{3}\right]\left[\alpha_{1} \lambda_{1}, \alpha_{2} \lambda_{2}, \alpha_{3} \lambda_{3}\right]^{T} [p1,p2,p3][α1λ1,α2λ2,α3λ3]T α \alpha α为高斯分布产生。这种方式模拟自然特性,因此可以做到光照不变性。

Dropout

这部分之前总结过:每周学习新知识1:深度学习中的Dropout

四、实验结果

在这里插入图片描述

五、结论与思考

作者结论

值得注意的是,如果去掉一个卷积层,我们的网络性能就会下降。例如,删除任何中间层都会导致网络的顶级性能损失约2%。所以深度对于我们取得的成果非常重要。
最后,我们希望在视频序列中使用非常大且深的卷积网络,其中时间结构提供了非常有用的信息,而这些信息在静态图像中是不存在的或不太明显的。

总结

这篇论文为后续深度学习打下了基础。

思考

深度指卷积层的深度还是全连接层的深度

参考

深入理解AlexNet网络

;