返回介绍

数学基础

统计学习

深度学习

工具

Scala

二、AlexNet

发布于 2023-07-17 23:38:25 字数 17073 浏览 0 评论 0 收藏 0

  1. 2012年Hinton 和他的学生推出了AlexNet 。在当年的ImageNet 图像分类竞赛中,AlexeNet 以远超第二名的成绩夺冠,使得深度学习重回历史舞台,具有重大历史意义。

2.1 网络结构

  1. AlexNet 有5个广义卷积层和3个广义全连接层。

    • 广义的卷积层:包含了卷积层、池化层、ReLULRN 层等。
    • 广义全连接层:包含了全连接层、ReLUDropout 层等。

  2. 网络结构如下表所示:

    • 输入层会将3@224x224 的三维图片预处理变成3@227x227 的三维图片。

    • 第二层广义卷积层、第四层广义卷积层、第五层广义卷积层都是分组卷积,仅采用本GPU 内的通道数据进行计算。

      第一层广义卷积层、第三层广义卷积层、第六层连接层、第七层连接层、第八层连接层执行的是全部通道数据的计算。

    • 第二层广义卷积层的卷积、第三层广义卷积层的卷积、第四层广义卷积层的卷积、第五层广义卷积层的卷积均采用same 填充。

      当卷积的步长为1,核大小为3x3 时,如果不填充0,则feature map 的宽/高都会缩减 2 。因此这里填充0,使得输出feature map 的宽/高保持不变。

      其它层的卷积,以及所有的池化都是valid 填充(即:不填充 0 )。

    • 第六层广义连接层的卷积之后,会将feature map 展平为长度为 4096 的一维向量。

    编号网络层子层核/池大小核数量步长激活函数输入尺寸输出尺寸
    第0层输入层------3@224x224
    第1层广义卷积层卷积11x11964ReLU3@227x22796@55x55
    第1层广义卷积层池化3x3-2-96@55x5596@27x27
    第1层广义卷积层LRN----96@27x2796@27x27
    第2层广义卷积层卷积5x52561ReLU96@27x27256@27x27
    第2层广义卷积层池化3x3-2-256@27x27256@13x13
    第2层广义卷积层LRN----256@13x13256@13x13
    第3层广义卷积层卷积3x33841ReLU256@13x13384@13x13
    第4层广义卷积层卷积3x33841ReLU384@13x13384@13x13
    第5层广义卷积层卷积3x32561ReLU384@13x13256@13x13
    第5层广义卷积层池化3x3-2-256@13x13256@6x6
    第6层广义连接层卷积6x640961ReLU256@6x64096@1x1
    第6层广义连接层dropout----4096@1x14096@1x1
    第7层广义连接层全连接---ReLU40964096
    第7层广义连接层dropout----40964096
    第8层广义连接层全连接----40961000
  3. 网络参数数量:总计约 6237万。

    • 输出Tensor size 采用channel last 风格描述。即227x227x3 等价于前文的 3@227x227

    • 第6层广义连接层的卷积的参数数量最多,约3770万,占整体六千万参数的 60%。

      原因是该子层的卷积核较大、输入通道数量较大、输出通道数量太多。该卷积需要的参数数量为: $ MathJax-Element-34 $ 。

    编号网络层子层输出 Tensor size权重个数偏置个数参数数量
    第0层输入层-227x227x3000
    第1层广义卷积层卷积55x55x96348489634944
    第1层广义卷积层池化27x27x96000
    第1层广义卷积层LRN27x27x96000
    第2层广义卷积层卷积27x27x256614400256614656
    第2层广义卷积层池化13x13x256000
    第2层广义卷积层LRN13x13x256000
    第3层广义卷积层卷积13x13x384884736384885120
    第4层广义卷积层卷积13x13x38413271043841327488
    第5层广义卷积层卷积13x13x256884736256884992
    第5层广义卷积层池化6x6x256000
    第6层广义连接层卷积4096×137748736409637752832
    第6层广义连接层dropout4096×1000
    第7层广义连接层全连接4096×116777216409616781312
    第7层广义连接层dropout4096×1000
    第8层广义连接层全连接1000×1409600010004097000
    总计-----62,378,344

2.2 设计技巧

  1. AlexNet 成功的主要原因在于:

    • 使用ReLU 激活函数。
    • 使用dropout、数据集增强 、重叠池化等防止过拟合的方法。
    • 使用百万级的大数据集来训练。
    • 使用GPU训练,以及的LRN 使用。
    • 使用带动量的 mini batch 随机梯度下降来训练。

