返回 深度学习 思维导图
中文·English
🧠 深度学习ID: sgd-momentum

SGD 与动量

SGD & Momentum
🎯核心定义
朴素 SGD 每步沿当前点梯度反方向更新 θt+1=θtηgt\theta_{t+1} = \theta_t - \eta g_t(其中 gt=θL(θt)g_t = \nabla_\theta L(\theta_t)),只看瞬时梯度,在病态曲率(条件数 κ=λmax/λmin\kappa = \lambda_{\max}/\lambda_{\min} 很大的椭圆等高线)上梯度方向频繁翻转,形成锯齿震荡。动量(Momentum)引入速度项对历史梯度做指数加权平均: vt=γvt1+ηgtv_t = \gamma v_{t-1} + \eta g_t,θt+1=θtvt\theta_{t+1} = \theta_t - v_t。把递推展开成几何级数 vt=ηk=0tγkgtkv_t = \eta\sum_{k=0}^{t}\gamma^k g_{t-k}: 越早的梯度权重 γk\gamma^k 越小(默认 γ=0.9\gamma = 0.9,10 步前的贡献已衰减到 0.9100.350.9^{10} \approx 0.35),方向一致的历史梯度叠加放大、高频来回翻转的梯度相互抵消——所以在谷底方向加速、在震荡方向减速。NAG(Nesterov 加速梯度)先沿速度“外推一步”再算梯度: vt=γvt1+ηθL(θtγvt1)v_t = \gamma v_{t-1} + \eta\nabla_\theta L(\theta_t - \gamma v_{t-1}),θt+1=θtvt\theta_{t+1} = \theta_t - v_t,对曲率变化更敏感,凸问题上收敛速率从 SGD 的 O(1/t)O(1/t) 提升到 O(1/t2)O(1/t^2)
💡使用场景
大规模数据并行训练(ImageNet/CIFAR 分类等)的经典基线优化器,CV 领域常仍优于 Adam;面试高频追问“为什么动量能抑制震荡”“NAG 与普通动量的区别”“动量如何与学习率衰减配合”。
解决的核心痛点
① 震荡——速度滞后于梯度,自动平均掉高频符号翻转,病态曲率下收敛明显变快;② 平坦区域/局部极小——惯性使其能穿过梯度接近零的平台与小沟壑,但动量过大会越过极小点后回弹震荡,需配合余弦退火等学习率调度;③ 收敛速率——动量/NAG 把凸问题下 SGD 的 O(1/t)O(1/t) 提升到 NAG 的 O(1/t2)O(1/t^2)(一阶方法的最优常数),代价只是多维护一个速度变量、每步额外开销可忽略。
🎯5 个高频面试考点 (Exam Points)
1
写出动量更新公式 vt=γvt1+ηgtv_t = \gamma v_{t-1} + \eta g_tθt+1=θtvt\theta_{t+1} = \theta_t - v_t,展开 vt=ηk=0tγkgtkv_t = \eta\sum_{k=0}^{t}\gamma^k g_{t-k},说明历史梯度的权重如何按 γk\gamma^k 衰减。
2
为什么动量能抑制震荡、加速收敛?从几何加权和的角度解释: 方向一致的梯度累加、高频翻转的梯度抵消,在条件数 κ\kappa 大的椭圆等高线上为什么收敛更快。
3
写出 NAG 更新 vt=γvt1+ηθL(θtγvt1)v_t = \gamma v_{t-1} + \eta\nabla_\theta L(\theta_t - \gamma v_{t-1}),解释“先外推一步再算梯度”与普通动量的区别,以及凸问题上 O(1/t)O(1/t2)O(1/t) \to O(1/t^2) 的收敛速率提升。
4
默认 γ=0.9\gamma = 0.9 意味着什么?γ\gamma 太大/太小分别导致什么问题(过冲回弹 vs 无记忆)?动量对梯度常数的有效步长为什么是 η/(1γ)\eta/(1-\gamma)(≈10 倍放大)?
5
动量与学习率调度如何配合?为什么加动量后通常要配学习率衰减(有效步长被放大、末期易震荡)?与 Adam 相比动量只有单一学习率的局限是什么?
更新于 2026-08-12
🎯
检验攻克程度:针对「SGD 与动量」专属刷题排雷
做单选排雷题、推导选项机制,答错自动收录进专属错题本。
🚀 开始本考点专项刷题
上一个知识点SSM 与 Mamba下一个知识点Adam/AdamW

🔗 更多 深度学习 知识点卡片

激活函数演进Autograd 动态图BatchNorm 批归一化经典 CNN 演进