AlexNet网络结构

论文中的这个图比较晦涩,可以直接看下面的彩色图中的描述。

神经网络多个输入节点 神经网络输入太多_深度学习


LeNet几乎奠定了当前深度卷积神经网络的基本搭建形式,AlexNet进一步探讨的是网络加深时,模型会出现什么情况。首先,更难训练。为了解决这个问题,他们使用了两个GPU进行训练。另外,处理计算复杂的提升,梯度下降算在深层神经网络中传递出现梯度弥散,他们提出使用ReLU代替原来使用Sigmoid函数,解决了这个问题。为了降低复杂模型强建模能力导致的过拟合现象,将dropout技术应用到其中。AlexNet每层中的超参数数量:

神经网络多个输入节点 神经网络输入太多_神经网络多个输入节点_02


其输入、输出及每层训练参数计算如下:


输入尺寸

卷积核大小

卷积核个数

步长

输出尺寸

超参数数量

Conv

224x224x3

11x11x3

96

4

(224-11)/4+1 = 54.25 ~ 55, 55x55x48x2,x2表示两部分

(3*11*11+1)*96=34944~35k

Local Response Norm

-

-

-

-

-

-

Max Pool

55x55x48,两块GPU并行处理,每个处理48个feature maps

3x3

-

2

(55-3)/2+1=27, 27x27x48

-

Conv

总输入27x27x96,96表示feature maps个数,单个GPU 27x27x48,48个feature maps

总共5x5x96,单个GPU为 5x5x48

总共256,每个GPU128

1

卷积前经过padding使操作后尺寸不变,每个GPU输出27x27x128

(48*5*5+1)*128*2=307456~307k

Local Response Norm

-

-

-

-

-

-

Max Pool

27x27x128,两块GPU并行处理,每个处理128个feature maps

3x3

-

2

(27-3)/2+1=13, 13x13x128

-

Conv

总输入13x13x256,256表示feature maps个数

3x3

192x2

1

卷积前经过padding使操作后尺寸不变,13x13x192

(3*3*256+1)*192*2=885120

Conv

总输入13x13x384,单个GPU 13x13x192

3x3

192x2

1

卷积前经过padding使操作后尺寸不变,每个GPU输出13x13x192

(3*3*192+1)*192*2=663936

Conv

1总输入13x13x384,单个GPU 13x13x192

3x3

128x2

1

卷积前经过padding使操作后尺寸不变,每个GPU输出13x13x128

(3*3*192+1)*128*2=442624

Max Pool

13x13x256

3x3

-

2

(13-3)/2+1=6, 6x6x256

-

FC

展平后43264x1

-

-

-

4096

43264*4096=177209344

FC

4096x1

-

-

-

4096

16777216

AlexNet中的新技术:

(1) 使用了ReLU

解决了深层网络使用Sigmoid出现梯度弥散的问题。

神经网络多个输入节点 神经网络输入太多_池化_03

为什么使用Sigmoid和Tanh激活函数活导致梯度消失?

如上图所示,Sigmoid将输入映射到区间(0, 1), 当输入大于一定值时,输出接近1且随着输入继续增大,输出变化很小;当输入很小,小到一定程度时,输出接近0且随着输入继续减小,输出变化很小。我们说在输入很大或者很小时输出变化很小的情况为饱和。关键是其导数为神经网络多个输入节点 神经网络输入太多_池化_04, 当x很大或者很小时,结果都趋向于0,造成梯度消失。
对于Tanh函数,其导数为神经网络多个输入节点 神经网络输入太多_神经网络多个输入节点_05; 当x很小或者很大时,神经网络多个输入节点 神经网络输入太多_神经网络多个输入节点_06, 导致 神经网络多个输入节点 神经网络输入太多_深度学习_07
我们从两个函数的图像可知,Tanh可以表示为神经网络多个输入节点 神经网络输入太多_池化_08.

ReLU函数的优缺点

从表达式可知,Tanh和Sigmoid计算涉及指数运算,而ReLU只涉及大小比较;
不存在输出饱和性,激活的边界更加宽;
由于小于0的输入被截断,可以理解为具有稀疏表达的能力;然而存在另外一个问题,那就是可能导致神经元"死亡", 梯度无法更新导致训练失败。ReLU的导数为神经网络多个输入节点 神经网络输入太多_池化_09
于是研究人员提出了Leaky ReLU, 使得负梯度部分的信息能够保留下来,然而存在的问题是负梯度部分参数a的选择.还能够将a参数化,让其能够被训练。
神经网络多个输入节点 神经网络输入太多_深度学习_10
参考《百面机器学习》

(2) 使用Dropout减轻过拟合

在两个全连接层中使用了dropout。
几种解析:

  • 组合解析:
    每次dropout相当于训练一个子网络;
    最终结果相当于多个自网络的组合。
  • 动机解释:
    消除了神经元之间的依赖,增加泛化能力
  • 数据解析:
    对于dropout后的结果,总能找到与之对应点样本,等价于数据增强

(3) 使用重叠最大池化

池化过程中使用的步长比池化核尺寸小,池化的输出之间会有重叠和覆盖。

(4) 提出LRN(local response norm 局部响应标准化)层

使响应比较大的值变得相对较大,抑制其他反馈小的神经元。但是其他网络很少使用,因为效果不明显,还有一个问题就是导致前馈和反馈的速度大大降低。

(5) 使用了GPU进行加速

(6) 数据增强

对图片进行水平翻转做数据增强;
对256x256尺寸的图片随机采样出多张224x224尺寸的图片用于训练;