卷积神经网络之AlexNet


Paper: ImageNet Classification with Deep Convolutional Neural Networks
Github: https://github.com/pytorch/vision/blob/master/torchvision/models/alexnet.py


AlexNet模型有多伦多大学, Geoff Hinton实验室设计,夺得了 2012ImageNet ILSVRC比赛的冠军,并且错误率远低于第二名,使得卷积神经网络乃至深度学习重新引起了广泛的关注。在此之前,由于受到计算机性能的影响,虽然LeNet在图像分类中取得了较好的成绩,但是并没有引起很多的关注。

AlexNet的特点

AlexNet是在LeNet的基础上加深了网络的结构,学习更丰富更高维的图像特征。AlexNet的特点:

  • 更深的网络结构。
  • 使用ReLU激活函数加速收敛。
  • 使用多GPU并行,加速训练。也为之后的分组卷积(group convolution)理论奠定基础。
  • 使用交叠池化(Overlapping Pooling)防止过拟合。
  • 使用数据增强,提出Dropout抑制过拟合。

使用ReLU激活函数加速收敛

在最初的感知机模型中,输入和输出的关系如下:
y = ∑ i w i x i + b y=\sum_iw_ix_i+b y=iwixi+b
只是单纯的线性关系,这样的网络结构有很大的局限性:即使用很多这样结构的网络层叠加,其输出和输入仍然是线性关系,无法处理有非线性关系的输入输出。因此,对每个神经元的输出做非线性变换(激活函数)就非常重要。

在此之前,激活函数主要使用的是tanh: f ( x ) = t a n h ( x ) f(x)=tanh(x) f(x)=tanh(x)以及sigmoid: f ( x ) = 1 1 + ( e − x ) − 1 f\left(x\right)=\frac1{1+\left(e^{-x}\right)^{-1}} f(x)=1+(ex)11,但是这些都是饱和激活函数,如下图,输入值处于饱和区时(x→∞时),其梯度几乎为0,因此收敛极慢!
sigmoid

针对这一问题,在AlexNet中引入了线性整流单元(Rectified Linear Units, ReLU)作为激活函数,即: f ( x ) = max ⁡ ( 0 , x ) f\left(x\right)=\max(0,x) f(x)=max(0,x)。其不存在饱和区,导师始终为1,梯度更大,计算量也更少,因此收敛得更快。ReLU
如下图所示,为tanh和`ReLU·的收敛速度对比:
tanh 和 ReLU 收敛速度对比

如何理解ReLU函数的非线性

这里有个问题,前面提到,激活函数要用非线性的,是为了使网络结构有更强的表达能力。但这里使用的ReLU本质上却是个线性的分段函数,那是如何使用ReLU进行非线性变换的呢?
这里把神经网络看成一个巨大的线性变换,则所有的训练样本 A 进行了线性变换输出为 B
B = M ⋅ A B=M·A B=MA
这里的M是一个线性变换的话,则所有的训练样本 A 进行了线性变换输出为 B
那么对于ReLU来说,由于其是分段的,0的部分可以看作神经元没有激活,不同的神经元激活或者不激活,其神经网络组成的变换矩阵是不一样的。
设有两个训练样本 a1a2 ,其训练时神经网络组成的变换矩阵为 M1M2 ,由于 M1 变换对应的神经网络中激活神经元和 M2 是不一样的,这样 M1M2 实际上是两个不同的线性变换。也就是说,每个训练样本使用的线性变换矩阵 M i M_i Mi是不一样的,在整个训练样本空间来说,其经历的是非线性变换。

单个训练样本是线性变换,但是每个训练样本的线性变换是不一样的,这样对整个训练样本集来说,就是非线性变换。

多GPU并行

单个GTX 580 GPU只有3GB显存,浙江限制可训练网络的最大尺寸和batch size大小。因此,将模型分为两部分,分不到两个 GPU上进行训练。由于GPU之间可以直接进行数据交换,而无需经过主机内存,因此可以很容易进行并行。

交叠池化(Overlapping Pooling

在一般的池化中,池化窗口 z 与滑动窗口 s 相等(如LeNet)。而交叠池化指的就是 s < z s<z s<z的池化,此时相邻的滑窗之间会有重叠。在论文的实现中,使用 z = 3 , s = 2 z=3,s=2 z=3s=2,这时Overlapping Pooling策略在top-1top-5分别降低了0.4%0.3%的错误率。与非重叠方案相比,输出的维度是相等的,并且能在一定程度上抑制过拟合。

抑制过拟合策略

Dropout

数据增强



AlexNet模型结构

AlexNet整体结构

AlexNet的整体结构如下所示:
AlexNet 模型结构

上图中的输入是 224 × 224 224×224 224×224,不过经过计算 ( 224 − 11 ) / 4 = 54.75 (224−11)/4=54.75 (22411)/4=54.75并不是论文中的55×55,而使用 227 × 227 227×227 227×227作为输入,则 ( 227 − 11 ) / 4 = 55 (227−11)/4=55 (22711)/4=55

如上图所示,AlexNet 共包含 8 个可学习的层,其中前 5 层为卷积层,后为全连接层,最后接一个 1000 路的 softmax 层,用于分类。

AlexNet参数具体变化过程:https://www.cnblogs.com/wangguchangqing/p/10333370.html

引入多GPU

同时,为了进行多 GPU 并行训练,我们将几乎所有层均分,分别放置于两个 GPU 上进行训练。其中,两个 GPU 之间仅在特定层上进行通信:

  1. 在第 3 层卷积层的时候,同时以前一层在两个 GPU 上的输出进行联合输入,其他卷积层中,GPU 之间数据不互通。
  2. 在全连接层,GPU 数据始终互通。
    具体的结构和参数如下所示(结合上节链接学习):
    AlexNet 详细层


学习和引用来源

  1. https://www.cnblogs.com/wangguchangqing/p/10333370.html
  2. https://tankzhou.cn/2019/06/29/AlexNet/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值