2.2.1 数据集增强

  1. AlexNet 中使用的数据集增强手段:

    • 随机裁剪、随机水平翻转:原始图片的尺寸为256xx256,裁剪大小为224x224

      • 每一个epoch 中,对同一张图片进行随机性的裁剪,然后随机性的水平翻转。理论上相当于扩充了数据集 $ MathJax-Element-35 $ 倍。

      • 在预测阶段不是随机裁剪,而是固定裁剪图片四个角、一个中心位置,再加上水平翻转,一共获得 10 张图片。

        用这10张图片的预测结果的均值作为原始图片的预测结果。

    • PCA 降噪:对RGB空间做PCA 变换来完成去噪功能。同时在特征值上放大一个随机性的因子倍数(单位1 加上一个 $ MathJax-Element-36 $ 的高斯绕动),从而保证图像的多样性。

      • 每一个epoch 重新生成一个随机因子。
      • 该操作使得错误率下降1%
  2. AlexNet 的预测方法存在两个问题:

    • 这种固定裁剪四个角、一个中心的方式,把图片的很多区域都给忽略掉了。很有可能一些重要的信息就被裁剪掉。
    • 裁剪窗口重叠,这会引起很多冗余的计算。

    改进的思路是:

    • 执行所有可能的裁剪方式,对所有裁剪后的图片进行预测。将所有预测结果取平均,即可得到原始测试图片的预测结果。
    • 减少裁剪窗口重叠部分的冗余计算。

    具体做法为:将全连接层用等效的卷积层替代,然后直接使用原始大小的测试图片进行预测。将输出的各位置处的概率值按每一类取平均(或者取最大),则得到原始测试图像的输出类别概率。

    下图中:上半图为AlexNet 的预测方法;下半图为改进的预测方法。

2.2.2 局部响应规范化

  1. 局部响应规范层LRN:目地是为了进行一个横向抑制,使得不同的卷积核所获得的响应产生竞争。

    • LRN 层现在很少使用,因为效果不是很明显,而且增加了内存消耗和计算时间。
    • AlexNet 中,该策略贡献了1.2% 的贡献率。
  2. LRN 的思想:输出通道 $ MathJax-Element-619 $ 在位置 $ MathJax-Element-42 $ 处的输出会受到相邻通道在相同位置输出的影响。

    为了刻画这种影响,将输出通道 $ MathJax-Element-619 $ 的原始值除以一个归一化因子。

    $ \hat a_i^{(x,y)}=\frac{a_i^{(x,y)}}{\left(k+\alpha \sum_{j=\max(0,i-n/2)}^{\min(N-1,i+n/2)}(a_j^{(x,y)})^2\right)^\beta},\quad i=0,1,\cdots,N-1 $

    其中: $ MathJax-Element-40 $ 为输出通道 $ MathJax-Element-619 $ 在位置 $ MathJax-Element-42 $ 处的原始值, $ MathJax-Element-43 $ 为归一化之后的值。 $ MathJax-Element-566 $ 为影响第 $ MathJax-Element-619 $ 通道的通道数量(分别从左侧、右侧 $ MathJax-Element-46 $ 个通道考虑)。 $ MathJax-Element-47 $ 为超参数。

    一般考虑 $ MathJax-Element-48 $ 。

2.2.3 多GPU 训练

  1. AlexNet 使用两个GPU训练。网络结构图由上、下两部分组成:一个GPU运行图上方的通道数据,一个GPU 运行图下方的通道数据,两个GPU 只在特定的网络层通信。即:执行分组卷积。

    • 第二、四、五层卷积层的核只和同一个GPU 上的前一层的feature map 相连。
    • 第三层卷积层的核和前一层所有GPUfeature map 相连。
    • 全连接层中的神经元和前一层中的所有神经元相连。

2.2.4 重叠池化

  1. 一般的池化是不重叠的,池化区域的大小与步长相同。Alexnet 中,池化是可重叠的,即:步长小于池化区域的大小。

    重叠池化可以缓解过拟合,该策略贡献了0.4% 的错误率。

  2. 为什么重叠池化会减少过拟合,很难用数学甚至直观上的观点来解答。一个稍微合理的解释是:重叠池化会带来更多的特征,这些特征很可能会有利于提高模型的泛化能力。

2.2.5 优化算法

  1. AlexNet 使用了带动量的mini-batch 随机梯度下降法。

  2. 标准的带动量的mini-batch 随机梯度下降法为:

    $ \mathbf{\vec v}\leftarrow \alpha\mathbf{\vec v}-\epsilon\nabla_{\vec\theta} J(\vec\theta)\\ \vec\theta\leftarrow \vec\theta+\mathbf{\vec v} $

    而论文中,作者使用了修正:

    $ \mathbf{\vec v}\leftarrow \alpha\mathbf{\vec v}-\beta\epsilon\vec\theta-\epsilon\nabla_{\vec\theta} J(\vec\theta)\\ \vec\theta\leftarrow \vec\theta+\mathbf{\vec v} $
    • 其中 $ MathJax-Element-49 $ , $ MathJax-Element-50 $ , $ MathJax-Element-80 $ 为学习率。
    • $ MathJax-Element-52 $ 为权重衰减。论文指出:权重衰减对于模型训练非常重要,不仅可以起到正则化效果,还可以减少训练误差。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文