凸优化5:无约束优化之动量
无约束优化之动量
符号说明
| 符号 | 含义 |
|---|---|
| xtx_txt | 第ttt步的参数向量 |
| ∇f(xt)\nabla f(x_t)∇f(xt) | 目标函数在xtx_txt处的梯度 |
| η\etaη | 学习率(步长) |
| β,β1,β2\beta, \beta_1, \beta_2β,β1,β2 | 动量/滑动平均系数(通常取 0.9, 0.999 等) |
| vtv_tvt | 第ttt步的动量项(速度) |
| Gt,iG_{t,i}Gt,i | 第iii个参数到第ttt步的历史梯度平方和(AdaGrad) |
| E[g2]tE[g^2]_tE[g2]t | 梯度平方的指数滑动平均(RMSProp) |
| mtm_tmt | 一阶动量(梯度的指数滑动平均,Adam) |
| vtv_tvt | 二阶动量(梯度平方的指数滑动平均,Adam) |
| m^t,v^t\hat{m}_t, \hat{v}_tm^t,v^t | 偏置校正后的一阶/二阶动量(Adam) |
| ε\varepsilonε | 数值稳定项(防止除以零,通常取10−810^{-8}10−8) |
| λ\lambdaλ | 权重衰减系数(正则化强度) |
| ∇ift(xt)\nabla_{i} f_t(x_t)∇ift(xt) | 目标函数在xtx_txt处关于第iii个参数的偏导数 |
| diag(Gt)\text{diag}(G_t)diag(Gt) | 以GtG_tGt为对角线元素的对角矩阵 |
| III | 单位矩阵 |
SGD 的缺点及动量方法改进
一、问题出发点:SGD 的局限
标准随机梯度下降(SGD)更新:
xt+1=xt−η∇f(xt)
x_{t+1} = x_t - \eta \nabla f(x_t)
xt+1=xt−η∇f(xt)
问题:
- 在狭长峡谷形损失面(即特征方向尺度差异大)中,梯度方向不断剧烈摆动;
- 沿陡峭方向振荡,沿平缓方向进展缓慢;
- 收敛速率接近O(1/t)O(1/t)O(1/t),远慢于二阶方法。
二、引入动量的核心思想:惯性
想法: 像物理中有质量的粒子那样,让优化“带惯性”。动量项记为速度vtv_tvt,模拟动能积累。
vt+1=βvt+(1−β)(−∇f(xt))
v_{t+1} = \beta v_t + (1-\beta)(-\nabla f(x_t))
vt+1=βvt+(1−β)(−∇f(xt))
xt+1=xt+ηvt+1 x_{t+1} = x_t + \eta v_{t+1} xt+1=xt+ηvt+1
这就是 Polyak’s Heavy Ball (1964)。
三、Heavy-Ball (Polyak Momentum)
形式:
xt+1=xt−η∇f(xt)+β(xt−xt−1)
x_{t+1} = x_t - \eta \nabla f(x_t) + \beta (x_t - x_{t-1})
xt+1=xt−η∇f(xt)+β(xt−xt−1)
解释:
- 当前步沿梯度下降;
- 再加上前一步的“惯性”;
- 像滚动的重球在势场中前进,惯性帮助越过小坑和振荡区。
优点:
- 加速收敛;
- 缓解振荡。
缺点:
- 对非凸问题容易过冲;
- 需要精心调节β\betaβ与η\etaη。
四、Nesterov 加速梯度 (NAG, 1983)
Nesterov 注意到 Heavy-Ball 更新滞后:你先算完梯度,再加惯性,但惯性早就改变了位置。他提出:提前感知未来位置。
vt+1=βvt−η∇f(xt+βvt) v_{t+1} = \beta v_t - \eta \nabla f(x_t + \beta v_t) vt+1=βvt−η∇f(xt+βvt)
xt+1=xt+vt+1 x_{t+1} = x_t + v_{t+1} xt+1=xt+vt+1
解释:
- 先“预测”下一个位置;
- 在预测点计算梯度;
- 因此能提前修正方向。
直觉:
Heavy-Ball 是“被动加速”,Nesterov 是“前瞻修正”。
五、对比总结
| 特性 | Heavy-Ball | Nesterov |
|---|---|---|
| 物理意义 | 惯性滚动 | 预判修正 |
| 梯度计算点 | 当前点 | 预测点 |
| 稳定性 | 易过冲 | 更平稳 |
| 收敛速度 | O(1/k)O(1/k)O(1/k) | O(1/k2)O(1/k^2)O(1/k2)在凸情形 |
六、从 SGD 到动量方法的逻辑链
SGD → 抖动严重
→ 引入“惯性”平滑更新 (Heavy-Ball)
→ 进一步在“预测点”计算梯度 (Nesterov)
→ 演化出现代动量优化器(如 Adam, RMSProp, AdaBelief)中融合动量思想的分支。
AdaGrad(Duchi et al., 2011)
一、动机:SGD 学习率“一刀切”的问题
SGD 使用固定学习率:
xt+1=xt−η∇ft(xt)
x_{t+1} = x_t - \eta \nabla f_t(x_t)
xt+1=xt−η∇ft(xt)
缺陷:
- 各参数维度梯度尺度不同,统一学习率不合理。
- 稀疏特征学习慢(小梯度参数被忽略)。
- 学习率难以手动调整。
核心想法:
让每个参数拥有独立的、自适应的学习率。
梯度大的维度 → 下降步长变小;
梯度小的维度 → 下降步长变大。
二、算法公式
设第iii个参数的历史梯度平方和为:
Gt,i=∑τ=1t(∇ifτ(xτ))2
G_{t,i} = \sum_{\tau=1}^{t} (\nabla_{i} f_\tau(x_\tau))^2
Gt,i=τ=1∑t(∇ifτ(xτ))2
更新规则为:
xt+1,i=xt,i−ηGt,i+ε∇ift(xt)
x_{t+1,i} = x_{t,i} - \frac{\eta}{\sqrt{G_{t,i}} + \varepsilon} \nabla_{i} f_t(x_t)
xt+1,i=xt,i−Gt,i+εη∇ift(xt)
或向量形式:
xt+1=xt−η⋅Dt−1/2∇ft(xt)
x_{t+1} = x_t - \eta \cdot D_t^{-1/2} \nabla f_t(x_t)
xt+1=xt−η⋅Dt−1/2∇ft(xt)
其中:
Dt=diag(Gt)+εI
D_t = \mathrm{diag}(G_t) + \varepsilon I
Dt=diag(Gt)+εI
三、性质与效果
- 方向自适应:梯度大(噪声多)的维度衰减快,梯度小的维度保持较大学习率。
- 天然适用于稀疏数据(如 NLP 中的 embedding 训练),罕见词梯度少 → 步长较大。
- 单调递减学习率:
因为Gt,iG_{t,i}Gt,i累积增长,Gt,i\sqrt{G_{t,i}}Gt,i也持续增大。
结果是学习率不断衰减,最终趋近于 0。
四、优缺点
优点:
- 不需要手动调节学习率;
- 稀疏特征训练效果突出;
- 理论上可证明收敛率O(1/t)O(1/\sqrt{t})O(1/t)。
缺点:
- 学习率衰减过快(在非凸问题上几乎停止更新);
- 对密集梯度任务表现差(如深度网络)。
五、本质理解:累积“几何尺度”的归一化
从几何角度看,AdaGrad 在梯度空间中进行各向异性缩放(anisotropic scaling):
Δxt=−η(Gt)−1/2∇ft(xt)
\Delta x_t = -\eta (G_t)^{-1/2} \nabla f_t(x_t)
Δxt=−η(Gt)−1/2∇ft(xt)
即在每个方向上使用“与历史梯度能量成反比”的缩放。
可以理解为在一个逐步扭曲的**黎曼度量(Riemannian metric)**下优化。
AdaGrad 相当于在每一步都重新定义“距离”的概念,让常被更新的方向走得更谨慎,少被更新的方向走得更大胆。
RMSProp
一、动机:修正 AdaGrad 的“学习率枯竭”
AdaGrad 的问题核心在于
Gt,i=∑τ=1t(∇ifτ)2G_{t,i} = \sum_{\tau=1}^{t} (\nabla_{i} f_\tau)^2Gt,i=τ=1∑t(∇ifτ)2
不断累加,使得分母
Gt,i\sqrt{G_{t,i}}Gt,i
持续增大 → 学习率单调下降 → 在训练后期几乎不动。
RMSProp 的核心改进:
不再无限累积,而是使用**指数滑动平均(EMA)**仅保留“近期”梯度信息。
二、算法公式
定义平方梯度的滑动平均:
E[g2]∗t=ρE[g2]∗t−1+(1−ρ)(∇ft(xt))2E[g^2]*t = \rho E[g^2]*{t-1} + (1-\rho) (\nabla f_t(x_t))^2
E[g2]∗t=ρE[g2]∗t−1+(1−ρ)(∇ft(xt))2
其中ρ∈[0,1)\rho \in [0,1)ρ∈[0,1)通常取 0.9。
更新规则:
xt+1=xt−ηE[g2]t+ε,∇ft(xt)x_{t+1} = x_t - \frac{\eta}{\sqrt{E[g^2]_t + \varepsilon}} , \nabla f_t(x_t)
xt+1=xt−E[g2]t+εη,∇ft(xt)
或分量形式:
xt+1,i=xt,i−ηE[gi2]∗t+ε,∇∗!ift(xt)x_{t+1,i} = x_{t,i} - \frac{\eta}{\sqrt{E[g_i^2]*t + \varepsilon}} , \nabla*{!i} f_t(x_t)
xt+1,i=xt,i−E[gi2]∗t+εη,∇∗!ift(xt)
三、性质与直觉
- 滑动窗口的能量归一化:
不再记住所有历史,而只记住“近几步”的梯度能量。
这样学习率不会无限衰减。 - 自适应但平稳:
对于方差大的维度(梯度震荡),分母变大 → 学习率下降;
对于稳定的维度,学习率保持相对较大。 - 鲁棒性好:
对非平稳损失(如深度网络早期阶段的抖动)有缓冲作用。
四、与 AdaGrad 的对比
| 特性 | AdaGrad | RMSProp |
|---|---|---|
| 梯度记忆 | 全历史累积 | 指数滑动平均 |
| 学习率 | 单调递减至零 | 稳定在某范围 |
| 稀疏特征适配 | 强 | 一般 |
| 深度网络表现 | 弱 | 强 |
五、本质理解:
RMSProp 相当于让优化器在一个“动态调整的、局部平滑”的度量空间中前进。
在几何意义上,它不是单调放大的尺度,而是根据当前梯度方差实时自适应地拉伸或压缩参数空间。
换句话说:
AdaGrad 是“记仇”的学生(过去的错误全记着);
RMSProp 是“善忘”的学生(只记得最近的错误)。
Adam(Adaptive Moment Estimation)
一、动机:融合动量与自适应学习率
前两者的优劣:
- 动量法(Heavy-Ball / Nesterov)平滑方向,加速收敛。
- RMSProp 通过平方梯度的滑动平均调节学习率,抑制震荡。
Adam 结合两者:
“动量提供方向一致性,RMSProp提供步长自适应。”
同时引入偏置校正(bias correction)解决初始化期估计偏小的问题。
二、算法核心公式
定义梯度:
gt=∇ft(xt)g_t = \nabla f_t(x_t)
gt=∇ft(xt)
-
一阶动量(梯度均值)
mt=β1mt−1+(1−β1)gtm_t = \beta_1 m_{t-1} + (1 - \beta_1) g_t mt=β1mt−1+(1−β1)gt -
二阶动量(平方梯度均值)
vt=β2vt−1+(1−β2)gt2v_t = \beta_2 v_{t-1} + (1 - \beta_2) g_t^2 vt=β2vt−1+(1−β2)gt2 -
偏置校正(bias correction)
在初期mt,vtm_t, v_tmt,vt向 0 偏移,故修正为:
m^t=mt1−β1t,v^t=vt1−β2t\hat{m}_t = \frac{m_t}{1 - \beta_1^t}, \quad\hat{v}_t = \frac{v_t}{1 - \beta_2^t} m^t=1−β1tmt,v^t=1−β2tvt -
更新规则:
xt+1=xt−ηm^tv^t+εx_{t+1} = x_t - \eta \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \varepsilon} xt+1=xt−ηv^t+εm^t
四、性质与优点
- 方向平滑 + 步长自适应:
- mtm_tmt平滑梯度方向,避免震荡;
- vtv_tvt控制各维度学习率,防止陡峭方向过冲。
- 偏置校正保证早期稳定性:
使早期梯度统计不再被低估。 - 无需手动调参:
在大部分任务中默认参数即可工作良好。 - 适用于非平稳目标、稀疏特征与深度网络。
五、缺点与改进方向
- 可能欠收敛:
在部分凸问题中,Adam 不一定收敛到最优点(Reddi et al., 2018 指出)。 - 过度自适应导致步长不稳定:
解决方案有 AMSGrad、AdamW、AdaBelief 等。
六、本质理解
Adam 在几何意义上是时间加权的各向异性梯度法:
- mtm_tmt代表一阶动量场,提供“惯性”;
- vtv_tvt则定义一个时变的度量张量(metric tensor),自适应调整每个方向的步长;
- 整体行为等价于在动态曲率修正的黎曼空间中作平滑梯度下降。
直观比喻:
SGD 是盲目走路的人,
RMSProp 是谨慎地根据地形调整步伐的人,
Adam 是既看惯性又看地形的“自动巡航”行者。
AdamW(Adam with Decoupled Weight )
一、动机:修正 Adam 正则化的逻辑错误
Adam 原版通常通过 L2 正则项 实现权重衰减:
minxf(x)+λ2∣x∣2\min_x f(x) + \frac{\lambda}{2}|x|^2
xminf(x)+2λ∣x∣2
SGD 中这等价于在梯度中加项λx\lambda xλx:
xt+1=xt−η(∇ft(xt)+λxt)x_{t+1} = x_t - \eta (\nabla f_t(x_t) + \lambda x_t)
xt+1=xt−η(∇ft(xt)+λxt)
但 Adam 的更新包含自适应缩放:
xt+1=xt−ηm^tv^t+ε
x_{t+1} = x_t - \eta \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \varepsilon}
xt+1=xt−ηv^t+εm^t
此时把+λxt+\lambda x_t+λxt加进梯度会被(v^t+ε)−1(\sqrt{\hat{v}_t}+\varepsilon)^{-1}(v^t+ε)−1缩放,
导致正则化强度与梯度统计耦合,不再是纯粹的权重衰减。
二、核心思想:权重衰减与梯度更新解耦
AdamW 的关键修改:
不再把λxt\lambda x_tλxt加入梯度,而是直接对参数施加衰减:
mt=β1mt−1+(1−β1)gt
m_t = \beta_1 m_{t-1} + (1 - \beta_1) g_t
mt=β1mt−1+(1−β1)gt
vt=β2vt−1+(1−β2)gt2 v_t = \beta_2 v_{t-1} + (1 - \beta_2) g_t^2 vt=β2vt−1+(1−β2)gt2
m^t=mt1−β1t \hat{m}_t = \frac{m_t}{1 - \beta_1^t} m^t=1−β1tmt
v^t=vt1−β2t \hat{v}_t = \frac{v_t}{1 - \beta_2^t} v^t=1−β2tvt
xt+1=xt−η(m^tv^t+ε+λxt) x_{t+1} = x_t - \eta \left( \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \varepsilon} + \lambda x_t \right) xt+1=xt−η(v^t+εm^t+λxt)
注意:
衰减项λxt\lambda x_tλxt不再乘以自适应比例因子。
三、性质与效果
| 特性 | Adam | AdamW |
|---|---|---|
| 权重衰减 | 通过梯度项实现,受自适应缩放影响 | 与梯度更新解耦,恒定衰减率 |
| 正则化一致性 | 不稳定 | 稳定且可控 |
| 理论收敛性 | 弱 | 改善(更接近 SGD 行为) |
| 实践效果 | 对超参数敏感 | 更鲁棒,普遍优于原版 Adam |
四、本质理解
AdamW 将优化器的两个任务分离:
- 梯度驱动更新:由m^t/v^t\hat{m}_t / \sqrt{\hat{v}_t}m^t/v^t决定方向与步长。
- 权重衰减:独立控制参数幅度,起到正则作用。
几何视角:
- Adam 在一个动态加权的度量空间中做下降;
- AdamW 额外加入一个欧式长度惩罚,保持参数范数稳定;
- 两者独立,因此正则化强度与自适应缩放无关
