论文总结——AlexNet(ImageNet Classification with Deep Convolutional Neural Networks)

初学DL,读了AlexNet的论文,做个简单的小结。防忘。
详细参看原论文:Alex Krizhevsky, Ilya Sutakever, Geoffrey E.Hinton. ImageNet Classification with Deep Convolutional Neural Networks

概述

Alex等人建立了一个8层的卷积神经网络(包括5个卷积层和3个全连接层,如下图所示,图来自原论文),在ImageNet这样巨大的数据集中作出了对图像识别识别率突破性的进展。
AlexNet
Alex等人考虑到目标识别这个任务巨大的复杂性意味着即使在ImageNet这样大的数据集上也是无法明确的,为了完成识别,我们的模型应该还得包含大量的先验知识以弥补我们缺少的数据。而卷积神经网络(CNNs)正是这样一种模型。它的容量可以通过调整网络的深度和宽度来控制,而且也能对自然图像作出多数正确的假设。相比相同层数的标准前馈神经网络,卷积神经网络有更少的连接点和参数,表示CNNs同时更容易训练,但是理论上CNNs的最佳表现只比标准前馈神经网络稍差一些。

当然即使CNNs相比标准前馈神经网络更容易训练,在包含如此多的高分辨率的图像的数据集中,训练它仍不是一件容易的事。

Alex等人想到了以下一些对策以减小模型的训练成本:
1.利用线性整流函数(ReLUs, Rectified Linear Units)代替神经元中标准的非线性激活函数。
2.多GPU并行化计算
3.局部相应归一化(Local response normalization)
4. 重叠池化(Overlapping pooling)
我们知道在复杂度很高的情况下,模型很容易过拟合,为了解决这个问题,他们采用了下面两个技术。
1.数据增强
2.Dropout

技术简述

Rectified Linear Unit nonlinearity

神经元的标准激活函数一般是
f ( x ) = t a n h ( x ) f(x) = tanh(x) f(x)=tanh(x) 或者
f ( x ) = ( 1 + e − x ) − 1 f(x) = (1 + e^{−x})^{-1} f(x)=(1+ex)1
在以梯度下降的方法训练模型时,这些饱和的非线性函数的训练速度要比使用像线性整流函数(ReLUs) f ( x ) = m a x ( 0 , x ) f(x) = max(0, x) f(x)=max(0,x)这样的非饱和非线性函数慢得多。

Training on multiple GPUs

首先明确一点,GPU相比CPU它的矩阵运算速度更快,因为这样的特点,图像处理操作一般在GPU上执行。
深度学习依赖的庞大数据可能并不能直接放入单个GPU的显存中,也就是说如果仅依靠单个GPU,它的显存很大程度上限制了模型的大小。
现行GPU也提供了多GPU的并行计算功能,一个GPU可以直接对另一个GPU的显存进行读写操作而不需要经过主机的内存。

AlexNet正是运用了多GPU的并行计算功能,将一半的神经元放入一个GPU的显存中,另一半放入另一个GPU的显存中。
为了防止GPU间的通信占用性能过多,他们用了一个小技巧:只在特定的层次允许GPU间通信,以控制通讯量在总计算量中占一个可以接受的部分。特定的层次可以同交叉验证找到。
比如AlexNet中,只在第二层和第三层之间进行了GPU间的通讯。
GPU间的通信

Local response normalization(局部相应归一化)

ReLUs有一个理想的特性就是它不要求输入归一化来防止饱和。然而我们发现适当的局部归一化有助于模型的泛化。

目前我还不能理解的很到位,详情可以参看这篇博文:
【深度学习技术】LRN 局部响应归一化

Overlapping pooling

池化的目的是数据压缩,降低维度,相当于对图像进行压缩。
想理解很简单,传统卷积神经网络池化的选择框的大小和步长是一致的,如下图。
池化
这张图左边的每个蓝点,代表一个卷积框的结果,红色的框框就是池化的选择框,对选择框中的数据取平均值乘一个权重加一个偏置对应到右边的一个点,对所有的选择框作相同的操作,池化就完成了。
而Overlapping Pooling,顾名思义,只要选择框的步长小于大小,让选择框重叠在一起即可。
重叠池化

数据增强

