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
计算梯度:
$g_t = \nabla f(\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$
(这是梯度平方的指数移动平均,类似RMSProp)偏差校正 (修正初期偏差)
$\hat{m_t} = \frac{m_t}{1 - \beta_1^t}$
$\hat{v_t} = \frac{v_t}{1 - \beta_2^t}$
(早期动量都是0,需要矫正一下)
- 更新参数
$\theta_t = \theta_{t-1} - \alpha \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon}$
1 | 初始化:θ0, m0 = 0, v0 = 0, t = 0 |
2025-04-23 17:40:27