深度学习之卷积神经网络 AlexNet

AlexNet 是 2012年ILSVRC 比赛冠军,远超第二名的CNN,比LeNet更深,用多层小卷积叠加来替换单个的大卷积,结构如下图所示。
​​
深度学习之卷积神经网络 AlexNet_第1张图片

结构

预处理

  • 原始图片: 256 ∗ 256 ∗ 3 256*256*3 2562563

  • 图像处理:

    • 1.随机的剪切,将 256 ∗ 256 256*256 256256 的图片剪切成为 224 ∗ 224 224*224 224224 的图片
    • 2.对 224 ∗ 224 224*224 224224 的图像做了一些旋转和位置变换
    • 3.对 224 ∗ 224 224*224 224224 的图像做了一个图像大小的扩大,变成 227 ∗ 227 227*227 227227 的图片
  • 备注:实际输入AlexNet网络的图片是一个 227 ∗ 227 ∗ 3 227*227*3 2272273 的图片信息

  • 激励函数:论文中是:sigmoid,但是实际比赛的时候,使用的是ReLU

  • 总参数量:60956032

L0:输入层

  • input: 227 ∗ 227 ∗ 3 227*227*3 2272273
  • output: 227 ∗ 227 ∗ 3 227*227*3 2272273

L1 卷积+激励

  • input: 227 ∗ 227 ∗ 3 227*227*3 2272273
  • filter: 3 ∗ 11 ∗ 11 3*11*11 31111
  • stripe: 4 4 4
  • padding: 0 0 0
  • filter size/depth: 48 ∗ 2 48*2 482
  • output: 55 ∗ 55 ∗ 48 ∗ 2 55*55*48*2 5555482
  • 神经元数目: 55 ∗ 55 ∗ 48 ∗ 2 55*55*48*2 5555482
  • 参数个数: ( 3 ∗ 11 ∗ 11 + 1 ) ∗ 48 ∗ 2 = 34944 (3*11*11+1)*48*2=34944 (31111+1)482=34944
  • 连接方式:
    • 使用双GPU来进行卷积操作,这个卷积操作和普通卷积一样
    • 两个GPU并行的进行卷积操作,每个GPU只负责其中48个卷积核的计算
    • 效果:可以并行的计算模型,模型执行效率可以得到提升,并且将GPU之间的通信放到网络结构偏后的位置,可以降低信号传输的损耗"

L2 最大池化

  • input: 55 ∗ 55 ∗ 48 ∗ 2 55*55*48*2 5555482
  • filter: 3 ∗ 3 3*3 33
  • stripe: 2 2 2
  • padding: 0 0 0
  • output: 27 ∗ 27 ∗ 48 ∗ 2 27*27*48*2 2727482
  • 参数个数: 0 0 0

L3 卷积+激励

  • input: 27 ∗ 27 ∗ 48 ∗ 2 27*27*48*2 2727482
  • filter: 5 ∗ 5 ∗ 48 5*5*48 5548
  • stripe: 1 1 1
  • padding: 2 2 2 上下左右各加2个像素
  • filter size/depth: 128 ∗ 2 128*2 1282
  • output: 27 ∗ 27 ∗ 128 ∗ 2 27*27*128*2 27271282
  • 神经元数目: 27 ∗ 27 ∗ 128 ∗ 2 27*27*128*2 27271282
  • 参数个数: ( 5 ∗ 5 ∗ 48 + 1 ) ∗ 128 ∗ 2 = 307456 (5*5*48+1)*128*2=307456 (5548+1)1282=307456
  • 连接方式:各个GPU中对应各自的48个feature map进行卷积过程,和普通卷积一样

L4 最大池化

  • input: 27 ∗ 27 ∗ 128 ∗ 2 27*27*128*2 27271282
  • filter: 3 ∗ 3 3*3 33
  • stripe: 2 2 2
  • padding: 0 0 0
  • output: 13 ∗ 13 ∗ 128 ∗ 2 13*13*128*2 13131282
  • 参数个数: 0 0 0

L5 卷积+激励

  • input: 13 ∗ 13 ∗ 128 ∗ 2 13*13*128*2 13131282
  • filter: 3 ∗ 3 ∗ 256 3*3*256 33256
  • stripe: 1 1 1
  • padding: 2 2 2
  • filter size/depth: 192 ∗ 2 192*2 1922
  • output: 13 ∗ 13 ∗ 192 ∗ 2 13*13*192*2 13131922
  • 神经元数目: 13 ∗ 13 ∗ 192 ∗ 2 13*13*192*2 13131922
  • 参数个数: ( 3 ∗ 3 ∗ 256 + 1 ) ∗ 192 ∗ 2 = 885120 (3*3*256+1)*192*2=885120 (33256+1)1922=885120
  • 连接方式:将两个GPU中的256个feature map一起做卷积过程

