DataWhale八月组队学习-李宏毅深度学习Task05-网络设计的技巧

类神经网络的训练

局部最小值与鞍点

  • 背景:随着参数更新,training loss没有下降到足够小或者压根没有下降趋势。人们推测是走到的这些地方参数对loss的微分为零时,梯度下降无法再updata参数。

  • gradient为零的两种情况(统称为临界点)

    • 局部最小值:local minima,卡在此处,无路可走

    • 鞍点:saddle point,卡在此处,有路可循

  • 如何分析得出是卡在局部最小值还是卡在鞍点

    • 泰勒多项式

      简单理解就是损失函数的泰勒展开式和梯度(具有一次微分的项目)、海塞矩阵(具有二次微分的项目)有关。

    • gradient为0时,我们可以根据点的分布来判断当前点的位置

    • 可能情况

      算出一个Hession,不需要将其和所有的v相乘。只需要看这个Hession的所有特征值都是整的,就代表这个条件成立。

  • 卡在saddle point

    • Hession不仅可以判断当前卡住的位置是不是在saddle point,还可以指出了参数可以更新的方向。

    • gradient已经无法判断参数更新方向的时候

批次(Batch)与动量(Momentum)

  • 利用batch进行优化

    • 当我们进行参数更新的时候,我们是将所有的data分为一个个的batch。每次更新参数就会使用一笔batch。所有的batch都进行一遍叫做一个epoch
    • 将资料分为batch的过程叫做Shuffle,每次epoch开始之前会切分一次batch,所以每一个epoch对应的batch都不一样。

  • 为什么要使用batch

    • 进行batch和不进行batch情况的比较

      • 左边不进行batch的情况冷却时间较长,但一步走的较为稳健(Powerful)。右边进行batch的情况冷却时间较短,但每一步走的不稳定(Noisy)。
      • 由于GPU可以进行并行运算的关系,所以batch size可能对花费时间的影响非常小。

    • size大小对Batch的影响

      • size的大小越大,需要参数更新的次数就越小,可能batch size大的batch进行一个epoch的时间更短。
      • 综上所述,使用GPU进行并行运算时不进行batch不一定冷却时间比进行batch花费时间长

    • Batch与大Batch的比较

      • Noisy的梯度下降反而可以帮助training

      • 原因:如果是full Batch,在遇到local minimum或者saddle point的时候参数更新就会停止。而如果是Small Batch,每一次使用的损失函数会有略微区别,使得遇到上述情况的时候可以继续进行下去。

      • 除了可以帮助training,较小的batch还可能可以帮助testing

        • 原因:当Training LossTesting Loss之间有不匹配的地方,即两者的Loss函数不同(选取的样本不一样)。这样在testing的损失函数上,local minimum较平缓的最小值点比较陡峭的最小值点在trainingtesting的差别更小。大的batch size会让我们倾向于较为陡峭的最小值点,小的batch size会让我们倾向于较为平缓的最小值点。
        • Batch size是不得不去调整的超参数

  • Momentum

    • 背景:将Loss函数假象为真正的斜坡,参数想象成小球,在真实的物理世界中小球下降不一定会收到saddle pointlocal minimum的阻拦。

    • 一般的梯度下降

    • 梯度下降加上动量

      传统的梯度下降是向梯度的反方向移动参数。此时需要向梯度的反方向加上前一步移动的方向去移动参数。

    • updata的方向不是考虑当前的梯度方向而是考虑过去所有的梯度总和

自动调整学习率(Learning Rate)

  • 当Loss不再下降的时候,不一定卡在Local minimumsaddle minimum,只是梯度确实无法继续下降了。

  • 学习率产生的影响

    • 当学习率较大时,梯度会来回震荡。当学习率较小时,梯度下降较慢,但在稍微平滑的地方就不再移动,无法到达local minimum
    • 需要客制化学习率

  • 改变梯度下降的公式,变为Adagrad,当坡度小的时候,学习率就增大。坡度大的时候,学习率减小。原因:梯度小,对应均方根小,对应的学习率就变大。

  • RMSProp(动态调整学习率)

    • 可以自由调整当前梯度的权重系数

    • 目前最常用的优化策略(optimization)是Adam: RMSProp + Momentum
  • 使用Adagrad的表现:

    • 原因:在多个小均方根累积后会出现井喷式增长,但到梯度较大的地方又会返回。

    • 解决方案:Learning Rate Scheduling,将学习率预设为与时间有关。

      • Learning Rate Decay:随着时间不断地进行,让学习率越来越小。

      • Warm Up:让学习率先变大后变小。

        首先学习率较小,先收集有关均方根的数据,再让学习率爬升。

        • 进一步了解WarmUP

  • 总结

分类与损失函数的影响

  • 分类

    • 分类标签标识的常见做法:将类别用one-hot vector表示。

    • output如何输出成vector形式

    • 回归得到的y是数值型,而分类得到的y是一个向量,向量通过softmax得到最后的labelsoftmax就是将y(可以取任何值)的值限定于范围0到1之间

    • softmax的内部原理

    • 分类问题损失函数的计算

      maximizing likelihood = minimizing cross-entropy

      最大似然估计和最小交叉熵是一件事

      最小交叉熵比均方根更加适合用在分类问题上。

      MSELoss较大的地方,梯度趋近于零,所以如果其初始位置在左上角,就很难通过梯度下降到达右下角。所以就算是损失函数的定义都可能影响training的过程。

批次标准化(Batch Normalization)

  • 背景:想要直接改变error surfacelandscape,需要将特征值限定于相同的范围内,使得training过程更加容易。

  • Feature Normalization

    • 做法:

    • 针对深度学习:通过相应层数之后的数值也需要进行标准化,在激活函数之前做还是在激活函数之后都可以。

    • 由于现在x决定zz又决定a,可谓牵一发而动全身,所以当前需要将所有经历了标准化的变量过程当作network的一部分

      • GPU内存此时无法加载所有的data,所以在实践的时候只会考虑一个batch中的数据
    • 下一步,βγ是另外被取出来的,是network的参数。原因是z~的平均值为0会对网络产生一些限制。

原文地址:https://www.cnblogs.com/MurasameLory-chenyulong/p/15201196.html