AlexNet 论文笔记

ImageNet Classification with Deep Convolutional Neural Networks[1]

这篇文章主要是针对阅读AlexNet论文后的论文笔记,方便自己日后复习。在文中很多是作者较先尝试并且取得了很好效果的技术,而现在已经普遍使用了,如ReLUoverlapping poolingdropout等等,对于这些技术,在这篇中也不做过多赘述。

网络结构

AlexNet网络结构
模型的主要结构如上图所示,经过考证,作者在文章中应该是写错了,输入的图片大小应为 227×227×3 227 × 227 × 3

Multi GPU training

首先要说明一下,上面这个网络长得奇怪的原因是因为作者使用了两个GPU进行训练,由于在每一层里参数过多,不能把每一层的全部参数都放在同一个GPU上,所以才分出两部分,每一部分的参数放在一个GPU上。同时,从上图中可以看到,在每个GPU上的结果,并不是在所有阶段都会传输给下一层的两个GPU上的。只有Conv Stage 2和Conv Stage 5以及全连接层之后的结果会传输给两个GPU。

Local Response Normalization

虽然ReLU不太需要做输入的normalization来方式防止梯度饱和,但是作者提出了一种Local Response Normalization的方式,仍可以对结果有一定的提升。
假设 aix,y a x , y i 表示使用第 i i 个kernel在(x,y)上计算的结果,并且已经使用了ReLU激活,则normalize之后的结果为

bix,y=aix,y/k+αj=max(0,in/2)min(N1,i+n/2)(ajx,y)2)β b x , y i = a x , y i / ( k + α ∑ j = m a x ( 0 , i − n / 2 ) m i n ( N − 1 , i + n / 2 ) ( a x , y j ) 2 ) ) β

n n 表示与i相邻的 n n 个kernel,N表示kernel的总数。在公式中 k,n,α,β k , n , α , β 都是超参数,通过在验证集上进行测试之后选定。最终设定 k=2,n=5,α=104,β=0.75 k = 2 , n = 5 , α = 10 − 4 , β = 0.75

网络结构

网络一共由5层conv和三层fully connection组成。输入的图片大小为 227×227×3 227 × 227 × 3

第一层卷积

输入: 227×227×3 227 × 227 × 3
卷积: 96 96 11×11×3stride=4 11 × 11 × 3 , s t r i d e = 4 的卷积核(48个kernel/GPU)
激活:ReLU
归一化: Local L o c a l Response R e s p o n s e Normalization N o r m a l i z a t i o n [2]
池化: 3×3stride=2 3 × 3 , s t r i d e = 2 max m a x pooling p o o l i n g [3]
输出: 27×27×96 27 × 27 × 96 27×27×48 27 × 27 × 48 / GPU)
     conv输出结果: 227114+1=55 227 − 11 4 + 1 = 55 ,feature map的大小为 55×55×96 55 × 55 × 96
     max pooling输出结果: 5532+1=27 55 − 3 2 + 1 = 27 ,feature map的大小为 27×27×96 27 × 27 × 96

第二层卷积

输入: 27×27×96 27 × 27 × 96 27×27×48 27 × 27 × 48 / GPU)
卷积: 256 256 5×5×48stride=1padding=2 5 × 5 × 48 , s t r i d e = 1 , p a d d i n g = 2 的卷积核(128个kernel/GPU)
激活:ReLU
归一化: Local L o c a l Response R e s p o n s e Normalization N o r m a l i z a t i o n [2]
池化: 3×3stride=2 3 × 3 , s t r i d e = 2 max m a x pooling p o o l i n g [3]
输出: 13×13×256 13 × 13 × 256 13×13×128 13 × 13 × 128 / GPU)
     conv输出结果: 27+2×251+1=27 27 + 2 × 2 − 5 1 + 1 = 27 ,feature map的大小为 27×27×256 27 × 27 × 256
     max pooling输出结果: 2732+1=13 27 − 3 2 + 1 = 13 ,feature map的大小为 13×13×256 13 × 13 × 256

第三层卷积

输入: 13×13×256 13 × 13 × 256 13×13×128 13 × 13 × 128 / GPU)
卷积: 384 384 3×3×256stride=1padding=1 3 × 3 × 256 , s t r i d e = 1 , p a d d i n g = 1 的卷积核(192个kernel/GPU)
激活:ReLU
输出: 13×13×384 13 × 13 × 384 13×13×192 13 × 13 × 192 / GPU)
     conv输出结果: 13+1×231+1=13 13 + 1 × 2 − 3 1 + 1 = 13 ,feature map的大小为 13×13×384 13 × 13 × 384

第四层卷积

输入: 13×13×192 13 × 13 × 192 / GPU
卷积: 384 384 3×3×192stride=1padding=1 3 × 3 × 192 , s t r i d e = 1 , p a d d i n g = 1 的卷积核(192个kernel/GPU)
激活:ReLU
输出: 13×13×384 13 × 13 × 384 13×13×192 13 × 13 × 192 / GPU)
     conv输出结果: 13+1×231+1=13 13 + 1 × 2 − 3 1 + 1 = 13 ,feature map的大小为 13×13×384 13 × 13 × 384

第五层卷积

输入: 13×13×192 13 × 13 × 192 / GPU
卷积: 256 256 3×3×192stride=1padding=1 3 × 3 × 192 , s t r i d e = 1 , p a d d i n g = 1 的卷积核(128个kernel/GPU)
激活:ReLU
池化: 3×3stride=2 3 × 3 , s t r i d e = 2 max m a x pooling p o o l i n g [3]
输出: 6×6×256 6 × 6 × 256 6×6×128 6 × 6 × 128 / GPU)
     conv输出结果: 13+1×231+1=13 13 + 1 × 2 − 3 1 + 1 = 13 ,feature map的大小为 13×13×256 13 × 13 × 256
     max pooling输出结果: 1332+1=6 13 − 3 2 + 1 = 6 ,feature map的大小为 6×6×256 6 × 6 × 256

第六层全连接

输入: 6×6×256 6 × 6 × 256
输出: 4096 4096 (2048/GPU)
激活:ReLU

第七层全连接

输入: 4096 4096
输出: 4096 4096 (2048/GPU)
激活:ReLU

第八层全连接(softmax)

输入: 4096 4096
输出: 1000 1000


Reducing Overfitting

为了避免过拟合,文中采取了两种应对方式

data augmentation

在图像处理中一个比较常用的方式就是数据增强。作者在训练AlexNet时使用了两种数据增强的方式。
第一种方式是从原图( 256×256 256 × 256 )中随机裁切出若干 227×227 227 × 227 大小的子图以及子图的水平翻转。这种方式使得训练集扩充了2048倍。在测试时,使用5张(四个角以及中心)裁切出来的图片(及他们的翻转)作为测试输入,最后的结果模型为对10个子图预测结果的平均值(average of softmax)。
第二种方式是改变原图中RGB通道的强度[4]。方法是,先对整个训练集中的RGB的像素值组成的集合做了一个PCA,得到其主成分。对于某张图片,我们在其原有的RGB像素值得基础上加上其主成分的若干倍(该倍数为一个随机变量,从一个 N(0,0.12) N ( 0 , 0.1 2 ) 的高斯分布中采样得到)。因此,对于一个RGB通道的像素值 Ixy=[IRxy,IGxy,IBxy]T I x y = [ I x y R , I x y G , I x y B ] T ,为其加上一个值,得到 Ixy=[IRxy,IGxy,IBxy]T+[p1,p2,p3][α1λ1,α2λ2,α3λ3]T I x y ′ = [ I x y R , I x y G , I x y B ] T + [ p 1 , p 2 , p 3 ] [ α 1 λ 1 , α 2 λ 2 , α 3 λ 3 ] T 。其中 pi p i λi λ i 是又三通道的值算出的一个 3×3 3 × 3 的协方差矩阵的特征向量和特征值。 αi α i 是一个随机生成的数,在一次训练中,对于一张图片, αi α i 只生成一次(训练过程中再遇到该图片时则重新生成 αi α i )。这样的处理方式在某种程度上降低了光照和颜色和灯光对结果的影响。

dropout

训练时使用dropout技术避免过拟合,在训练时,以0.5的概率将隐藏层的输出置0。在测试时,使用所有的输出(即不进行置零操作),但是需要将输出乘0.5。

训练细节

使用 SGD S G D 训练, batch_size=128momentum=0.9weight_decay=0.0005 b a t c h _ s i z e = 128 , m o m e n t u m = 0.9 , w e i g h t _ d e c a y = 0.0005
权重迭代规则为:
vi+1:=0.9vi0.0005ϵwiϵLw|wiDi v i + 1 := 0.9 ⋅ v i − 0.0005 ⋅ ϵ ⋅ w i − ϵ ⋅ ⟨ ∂ L ∂ w | w i ⟩ D i
wi+1:=wi+vi+1 w i + 1 := w i + v i + 1
其中 ϵ ϵ 是学习率, Lw|wiDi ⟨ ∂ L ∂ w | w i ⟩ D i 是第 i i 个batch Di wi w i 偏导的均值。
初始化时,参数从一个 N(0,0.012) N ( 0 , 0.01 2 ) 的高斯分布中采样得到。在卷积的第二层、第四层、第五层以及全连接层(隐藏层)中初始化bias为 1 1 。剩下层中bias初始化为0
学习率初始化为 0.01 0.01 ,并且当val error不降时,将学习率除以10。在120万张图片上使用两个NVIDIA GTX 580 3GB GPU训练了90个cycles,在训练的过程中,学习率总共降了三次。



[1] ImageNet Classification with Deep Convolutional Neural Networks
[2] [3] 我在很多博客或者source code中看到,都是先做pooling后做normalization。如[A]或是[B]。但是,论文中叙述为

Max-pooling layers, of the kind described in Section 3.4, follow both response-normalization layers as well as the fifth convolutional layer.

对此甚是不解,希望大神能够帮忙解答。
[4] AlexNet中data augmentation是如何实现的?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值