L6 卷积+激励

  • input: 13 ∗ 13 ∗ 192 ∗ 2 13*13*192*2 13131922
  • filter: 3 ∗ 3 ∗ 192 3*3*192 33192
  • stripe: 1 1 1
  • padding: 2 2 2
  • filter size/depth: 192 ∗ 2 192*2 1922
  • output: 13 ∗ 13 ∗ 192 ∗ 2 13*13*192*2 13131922
  • 神经元数目: 13 ∗ 13 ∗ 192 ∗ 2 13*13*192*2 13131922
  • 参数个数: ( 3 ∗ 3 ∗ 192 + 1 ) ∗ 192 ∗ 2 = 663936 (3*3*192+1)*192*2=663936 (33192+1)1922=663936
  • 连接方式:各个GPU中对应各自的48个feature map进行卷积过程,和普通卷积一样

L7 卷积+激励

  • input: 13 ∗ 13 ∗ 192 ∗ 2 13*13*192*2 13131922
  • filter: 3 ∗ 3 ∗ 192 3*3*192 33192
  • stripe: 1 1 1
  • padding: 2 2 2
  • filter size/depth: 128 ∗ 2 128*2 1282
  • output: 13 ∗ 13 ∗ 128 ∗ 2 13*13*128*2 13131282
  • 神经元数目: 13 ∗ 13 ∗ 128 ∗ 2 13*13*128*2 13131282
  • 参数个数: ( 3 ∗ 3 ∗ 192 + 1 ) ∗ 128 ∗ 2 = 442624 (3*3*192+1)*128*2=442624 (33192+1)1282=442624
  • 连接方式:各个GPU中对应各自的48个feature map进行卷积过程,和普通卷积一样

L8 最大池化

  • input: 13 ∗ 13 ∗ 128 ∗ 2 13*13*128*2 13131282
  • filter: 3 ∗ 3 3*3 33
  • stripe: 2 2 2
  • padding: 0 0 0
  • output: 6 ∗ 6 ∗ 128 ∗ 2 6*6*128*2 661282
  • 参数个数: 0 0 0

L9 全连接+激励

  • input: 9216 9216 9216
  • output: 2048 ∗ 2 2048*2 20482
  • 参数个数: 9216 ∗ 2048 ∗ 2 = 37748736 9216*2048*2=37748736 921620482=37748736

L10 全连接+激励

  • input: 4096 4096 4096
  • output: 2048 ∗ 2 2048*2 20482
  • 参数个数: 4096 ∗ 4096 = 16777216 4096*4096=16777216 40964096=16777216

L11 全连接+激励

  • input: 4096 4096 4096
  • output: 1000 1000 1000
  • 参数个数: 4096 ∗ 1000 = 4096000 4096*1000=4096000 40961000=4096000

AlexNet结构优化

非线性激活函数:ReLU

使用Max Pooling,并且提出池化核和步长,使池化核之间存在重叠,提升了特征的丰富性。

防止过拟合的方法:Dropout,Data augmentation(数据增强)

大数据训练:百万级ImageNet图像数据

GPU实现:在每个GPU中放置一半核(或神经元),还有一个额外的技巧:GPU间的通讯只在某些层进行。

LRN归一化:对局部神经元的活动创建了竞争机制,使得其中响应比较大的值变得相对更大,并抑制其它反馈较小的神经元,增强了模型的泛化能力。本质上,LRN是仿造生物学上活跃的神经元对于相邻神经元的抑制现象(侧抑制)

​​深度学习之卷积神经网络 AlexNet_第2张图片

在AlexNet引入了一种特殊的网络层次,即:Local Response Normalization(LRN, 局部响应归一化),主要是对ReLU激活函数的输出进行局部归一化操作,公式如下:

其中a表示第i个卷积核在(x,y)坐标位置经过激活函数的输出值,这个式子的含义就是输出一个值和它前后的n个值做标准化。k、n、α、β是超参数,在AlexNet网络中分别为:2、5、10^-4、0.75,N为卷积核总数。

你可能感兴趣的:(深度学习,神经网络,深度学习,pytorch)