Alexnet网络模型介绍

1、概述

      AlexNet是2012年ImageNet竞赛冠军获得者Hinton和他的学生Alex Krizhevsky设计的。也是在那年之后,更多的更深的神经网路被提出,比如优秀的VGG,GoogleNet,resnet。其官方提供的数据模型,准确率达到57.1%,top-5 达到80.2%. 这项对于传统的机器学习分类算法而言,已经相当的出色。
      论文原文:http://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf

2、网络结构

整体结构为:
在这里插入图片描述
精简版的结构可表示为:

                                                                                      在这里插入图片描述

各层的详细描述:

(1)conv1阶段

      输入数据:227×227×3

      卷积核:11×11×3;步长:4;数量(也就是输出个数):96
      卷积后数据:55×55×96 (原图N×N,卷积核大小n×n,卷积步长大于1为k,输出维度是(N-n)/k+1)
      relu1后的数据:55×55×96
      Max pool1的核:3×3,步长:2
      Max pool1后的数据:27×27×96
      norm1:local_size=5 (LRN(Local Response Normalization) 局部响应归一化)
      最后的输出:27×27×96

      AlexNet采用了Relu激活函数,取代了之前经常使用的S函数和T函数,Relu函数也很简单:

      ReLU(x) = max(x,0)

      AlexNet另一个创新是LRN(Local Response Normalization) 局部响应归一化,LRN模拟神经生物学上一个叫做 侧抑制(lateral inhibitio)的功能,侧抑制指的是被激活的神经元会抑制相邻的神经元。LRN局部响应归一化借鉴侧抑制的思想实现局部抑制,使得响应比较大的值相对更大,提高了模型的泛化能力。LRN只对数据相邻区域做归一化处理,不改变数据的大小和维度。LRN概念是在AlexNet模型中首次提出,在GoogLenet中也有应用,但是LRN的实际作用存在争议,如在2015年Very Deep Convolutional Networks for Large-Scale Image Recognition 论文中指出LRN基本没什么用。

      AlexNet还应用了Overlapping(重叠池化),重叠池化就是池化操作在部分像素上有重合。池化核大小是n×n,步长是k,如果k=n,则是正常池化,如果 k<n, 则是重叠池化。官方文档中说明,重叠池化的运用减少了top-5和top-1错误率的0.4%和0.3%。重叠池化有避免过拟合的作用。

(2) conv2阶段

      输入数据:27×27×96

      卷积核:5×5;步长:1;数量(也就是输出个数):256
      卷积后数据:27×27×256 (做了Same padding(相同补白),使得卷积后图像大小不变。)
      relu2后的数据:27×27×256
      Max pool2的核:3×3,步长:2
      Max pool2后的数据:13×13×256 ((27-3)/2+1=13 )
      norm2:local_size=5 (LRN(Local Response Normalization) 局部响应归一化)
      最后的输出:13×13×256

      在AlexNet的conv2中使用了same padding,保持了卷积后图像的宽高不缩小。

(3)conv3阶段

      输入数据:13×13×256

      卷积核:3×3;步长:1;数量(也就是输出个数):384
      卷积后数据:13×13×384 (做了Same padding(相同补白),使得卷积后图像大小不变。)
      relu3后的数据:13×13×384
      最后的输出:13×13×384

      conv3层没有Max pool层和norm层

(4)conv4阶段

      输入数据:13×13×384

      卷积核:3×3;步长:1;数量(也就是输出个数):384
      卷积后数据:13×13×384 (做了Same padding(相同补白),使得卷积后图像大小不变。)
      relu4后的数据:13×13×384
      最后的输出:13×13×384

      conv4层也没有Max pool层和norm层

(5)conv5阶段

      输入数据:13×13×384

      卷积核:3×3;步长:1;数量(也就是输出个数):256
      卷积后数据:13×13×256 (做了Same padding(相同补白),使得卷积后图像大小不变。)
      relu5后的数据:13×13×256
      Max pool5的核:3×3,步长:2
      Max pool2后的数据:6×6×256 ((13-3)/2+1=6 )
      最后的输出:6×6×256

      conv5层有Max pool,没有norm层

(6)fc6阶段

      输入数据:6×6×256

      全连接输出:4096×1
      relu6后的数据:4096×1
      drop out6后数据:4096×1
      最后的输出:4096×1

      AlexNet在fc6全连接层引入了drop out的功能。dropout是指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率(一般是50%,这种情况下随机生成的网络结构最多)将其暂时从网络中丢弃(保留其权值),不再对前向和反向传输的数据响应。注意是暂时,对于随机梯度下降来说,由于是随机丢弃,故而相当于每一个mini-batch都在训练不同的网络,drop out可以有效防止模型过拟合,让网络泛化能力更强,同时由于减少了网络复杂度,加快了运算速度。还有一种观点认为drop out有效的原因是对样本增加来噪声,变相增加了训练样本。