减小过拟合最简单也最常用的方法就是保标签的自动地增大数据集。数据增强很好理解,很多地方都有相关解释,这里不做介绍。

在AlexNet的实现中,模型的训练是用GPU完成的,CPU相对空闲,我们就可以将数据增强的任务交给CPU来完成,以增大硬件的利用率。

Dropout

Dropout也很好理解,简单地说,就是给所有的神经元加一个50%的激活概率,只有当神经元被激活后,它才接受输入产生输出。

那么这种方法为什么能减小过拟合呢?

我们来类比一种很直观的减小过拟合的方法——训练多个模型,采用“取平均”或者“投票”的方法对最终结果下判断,这种策略通常可以有效地减小过拟合。因为不同的模型产生不同的过拟合,而“相反”的过拟合就会抵消,从而得到正确答案。回到Dropout中,每次训练都Dropout掉一些神经元,是不是就相当于训练了新的模型呢,这样一想就很容易理解了。
同时Dropout还能防止神经元之间连接过于紧密,通过Dropout,两个神经元不一定同时被激活,这样权值更新就不再依赖于固定的隐含节点连接,迫使模型得到更加鲁棒的结果。

Dropout详情可以参看这篇博客,讲的很透彻容易理解。
深度学习中Dropout原理解析

AlexNet层次总览

我们首先看一下传统的卷积神经网络,下图是LeNet-5网络。
LeNet-5
LeNet-5网络包含2个卷积层,2个池化层(下采样层)和2个全连接层和1个输出层(通过高斯连接)。需要注意的是,LeNet-5网络中的卷积层C1,C3中的神经元是没有激活函数的,池化层S2,S4中的神经元才有激活函数。
AlexNet
再看AlexNet,最开始看的时候,我发现它并没有池化层,但看完之后想了一想,只要将传统卷积神经网络中的卷积层和池化层合并成一个卷积层就行了,池化不再单独成层,而是称为一个操作,在卷积后实施。

总的来看,AlexNet包括5个卷积层和3个全连接层和一个输出层,最后一个全连接层的输出层馈送到一个1000路的softmax中,该softmax在1000个类别标签上产生分布。AlexNet最大化了多项式逻辑回归目标,相当于最大化了预测分布下正确标签的对数概率的跨训练案例的平均值。

第2,第4,第5个卷积层只与分布在相同GPU上的前层进行连接。第3个卷积层则与第二层的两部分都相连接,全连接层保持对前层神经元的全连接。响应归一化在第一和第二个卷积层之后执行。重叠池化紧接响应归一化和第5个卷积层之后。ReLU作为每个卷积层和全连接层的输出激活函数。

现在我们来逐层分析一下AlexNet。

第一个卷积层用96个11 × 11 × 3(3是通道数)卷积核以步长为4个像素的方式对224 × 224 × 3的输入图像进行卷积操作。用每个卷积核对图像进行卷积操作,得到一个55 × 55 × 1的特征平面。总共有96个卷积核,产生96个特征平面,最后对半分散到两个GPU的显存中。每个GPU的显存中有55 × 55 × 48的神经元。

这些神经元经过响应归一化和池化后作为第2个卷积层的输入。池化的选择框大小为3 × 3,步长为2 ,最终得到48 个27 × 27的特征平面。再用到256个5 × 5 × 48的卷积核进行卷积操作。

第三,第四和第五个卷积层之间去除了归一化操作和池化操作。分别用384个3 × 3 × 256的卷积核、384个3 × 3 × 192的卷积核和256个3 × 3 × 192的卷积核进行卷积操作。最后到每个全连接层得到了4096个神经元。

写在最后

卷积神经网络早在1998就已经提出。限于硬件性能和数据量以及相关技术的限制,在8年前的AlexNet这片论文发表前都没有得到很好应用。而现今,论文中的很多方法都已经称为了基本方法广泛应用于DL中。
真的从这篇论文中学到了很多,有些地方的理解还不够透彻,如果有错误欢迎指出。

参考资料

Alex Krizhevsky, Ilya Sutakever, Geoffrey E.Hinton. ImageNet Classification with Deep Convolutional Neural Networks

深度学习 — 卷积神经网络CNN(LeNet-5网络详解)
【深度学习技术】LRN 局部响应归一化
深度学习中Dropout原理解析

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值