AlexNet

关于 Alex 的传说……大家随便听个报告都会讲到,这里就不说了。本文主要目的是为自己梳理知识

  • ReLU
  • Dropout
  • 网络结构
ReLU Nonlinearity
经典模型梳理:AlexNet

**函数是从 Sigmoid 到 tanh 到 ReLU 的,最初用 Sigmoid 存在三个问题

  • Saturated neurons “kill” the gradients.

    • 当输入 x=0 时,梯度为0.25,当网络层数浅是是OK的,但数值计算中学过当极端情况下,多个小数相乘会等于0,深层网络也是有问题的。
    • 当输入 x=±10 时,此时神经元饱和,回传的梯度接近0,这个当然是大问题。
  • Sigmoid outputs are not zero-centered. 为什么要以零为中心?

    • 经典模型梳理:AlexNet
    • Always all positive or all negative. Sigmoid 的输出恒为正,假设x除了输入层其他都为正,那么此时所有关于参数的梯度与上游梯度同号(当前梯度=局部梯度×上游梯度),因此所有维度参数w更新方向只能相同,这样导致的结果就是当前批次,更新参数是用不同的正数去增加或减小参数w,以至于梯度更新十分低效。为什么低效呢?
    • 如上图,Sigmoid 允许参数更新的方向在第一象限(全正),第三行星(全负),假设最佳w是蓝色向量,我们只能在允许的方向上更新,导致更新路径是红色向量,比起蓝色向量低效走远了
    • this is also why you want zero-mean data! 这也是一般情况下我们使用0均值的数据作为输入。
  • exp() is a bit compute expensive.

    • 卷积网络中主要代价是 dot products,exp() 的代价稍微注意一下就行了

然后就出现了 tanh

  • zero centered (nice) . 解决了 not zero centered 的问题,
  • still kills gradients when saturated . 但任存在另外两个问题。

接着就是本文用的 ReLU 方法,优点有四,缺点有一

  • 优点

    • Does not saturate (in +region).
      • 看图还是很直观,如果输入是正数,输出还是这个数,因此在输入空间(+region)不存在饱和问题
    • Very computationally efficient.
    • Converges much faster than sigmoid/tanh in practice (e.g. 6x)
      • Alex 也做了对比实验
    • Actually more biologically plausible than sigmoid
  • 缺点

    • Not zero-centered output

      • RuLU 只有一半的区域能被**,当权重初始化不好时,会出现 dead ReLU 的现象,people like to initialize ReLU neurons with slightly positive biases (e.g. 0.01)

      • 存在 dead ReLU,当你传入数据到训练好的网络,会发现网络中多达10%到20% dead ReLU,所以才出现了模型蒸馏等等方法?

      • PReLU, LReLU 讲道理是更优的,为什么现在论文中不用呢? 我觉得应该是 RuLU 是个基线吧。

Training on Multiple GPUs

当年数据是有了,但计算能力不强加上还没轮子用,幸好 Alex 工程能力极强,在 cuda 环境下把代码死磕出来了

Local Response Normalization

据说是 Hinton 在当年能训练多层网络的独门绝技,,,但是我出生的晚,就不看这个了

Overlapping Pooling

避免过拟合用

Reducing Overfitting

机器学习的本质目的是泛化误差最小,所以避免过拟合是一个老生常谈的话题了。

Data Augmentation

无需多讲,深度学习训练前必做的一步

Dropout

使用Bagging解释Dropout比使用稳健性噪声解释Dropout更好,Dropout 提供了一种廉价的 Bagging 集成近似, 见下图

  • 经典模型梳理:AlexNet
  • 因为Dropout是一个正则化技术,它减少了模型的有效容量。为了抵消这种影响,我们必须增大模型规模,但这是以更大的模型和更多训练算法的迭代次数为代价换来的。当数据非常大时,正则化带来的泛化误差减少得很小 ,只有极少的训练样本可用时,Dropout不会很有效。 所以需要根据数据来 trade-off

  • 一般选择 Dropout 率为0.5,原因是0.5的时候 Dropout 随机生成的网络结构最多

  • 在 inference 阶段是不用 Dropout 的

Overall Architecture

前5层是卷积层,后3层是全连接层

经典模型梳理:AlexNet

参考

Alex. ImageNet Classification with Deep Convolutional Neural Networks. 2012

Li. CS231n. Lecture 6

Goodfellow. Deep Learning. 7.13

相关文章: