AlexNet 是 2012年ILSVRC 比赛冠军,远超第二名的CNN,比LeNet更深,用多层小卷积叠加来替换单个的大卷积,结构如下图所示。
结构
预处理
-
原始图片:256∗256∗3256*256*3256∗256∗3
-
图像处理:
- 1.随机的剪切,将 256∗256256*256256∗256 的图片剪切成为 224∗224224*224224∗224 的图片
- 2.对 224∗224224*224224∗224 的图像做了一些旋转和位置变换
- 3.对 224∗224224*224224∗224 的图像做了一个图像大小的扩大,变成 227∗227227*227227∗227 的图片
-
备注:实际输入AlexNet网络的图片是一个 227∗227∗3227*227*3227∗227∗3 的图片信息
-
激励函数:论文中是:sigmoid,但是实际比赛的时候,使用的是ReLU
-
总参数量:60956032
L0:输入层
- input:227∗227∗3227*227*3227∗227∗3
- output:227∗227∗3227*227*3227∗227∗3
L1 卷积+激励
- input:227∗227∗3227*227*3227∗227∗3
- filter:3∗11∗113*11*113∗11∗11
- stripe:444
- padding:000
- filter size/depth:48∗248*248∗2
- output:55∗55∗48∗255*55*48*255∗55∗48∗2
- 神经元数目:55∗55∗48∗255*55*48*255∗55∗48∗2
- 参数个数:(3∗11∗11+1)∗48∗2=34944(3*11*11+1)*48*2=34944(3∗11∗11+1)∗48∗2=34944
- 连接方式:
- 使用双GPU来进行卷积操作,这个卷积操作和普通卷积一样
- 两个GPU并行的进行卷积操作,每个GPU只负责其中48个卷积核的计算
- 效果:可以并行的计算模型,模型执行效率可以得到提升,并且将GPU之间的通信放到网络结构偏后的位置,可以降低信号传输的损耗"
L2 最大池化
- input:55∗55∗48∗255*55*48*255∗55∗48∗2
- filter:3∗33*33∗3
- stripe:222
- padding:000
- output:27∗27∗48∗227*27*48*227∗27∗48∗2
- 参数个数:000
L3 卷积+激励
- input:27∗27∗48∗227*27*48*227∗27∗48∗2
- filter:5∗5∗485*5*485∗5∗48
- stripe:111
- padding:222 上下左右各加2个像素
- filter size/depth:128∗2128*2128∗2
- output:27∗27∗128∗227*27*128*227∗27∗128∗2
- 神经元数目:27∗27∗128∗227*27*128*227∗27∗128∗2
- 参数个数:(5∗5∗48+1)∗128∗2=307456(5*5*48+1)*128*2=307456(5∗5∗48+1)∗128∗2=307456
- 连接方式:各个GPU中对应各自的48个feature map进行卷积过程,和普通卷积一样
L4 最大池化
- input:27∗27∗128∗227*27*128*227∗27∗128∗2
- filter:3∗33*33∗3
- stripe:222
- padding:000
- output:13∗13∗128∗213*13*128*213∗13∗128∗2
- 参数个数:000
L5 卷积+激励
- input:13∗13∗128∗213*13*128*213∗13∗128∗2
- filter:3∗3∗2563*3*2563∗3∗256
- stripe:111
- padding:222
- filter size/depth:192∗2192*2192∗2
- output:13∗13∗192∗213*13*192*213∗13∗192∗2
- 神经元数目:13∗13∗192∗213*13*192*213∗13∗192∗2
- 参数个数:(3∗3∗256+1)∗192∗2=885120(3*3*256+1)*192*2=885120(3∗3∗256+1)∗192∗2=885120
- 连接方式:将两个GPU中的256个feature map一起做卷积过程
L6 卷积+激励
- input:13∗13∗192∗213*13*192*213∗13∗192∗2
- filter:3∗3∗1923*3*1923∗3∗192
- stripe:111
- padding:222
- filter size/depth:192∗2192*2192∗2
- output:13∗13∗192∗213*13*192*213∗13∗192∗2
- 神经元数目:13∗13∗192∗213*13*192*213∗13∗192∗2
- 参数个数:(3∗3∗192+1)∗192∗2=663936(3*3*192+1)*192*2=663936(3∗3∗192+1)∗192∗2=663936
- 连接方式:各个GPU中对应各自的48个feature map进行卷积过程,和普通卷积一样
L7 卷积+激励
- input:13∗13∗192∗213*13*192*213∗13∗192∗2
- filter:3∗3∗1923*3*1923∗3∗192
- stripe:111
- padding:222
- filter size/depth:128∗2128*2128∗2
- output:13∗13∗128∗213*13*128*213∗13∗128∗2
- 神经元数目:13∗13∗128∗213*13*128*213∗13∗128∗2
- 参数个数:(3∗3∗192+1)∗128∗2=442624(3*3*192+1)*128*2=442624(3∗3∗192+1)∗128∗2=442624
- 连接方式:各个GPU中对应各自的48个feature map进行卷积过程,和普通卷积一样
L8 最大池化
- input:13∗13∗128∗213*13*128*213∗13∗128∗2
- filter:3∗33*33∗3
- stripe:222
- padding:000
- output:6∗6∗128∗26*6*128*26∗6∗128∗2
- 参数个数:000
L9 全连接+激励
- input:921692169216
- output:2048∗22048*22048∗2
- 参数个数:9216∗2048∗2=377487369216*2048*2=377487369216∗2048∗2=37748736
L10 全连接+激励
- input:409640964096
- output:2048∗22048*22048∗2
- 参数个数:4096∗4096=167772164096*4096=167772164096∗4096=16777216
L11 全连接+激励
- input:409640964096
- output:100010001000
- 参数个数:4096∗1000=40960004096*1000=40960004096∗1000=4096000
AlexNet结构优化
非线性激活函数:ReLU
使用Max Pooling,并且提出池化核和步长,使池化核之间存在重叠,提升了特征的丰富性。
防止过拟合的方法:Dropout,Data augmentation(数据增强)
大数据训练:百万级ImageNet图像数据
GPU实现:在每个GPU中放置一半核(或神经元),还有一个额外的技巧:GPU间的通讯只在某些层进行。
LRN归一化:对局部神经元的活动创建了竞争机制,使得其中响应比较大的值变得相对更大,并抑制其它反馈较小的神经元,增强了模型的泛化能力。本质上,LRN是仿造生物学上活跃的神经元对于相邻神经元的抑制现象(侧抑制)
在AlexNet引入了一种特殊的网络层次,即:Local Response Normalization(LRN, 局部响应归一化),主要是对ReLU激活函数的输出进行局部归一化操作,公式如下:
其中a表示第i个卷积核在(x,y)坐标位置经过激活函数的输出值,这个式子的含义就是输出一个值和它前后的n个值做标准化。k、n、α、β是超参数,在AlexNet网络中分别为:2、5、10^-4、0.75,N为卷积核总数。