adam 参数解释

adam 参数解析

参考

https://zhuanlan.zhihu.com/p/91166049
https://zhuanlan.zhihu.com/p/32626442

伪代码

参数解释

  1. Mt
    • Mt 提供了需要增大学习率的参数加速训练的能力.
      *. 累计的一阶动量(梯度)越大 代表在这个方向上历史向单一方向更新的越多. 越需要收敛.
  2. Vt
    • vt提供了需要减小学习率衰减的能力.
    • vt越大代表历史累计的二阶动量(梯度平方)越大, 代表这个参数更新越频繁,震荡越严重. 所以需要衰减学习率.
  3. t
    • 代表时间步, 每个epoch更新一次.
    • 所以在每个epoch开始时loss可能会有震荡.
  4. ß1, ß2,
    • 起到了对一二阶动量指数衰减的作用. 避免vt 累计过大, 导致参数学习率太小无法更新. 克服了adagrad 累计梯度导致分母过大参数无法更新的问题.
    • 下图展示出时间步1~20时,各个时间步的梯度随着时间的累积占比情况。(ß1,ß2的作用, 指数衰减 )
  5. epsilon
    • 避免gt除数(vt+epsilon) 为0. 注意如果vt过小会导致学习率过大, 这时可以调大epsilon值, 避免震荡.

adam的参数学习率理解

  1. 由于引入了一阶&二阶动量. adam的每个参数学习率都是不同的.
  2. 狭义上的学习率是固定的. 即alpha本身不会改变.
  3. 但梯度的系数等于 $ alpha * \frac{m_t}{\sqrt{v_t} + epsilon} $ 即通过累计的一二阶动量对梯度做更新.
    • 所以打印adam的learning rate 会发现并没有变化.
  4. 有必要也可以为adam引入学习率衰减, 以保证不过拟合, 二者并不矛盾.
posted @ 2020-09-03 20:39  bugfree  阅读(4437)  评论(0编辑  收藏  举报