梯度平方丢失方向后,Adam怎样同时决定方向和步长?
Adam用m保存带符号的梯度平均,用v保存梯度平方平均,两份状态各司其职。
DETAILED ANSWER
直接结论
梯度平方后确实会丢失正负号,所以Adam不会依靠平方项v判断方向。它同时维护另一份保留正负号的梯度平均m:m负责主要往哪边走,v负责把这一步缩放到多大。
第一本账:m保留方向
m_t = β1 m_(t-1) + (1−β1)g_t
g_t没有平方,正负号被保留下来。如果过去多轮梯度大多为正,即使当前出现一次较小的负梯度,m_t也可能仍为正,因此更新不会因为单次波动立即调头。
这对应Momentum的思想:平滑历史方向,减少震荡。
第二本账:v只记录大小
v_t = β2 v_(t-1) + (1−β2)g_t²
平方后v_t不区分正负,只描述这个参数近期的梯度尺度。梯度长期较大,v_t就大,更新时分母变大,该参数的步长会被缩小。
这对应RMSProp的思想:根据近期梯度大小调节步长。
两本账怎样合在一起
Adam在进行偏差修正后,更新可以简化理解为:
新w = 旧w − η × m_hat / (sqrt(v_hat) + ε)
从这个式子可以直接看出:
m_hat在分子并保留正负号,决定更新方向;sqrt(v_hat)在分母并始终非负,决定更新被缩小多少;η仍然是人工设置的基础学习率。
为什么需要偏差修正
m和v通常从0开始,训练最初几轮的指数平均会天然偏小。Adam用1−β1^t和1−β2^t进行修正,使早期估计更接近真实的梯度平均与平方平均。
偏差修正不是第三本历史记录,也不负责决定方向;它只是修正从0初始化造成的早期低估。
最容易混淆的一句话
RMSProp的平方状态没有方向,但RMSProp仍用当前梯度决定本轮方向;Adam则额外用m平滑历史方向,再用v调整步长。