(7)fc7阶段

      输入数据:4096×1
      全连接输出:4096×1
      relu7后的数据:4096×1
      drop out7后数据:4096×1
      最后的输出:4096×1

(8)fc8阶段

      输入数据:4096×1
      全连接输出:1000
      fc8输出一千种分类的概率。

3、AlexNet与在其之前的神经网络相比改进

(1)数据增广(Data Augmentation增强)

      常用的数据增强的方法有 水平翻转、随机裁剪、平移变换、颜色、光照、对比度变换。 增强图片数据集最简单和最常用的方法是在不改变图片核心元素(即不改变图片的分类)的前提下对图片进行一定的变换,比如在垂直和水平方向进行一定的平移,翻转等。

      AlexNet用到的第一种数据增益的方法:是原图片大小为256 * 256中随机的提取224 * 224的图片,以及他们水平方向的映像。

      第二种数据增益的方法就是在图像中每个像素的R、G、B值上分别加上一个数,用到 方法为PCA。对于图像每个像素,增加以下量 :
                                                                     在这里插入图片描述

      pi 是特征向量,λi是特征值,αi是N(0,0.1)高斯分布中采样得到的随机值。此方案名义上得到自然图像的重要特性,也就是说,目标是不随着光照强度和颜色而改变的。此方法将top-1错误率降低了1%。

(2) Dropout
      有效防止过拟合。结合多个模型的预测值是减少错误的有效方法,但是对于训练时间用好几天的大型神经网络太耗费时间。Dropout是有效的模型集成学习方法,具有0.5的概率将隐藏神经元设置输出为0。运用了这种机制的神经元不会干扰前向传递也不影响后续操作。因此当有输入的时候,神经网络采用不同的结构,但是这些结构都共享一个权重,这就减少了神经元适应的复杂性。测试时,用0.5的概率随机失活神经元。dropout减少了过拟合,也使收敛迭代次数增加一倍。

(3) Relu激活函数

      用ReLU代替了传统的simod或者T激活函数,使得训练更快。一般神经元的激活函数会选择sigmoid函数或者tanh函数,然而Alex发现在训练时间的梯度衰减方面,这些非线性饱和函数要比非线性非饱和函数慢很多。在AlexNet中用的非线性非饱和函数是f=max(0,x),即ReLU。实验结果表明,要将深度网络训练至training error rate达到25%的话,ReLU只需5个epochs的迭代,但tanh单元需要35个epochs的迭代,用ReLU比tanh快6倍。

(4)Local Response Normalization 局部响应归一化

      参考了生物学上神经网络的侧抑制的功能,做了临近数据归一化,提高来模型的泛化能力。ReLU本来是不需要对输入进行标准化,但本文发现进行局部标准化能提高性能。
                                                      在这里插入图片描述

      其中a代表在feature map中第i个卷积核(x,y)坐标经过了ReLU激活函数的输出,n表示相邻的几个卷积核。N表示这一层总的卷积核数量。k, n, αβ是hyper-parameters,他们的值是在验证集上实验得到的,其中k = 2,n = 5,α = 0.0001,β = 0.75。这种归一化操作实现了某种形式的横向抑制,这也是受真实神经元的某种行为启发。

(5)Overlapping Pooling 重叠池化
      重叠池化减少了系统的过拟合,分别将top-5和top-1的错误率减少了0.4%和0.3%。pooling层是相同卷积核领域周围神经元的输出。池化层可以被认为是由间隔s个像素的池化单元网格组成,每个池化单元概括了以池化单元的位置为中心的大小z×z的邻域。然而,Alex说还有的情况,也就是带交叠的Pooling,顾名思义这指Pooling单元在总结提取特征的时候,其输入会受到相邻pooling单元的输入影响,也就是提取出来的结果可能是有重复的(对max pooling而言)。而且,实验表示使用 带交叠的Pooling的效果比的传统要好,在训练阶段有避免过拟合的作用。

(6)多GPU并行训练

      AlexNet将网络分成了上下两部分,两部分的结构完全一致,这两部分由两块不同的GPU来训练,提高了训练速度。为提高运行速度和提高网络运行规模,作者采用双GPU的设计模式。并且规定GPU只能在特定的层进行通信交流。其实就是每一个GPU负责一半的运算处理。与在一个GPU上训练的每个卷积层有一半核的网络比较,该方案将我们的top-1与top-5误差率分别减少了1.7%与1.2%。值得注意的是,虽然one-GPU网络规模只有two-GPU的一半,但其实这两个网络其实并非等价的。

Alexnet模型代码参考:

其他可学习链接:

  • 6
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值