Adam(自适应矩估计)是一种优化器,它融合了动量和RMSprop等自适应缩放方法的优势。Adam的更新机制通过维护两个独立的指数衰减移动平均值来实现优化:一个用于过去的梯度(第一矩估计),另一个用于过去的平方梯度(第二矩估计)。第一矩和第二矩估计在每个时间步$t$时,在计算了关于参数$\theta$的梯度$g_t = \nabla_\theta J(\theta_{t-1})$之后,Adam会更新这两个移动平均值:第一矩估计(均值): 这类似于动量项。它累积了过去梯度的指数衰减平均值。 $$ m_t = \beta_1 m_{t-1} + (1 - \beta_1) g_t $$ 这里,$m_t$是第一矩向量,$g_t$是当前时间步的梯度,$\beta_1$是第一矩估计的指数衰减率(通常接近1,例如0.9)。$m_0$初始化为全零向量。第二矩估计(非中心方差): 这类似于RMSprop中使用的项。它累积了过去平方梯度的指数衰减平均值。 $$ v_t = \beta_2 v_{t-1} + (1 - \beta_2) g_t^2 $$ 这里,$v_t$是第二矩向量,$g_t^2$表示梯度向量的逐元素平方,$\beta_2$是第二矩估计的指数衰减率(通常设置得更高,例如0.999)。$v_0$也初始化为全零向量。项$m_t$和$v_t$分别是梯度均值和非中心方差的估计值。超参数$\beta_1$和$\beta_2$控制着这些移动平均值的衰减率。接近1的值表示过去的梯度影响时间更长。偏差校正一个可能出现的问题是,$m_t$和$v_t$被初始化为零向量。特别是在训练的初始时间步,当$t$较小时,这些估计值会偏向于零。试想如果$\beta_1 = 0.9$;那么$m_1 = 0.1 g_1$。这明显小于实际梯度。Adam通过计算偏差校正后的第一矩和第二矩估计(分别表示为$\hat{m}_t$和$\hat{v}_t$)来处理这个初始化偏差:$$ \hat{m}_t = \frac{m_t}{1 - \beta_1^t} $$$$ \hat{v}_t = \frac{v_t}{1 - \beta_2^t} $$请注意分母中的项$(1 - \beta_1^t)$和$(1 - \beta_2^t)$。在训练开始时($t$较小),$\beta_1^t$和$\beta_2^t$接近1,这使得分母变小。这种除法有效地抵消了初始的零偏差。随着训练的进行和$t$的增加,$\beta_1^t$和$\beta_2^t$趋近于零(因为$\beta_1, \beta_2 < 1$),所以校正项$(1 - \beta_1^t)$和$(1 - \beta_2^t)$趋近于1,偏差校正的作用减小。这确保了在整个训练过程中估计值更准确。参数更新规则最后,Adam使用这些偏差校正后的估计值来更新模型参数$\theta$。这个更新规则与RMSprop非常相似,但它使用了校正后的动量估计$\hat{m}_t$,而不是原始梯度$g_t$:$$ \theta_t = \theta_{t-1} - \alpha \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon} $$这里:$\theta_t$是时间步$t$时的参数。$\alpha$是学习率(或步长)。$\hat{m}_t$是偏差校正后的第一矩估计。$\sqrt{\hat{v}_t}$是偏差校正后的第二矩估计的逐元素平方根。此项自适应地缩放每个参数的更新,类似于RMSprop。过去平方梯度较大(即$\hat{v}_t$较大)的参数将获得较小的更新。$\epsilon$是一个小常数(例如$10^{-8}$),用于数值稳定性,以防止在$\hat{v}_t$可能非常接近零时出现除以零的情况。Adam算法概览总而言之,Adam在每个时间步$t$的更新过程包含以下步骤:计算梯度:$g_t = \nabla_\theta J(\theta_{t-1})$更新有偏差的第一矩估计:$m_t = \beta_1 m_{t-1} + (1 - \beta_1) g_t$更新有偏差的第二矩估计:$v_t = \beta_2 v_{t-1} + (1 - \beta_2) g_t^2$计算偏差校正后的第一矩估计:$\hat{m}_t = m_t / (1 - \beta_1^t)$计算偏差校正后的第二矩估计:$\hat{v}_t = v_t / (1 - \beta_2^t)$更新参数:$\theta_t = \theta_{t-1} - \alpha \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon}$最初Adam论文的作者建议默认值设定为$\beta_1 = 0.9$,$\beta_2 = 0.999$,$\epsilon = 10^{-8}$。学习率$\alpha$(通常建议约为$0.001$)仍然是一个超参数,通常需要进行调整。这个循序渐进的过程,结合了基于第二矩的自适应缩放和基于第一矩的动量,以及重要的偏差校正步骤,使得Adam成为深度学习模型中广泛使用且通常有效的默认优化器。