深度学习中优化器的Momentum(动量法)原理与实现细节
字数 1080 2025-10-30 21:15:36
深度学习中优化器的Momentum(动量法)原理与实现细节
题目描述
动量法(Momentum)是深度学习优化算法中的一种重要技术,用于加速梯度下降过程并抑制振荡。当优化问题的损失函数曲面在不同方向具有差异很大的曲率时(如峡谷状地形),标准梯度下降法会因反复振荡而导致收敛缓慢。动量法通过引入“动量”概念,模拟物体运动惯性,使参数更新方向不仅依赖于当前梯度,还累积历史梯度的指数加权平均,从而在相关方向上获得更一致的加速效果。
解题过程
1. 标准梯度下降的局限性
- 基本公式:θ_{t+1} = θ_t - η∇L(θ_t)(θ为参数,η为学习率,∇L为梯度)
- 问题:在曲率较高的方向会产生来回振荡,尤其当梯度方向变化较大时,收敛路径曲折。
2. 动量法的核心思想
- 引入速度变量v,作为历史梯度的指数加权平均:
v_t = γv_{t-1} + η∇L(θ_t) (γ为动量系数,通常取0.9) - 参数更新改为:θ_{t+1} = θ_t - v_t
- 物理类比:将参数更新视为小球在损失曲面滚动。动量使小球在梯度方向一致时加速,在梯度方向变化时抑制突变。
3. 动量法的具体步骤
- 步骤1:初始化速度v_0=0,动量系数γ(如0.9),学习率η(如0.01)
- 步骤2:在第t次迭代时:
- 计算当前梯度g_t = ∇L(θ_t)
- 更新速度:v_t = γv_{t-1} + ηg_t (累积历史梯度,γ控制记忆衰减速度)
- 更新参数:θ_{t+1} = θ_t - v_t
- 步骤3:重复直至收敛
4. 动量法的效果分析
- 加速收敛:在梯度方向一致的维度(如峡谷底部),动量项叠加使更新步长增大
- 抑制振荡:在梯度方向变化的维度,正负梯度部分抵消,减少垂直方向的摆动
- 超参数影响:
- γ接近1时,动量效应强,但对梯度变化响应延迟
- γ较小时,更依赖当前梯度,动量效果减弱
5. 与Nesterov动量的区别(避免与已讲NAG重复,简要对比)
- 标准动量先计算梯度再叠加动量,Nesterov动量先按动量方向跳跃,再计算梯度并校正
- Nesterov动量在理论上有更好的收敛性,但实践中两者差异可能不明显
6. 代码实现示例(PyTorch风格)
def momentum_update(parameters, gradients, velocity, lr=0.01, gamma=0.9):
new_velocity = gamma * velocity + lr * gradients
new_parameters = parameters - new_velocity
return new_parameters, new_velocity
实际使用可直接调用优化器:torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.9)
关键理解:动量法通过梯度加权平均使优化过程更平滑,本质是在梯度估计中引入低频分量,过滤高频振荡噪声,同时保留长期趋势以实现加速。