Adam
2025-04-23 17:40:27

Adam: A Method for Stochastic Optimization

Adam(Adaptive Moment Estimation,自适应矩估计)是一种广泛应用于深度学习中的一阶优化算法,结合了动量法和RMSProp的优点,通过自适应地调整学习率来加速梯度下降的收敛。

不同梯度下降算法的局限性:

  • 传统梯度下降: 使用固定的学习率,可能导致收敛过慢或陷入局部最小值。
  • AdaGrad: 通过累计梯度平方来缩放学习率,适合处理稀疏数据,但学习率可能过早衰减,导致收敛停滞。
  • RMSProp: 引入了指数平均来解决AdaGrad学习率衰减过快的问题,但仍缺乏对梯度方向的动态调整。

算法原理

Adam的核心思想是通过维护两个移动平均两来优化参数:

  • 一阶矩(动量):即梯度的指数移动平均,用于捕捉梯度的方向。
  • 二阶矩(未中心化的方差):即梯度平方的指数移动平均,用于自适应地调整学习率

通过这两者的结合,Adam能够:

  • 根据梯度的大小动态调整学习率(类似RMSProp)。
  • 利用动量加速梯度下降(类似动量法)。
  • 提供偏差校正机制,确保在训练初期(当移动平均还未充分“预热”时)也能表现良好。

数学公式

输入参数:

  • $\alpha$ : 学习率
  • $\beta_1$ : 一阶矩衰减率, 0.9
  • $\beta_2$ : 二阶矩衰减率, 0.999
  • ϵ : 数值稳定性常数,防止除以0

迭代更新

初始化一阶矩$m_0$,二阶矩$v_0$均为0,时间步$t$为0

  1. 计算梯度:
    $g_t = \nabla f(\theta_{t-1})$

  2. 更新一阶矩(动量)
    $m_t = \beta_1 m_{t-1} + (1-\beta_1)g_t$
    (这是梯度的指数移动平均,类似动量法)

  3. 更新二阶矩(方差)
    $v_t = \beta_2 v_{t-1} + (1-\beta_2)g_t^2$
    (这是梯度平方的指数移动平均,类似RMSProp)

  4. 偏差校正 (修正初期偏差)

$\hat{m_t} = \frac{m_t}{1 - \beta_1^t}$
$\hat{v_t} = \frac{v_t}{1 - \beta_2^t}$

(早期动量都是0,需要矫正一下)

  1. 更新参数

$\theta_t = \theta_{t-1} - \alpha \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon}$

1
2
3
4
5
6
7
8
9
10
初始化:θ0, m0 = 0, v0 = 0, t = 0
while 未收敛 do:
t ← t + 1
gt ← ∇f(θt-1) # 计算梯度
mt ← β1 * mt-1 + (1 - β1) * gt # 更新一阶矩
vt ← β2 * vt-1 + (1 - β2) * gt² # 更新二阶矩
m̂t ← mt / (1 - β1^t) # 偏差校正
v̂t ← vt / (1 - β2^t) # 偏差校正
θt ← θt-1 - α * m̂t / (√v̂t + ε) # 更新参数
end while
2025-04-23 17:40:27