SGD

单个样本进行学习

设需要更新参数为优化算法 - 图1,损失函数为优化算法 - 图2则:
优化算法 - 图3

组成mini-batch进行学习

  • batch的选择影响训练速度已经,优化效果;
    • 通常来说batch越大则更有机会收敛到全局最优;

设需要更新参数为优化算法 - 图4,损失函数为优化算法 - 图5(w),一个batch包含优化算法 - 图6个样本则:
记一个batch的总的损失为:优化算法 - 图7则:
优化算法 - 图8
优化算法 - 图9可以是向量,则就相当于矩阵求导)

SGD with momentum

动量类似于物理中的惯性,引入动量可以使得在学习过程中有更大几率脱离局部最优点,并且能够加快训练过程。
设初始动量为优化算法 - 图10,动量参数为优化算法 - 图11,学习率为优化算法 - 图12,更新参数为优化算法 - 图13,损失函数为优化算法 - 图14
优化算法 - 图15

  • 可以看到,动量在上坡不断减小;在下坡不断增大;和物理常=场景类似;
  • 参数更新量由当前梯度和上一个动量共同决定;
  • 优化算法 - 图16,则:

    • 优化算法 - 图17
    • 极端情况下,即:优化算法 - 图18,则上式可以化简为:

      优化算法 - 图19
      从该式看到,优化算法 - 图20由于小于1,所以学习速度被加快;

    • 优化算法 - 图21通常取值为0.9左右;

      Nesterov momentum

      和上一个方法类似,但是参数更新顺序不同。

设初始动量为优化算法 - 图22,动量参数为优化算法 - 图23,学习率为优化算法 - 图24,更新参数为优化算法 - 图25,损失函数为优化算法 - 图26
优化算法 - 图27

  • NAG 把梯度计算放在对参数施加当前速度之后
  • 这个“提前量”的设计让算法有了对前方环境“预判”的能力。Nesterov 动量可以解释为往标准动量方法中添加了一个修正因子

    自适应梯度AdaGrad

    背景

  • 解决学习率自适应问题;

  • 通常来说,不常出现的特征具有很高的信息量和辨别能力(往往这类特征具有决定性作用);
    • 给常出现的特征小的学习率,不常出现的特征大的学习率;
  • 对于稀疏的数据它的表现很好;
  • 对低频的参数做较大的更新,对高频的做较小的更新;
    • 特征频率体现在参数变换频率上?
    • 频率大小体现在梯度大小上?
    • 理解方式:对于常出现的特征则会导致该参数不断更新,所以最终其学习率会不断降低;对于低频特征,相对于高频特征对应的参数来说,虽然学习率也会下降(学习足够之后,lr下降是必要的),但是其降低速度明显慢于高频特征对应的参数。(自己的理解)

      更新规则

      优化算法 - 图28
      其中:
      优化算法 - 图29
      优化算法 - 图30
      优化算法 - 图31
      参考:
      优化算法
      深度学习,优化器算法