当前位置: 首页 > news >正文

凸优化5:无约束优化之动量

无约束优化之动量

符号说明

符号含义
xtx_txtttt步的参数向量
∇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_tvtttt步的动量项(速度)
Gt,iG_{t,i}Gt,iiii个参数到第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}108
λ\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)+β(xtxt1)

解释:

  • 当前步沿梯度下降;
  • 再加上前一步的“惯性”;
  • 像滚动的重球在势场中前进,惯性帮助越过小坑和振荡区。

优点:

  • 加速收敛;
  • 缓解振荡。

缺点:

  • 对非凸问题容易过冲;
  • 需要精心调节β\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-BallNesterov
物理意义惯性滚动预判修正
梯度计算点当前点预测点
稳定性易过冲更平稳
收敛速度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)

缺陷:

  1. 各参数维度梯度尺度不同,统一学习率不合理。
  2. 稀疏特征学习慢(小梯度参数被忽略)。
  3. 学习率难以手动调整。

核心想法:
让每个参数拥有独立的、自适应的学习率
梯度大的维度 → 下降步长变小;
梯度小的维度 → 下降步长变大。

二、算法公式

设第iii个参数的历史梯度平方和为:
Gt,i=∑τ=1t(∇ifτ(xτ))2 G_{t,i} = \sum_{\tau=1}^{t} (\nabla_{i} f_\tau(x_\tau))^2 Gt,i=τ=1t(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,iGt,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ηDt1/2ft(xt)
其中:
Dt=diag(Gt)+εI D_t = \mathrm{diag}(G_t) + \varepsilon I Dt=diag(Gt)+εI

三、性质与效果

  1. 方向自适应:梯度大(噪声多)的维度衰减快,梯度小的维度保持较大学习率。
  2. 天然适用于稀疏数据(如 NLP 中的 embedding 训练),罕见词梯度少 → 步长较大。
  3. 单调递减学习率
    因为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/2ft(xt)
即在每个方向上使用“与历史梯度能量成反比”的缩放。
可以理解为在一个逐步扭曲的**黎曼度量(Riemannian metric)**下优化。

AdaGrad 相当于在每一步都重新定义“距离”的概念,让常被更新的方向走得更谨慎,少被更新的方向走得更大胆。

RMSProp


一、动机:修正 AdaGrad 的“学习率枯竭”

AdaGrad 的问题核心在于
Gt,i=∑τ=1t(∇ifτ)2G_{t,i} = \sum_{\tau=1}^{t} (\nabla_{i} f_\tau)^2Gt,i=τ=1t(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]t1+(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=xtE[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,iE[gi2]t+εη,!ift(xt)


三、性质与直觉

  1. 滑动窗口的能量归一化:
    不再记住所有历史,而只记住“近几步”的梯度能量。
    这样学习率不会无限衰减。
  2. 自适应但平稳:
    对于方差大的维度(梯度震荡),分母变大 → 学习率下降;
    对于稳定的维度,学习率保持相对较大。
  3. 鲁棒性好
    对非平稳损失(如深度网络早期阶段的抖动)有缓冲作用。

四、与 AdaGrad 的对比

特性AdaGradRMSProp
梯度记忆全历史累积指数滑动平均
学习率单调递减至零稳定在某范围
稀疏特征适配一般
深度网络表现

五、本质理解:

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)

  1. 一阶动量(梯度均值)
    mt=β1mt−1+(1−β1)gtm_t = \beta_1 m_{t-1} + (1 - \beta_1) g_t mt=β1mt1+(1β1)gt

  2. 二阶动量(平方梯度均值)
    vt=β2vt−1+(1−β2)gt2v_t = \beta_2 v_{t-1} + (1 - \beta_2) g_t^2 vt=β2vt1+(1β2)gt2

  3. 偏置校正(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

  4. 更新规则:
    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

四、性质与优点

  1. 方向平滑 + 步长自适应:
    • mtm_tmt平滑梯度方向,避免震荡;
    • vtv_tvt控制各维度学习率,防止陡峭方向过冲。
  2. 偏置校正保证早期稳定性:
    使早期梯度统计不再被低估。
  3. 无需手动调参:
    在大部分任务中默认参数即可工作良好。
  4. 适用于非平稳目标、稀疏特征与深度网络。

五、缺点与改进方向

  1. 可能欠收敛
    在部分凸问题中,Adam 不一定收敛到最优点(Reddi et al., 2018 指出)。
  2. 过度自适应导致步长不稳定
    解决方案有 AMSGradAdamWAdaBelief 等。

六、本质理解

Adam 在几何意义上是时间加权的各向异性梯度法

  • mtm_tmt代表一阶动量场,提供“惯性”;
  • vtv_tvt则定义一个时变的度量张量(metric tensor),自适应调整每个方向的步长;
  • 整体行为等价于在动态曲率修正的黎曼空间中作平滑梯度下降。

直观比喻:

SGD 是盲目走路的人,
RMSProp 是谨慎地根据地形调整步伐的人,
Adam 是既看惯性又看地形的“自动巡航”行者。

AdamW(Adam with Decoupled Weight )


一、动机:修正 Adam 正则化的逻辑错误

Adam 原版通常通过 L2 正则项 实现权重衰减:
min⁡xf(x)+λ2∣x∣2\min_x f(x) + \frac{\lambda}{2}|x|^2 xminf(x)+2λx2
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=β1mt1+(1β1)gt

vt=β2vt−1+(1−β2)gt2 v_t = \beta_2 v_{t-1} + (1 - \beta_2) g_t^2 vt=β2vt1+(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不再乘以自适应比例因子。


三、性质与效果

特性AdamAdamW
权重衰减通过梯度项实现,受自适应缩放影响与梯度更新解耦,恒定衰减率
正则化一致性不稳定稳定且可控
理论收敛性改善(更接近 SGD 行为)
实践效果对超参数敏感更鲁棒,普遍优于原版 Adam

四、本质理解

AdamW 将优化器的两个任务分离:

  1. 梯度驱动更新:由m^t/v^t\hat{m}_t / \sqrt{\hat{v}_t}m^t/v^t决定方向与步长。
  2. 权重衰减:独立控制参数幅度,起到正则作用。

几何视角:

  • Adam 在一个动态加权的度量空间中做下降;
  • AdamW 额外加入一个欧式长度惩罚,保持参数范数稳定;
  • 两者独立,因此正则化强度与自适应缩放无关
http://www.dtcms.com/a/544272.html

相关文章:

  • MYSQL-超全基础以及用法--仅个人的速记笔记(2)
  • 深度学习零基础教程:在 DigitalOcean GPU 云主机上一步搭建 Jupyter Lab
  • 仓颉并发集合实现:鸿蒙高并发场景的容器化解决方案
  • English Interview Template
  • 网站建设最贵服务商wordpress 首页403
  • 《C++ 多态》三大面向对象编程——多态:虚函数机制、重写规范与现代C++多态控制全概要
  • 自然科学研究的AI革命:如何用ChatGPT-4o贯通数据分析、建模与写作
  • Xrecode3(多功能音频转换工具)
  • 电商网站 内容优化发帖网站有哪些
  • spring cache 支持多结构的 Redis 缓存管理器
  • CPU 架构(CPU Architecture)
  • 国产固态硬盘推荐:天硕工业级SSDDRAM缓存与HMB技术详解
  • arcgis中建立渔网,fragtats计算景观指数(纯小白-详细教程)
  • SpringGateway处理跨域
  • 网站被收录后又被提出了免费咨询平台
  • 【printpdf】readme.md文件详解
  • 环形缓冲区实现共享内存
  • Spring AI 搭建 RAG 个人知识库
  • 网站地址是什么用淘宝域名做网站什么效果
  • SPSSAU「质量控制」模块:从可视化监控到过程优化,一站式搞定质量难题
  • 基于健康指标的自动驾驶全系统运行时安全分析方法
  • 从 0 到 1 开发 Rust 分布式日志服务:高吞吐设计 + 存储优化,支撑千万级日志采集
  • 如何做好网站的推广工作成都百度爱采购
  • [无人机sdk] Open Protocol | 协议包构造验证
  • 【Vscode】解决ssh远程开发时Formatter失效的问题
  • TCP 如何保证传输的可靠性?
  • 亲子娱乐升级!Docker 电视盒子 ADB 安装助手,儿童 APP 一键装满电视
  • Microsoft 365 Copilot 扩展至应用和工作流构建功能
  • 【Latex】本地部署latex+vscode
  • 注册中心(环境隔离、分级模型、Eureka)、远程调用负载均衡、服务保护原理分析