Adam¶
Adam(Adaptive Moment Estimation)自适应矩估计
Adam优化器在2015年由Kingma和Ba在论文《Adam: A Method for Stochastic Optimization》中提出。它结合了动态学习率和动态momentum,以解决梯度问题。在许多实践中,Adam优化器表现出比传统优化方法更好的性能。
能够为每个参数动态调整学习率,因而表现出色。
核心思想¶
Adam 同时维护了参数梯度的一阶动量(均值)和二阶动量(方差),并使用这两个信息动态调整学习率。
一阶动量(均值): 梯度的指数加权平均,用于平滑梯度的变化。
二阶动量(方差): 梯度平方的指数加权平均,用于衡量梯度的变化幅度。
这种机制使 Adam 能够在训练过程中:
加速收敛
在稀疏梯度或梯度变化剧烈的场景中表现稳定
公式¶
\[\begin{split}\begin{array}{l}
一阶动量(均值)的更新:𝑚_𝑡=𝛽_1𝑚_{𝑡−1}+(1−𝛽_1)𝑔_𝑡 \\
二阶动量(方差)的更新:𝑣_𝑡=𝛽_2𝑣_{𝑡−1}+(1−𝛽_2)𝑔_𝑡^2 \\
偏差校正: 为了修正前期动量的偏差(初始值为 0),对 𝑚_𝑡 和 𝑣_𝑡 做偏差校正: \\
\hat{𝑚}_𝑡=\frac{𝑚_𝑡}{1−𝛽_1^𝑡},\hat{𝑣}_𝑡=\frac{𝑣_𝑡}{1−𝛽_2^𝑡} \\
参数更新:𝜃_{𝑡+1}=𝜃_𝑡−𝜂⋅\frac{\hat{𝑚}_𝑡}{\sqrt{\hat{𝑣}_𝑡}+𝜖}
\end{array}\end{split}\]
ϵ 是一个小值(如 10^−8 ),用于防止除零
\(𝑔_𝑡\) :当前梯度。
\(𝑚_𝑡\) :梯度的一阶动量(均值)。
\(𝑣_𝑡\) :梯度的二阶动量(方差)。
\(\hat{𝑚}_𝑡,\hat{𝑣}_𝑡\) :偏差校正后的 \(𝑚_𝑡\) 和 \(𝑣_𝑡\) 。
\(𝜂\):学习率。
优缺点¶
优点:
自适应学习率:
根据一阶和二阶动量动态调整每个参数的学习率,无需手动调节。
快速收敛:
在高维参数空间中,Adam 能快速找到较优解。
对稀疏梯度友好:
在 NLP 和推荐系统等场景中,Adam 对稀疏梯度的处理非常高效。
易于实现:
只需少量代码即可实现,且超参数(如 𝛽_1,𝛽_2,𝜖)对最终结果影响较小。
缺点:
欠收敛:
在某些问题上,Adam 可能会陷入局部最优解或无法充分收敛。
泛化能力不足:
相比 SGD(随机梯度下降),Adam 的正则化效果较差,可能导致泛化性能下降。
超参数敏感性:
尽管默认参数适用于大多数场景,但特定任务可能需要微调。