Skip to content

优化器 (Optimizers)

一句话定义:优化器是控制如何更新神经网络参数的算法。它决定了梯度下降的”步伐”——往哪个方向走、步子迈多大。

不同的优化器有不同的策略:有的步子固定(SGD),有的会根据历史调整步伐(Momentum),有的会为每个参数定制步长(Adam)。


  • SGD(基础滑雪):每次看一眼脚下的坡度,直接往下滑。可能被小坑绊住,也可能在平缓处卡住。
  • Momentum(带惯性滑雪):利用之前的速度,即使遇到小坑也能冲过去。
  • Adam(智能滑雪板):自动分析地形,在陡坡减速、在缓坡加速,还能记住哪些方向经常变化。

🎿 交互演示:优化器对比 (Interactive)

Section titled “🎿 交互演示:优化器对比 (Interactive)”

观察 SGD、Momentum、Adam 三种优化器到达最优点的路径和速度差异。

🎿优化器对比可视化

SGD Loss
53.0000
Momentum Loss
53.0000
Adam Loss
53.0000

💡 观察不同优化器到达最优点的路径和速度 | 绿点为最优点


最基础的优化器,直接沿梯度方向更新。

SGD 公式
θt+1=θtηL(θt)\theta_{t+1} = \theta_t - \eta \nabla L(\theta_t)
  • η\eta: 学习率 (Learning Rate)
  • L\nabla L: 损失函数的梯度
  • 优点: 简单、内存占用小
  • 缺点: 容易震荡、对学习率敏感

引入”动量”,利用历史梯度加速收敛。

Momentum 公式
vt=βvt1+L(θt)θt+1=θtηvtv_t = \beta v_{t-1} + \nabla L(\theta_t) \\ \theta_{t+1} = \theta_t - \eta v_t
  • vtv_t: 速度(累积的梯度方向)
  • β\beta: 动量系数,通常 0.9
  • 优点: 加速收敛、减少震荡
  • 缺点: 新增超参数 β\beta

自适应学习率,对每个参数使用不同的步长。

RMSProp 公式
st=βst1+(1β)(L)2θt+1=θtηst+ϵLs_t = \beta s_{t-1} + (1-\beta)(\nabla L)^2 \\ \theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{s_t + \epsilon}} \nabla L
  • sts_t: 梯度平方的指数移动平均
  • 核心思想: 梯度大的参数用小步长,梯度小的参数用大步长
  • 优点: 自适应、适合非平稳问题

结合 Momentum 和 RMSProp 的优点,现代深度学习的默认选择。

Adam 公式
mt=β1mt1+(1β1)Lvt=β2vt1+(1β2)(L)2m^t=mt1β1t,v^t=vt1β2tθt+1=θtηv^t+ϵm^tm_t = \beta_1 m_{t-1} + (1-\beta_1) \nabla L \\ v_t = \beta_2 v_{t-1} + (1-\beta_2) (\nabla L)^2 \\ \hat{m}_t = \frac{m_t}{1-\beta_1^t}, \quad \hat{v}_t = \frac{v_t}{1-\beta_2^t} \\ \theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{\hat{v}_t} + \epsilon} \hat{m}_t
  • mtm_t: 一阶矩估计(梯度的均值)
  • vtv_t: 二阶矩估计(梯度的方差)
  • m^t,v^t\hat{m}_t, \hat{v}_t: 偏差修正项
  • 默认超参数: β1=0.9\beta_1=0.9, β2=0.999\beta_2=0.999, ϵ=108\epsilon=10^{-8}
  • 论文: Kingma & Ba, ICLR 2015 (arXiv:1412.6980)

Adam 的改进版,正确实现 L2 正则化,LLM 训练的标准选择

AdamW 公式
θt+1=θtη(m^tv^t+ϵ+λθt)\theta_{t+1} = \theta_t - \eta \left( \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon} + \lambda \theta_t \right)
  • λ\lambda: 权重衰减系数
  • 区别: 将权重衰减从梯度中解耦
  • 优点: 泛化能力更强,Transformer 标准配置
  • 论文: Loshchilov & Hutter, ICLR 2019

优化器自适应学习率动量内存开销典型应用
SGD简单任务、调参基准
SGD+MomentumCNN 图像分类
RMSPropRNN
Adam通用默认选择
AdamWTransformer/LLM ⭐

import torch
import torch.nn as nn
import torch.optim as optim
model = nn.Linear(10, 1)
# SGD
optimizer_sgd = optim.SGD(model.parameters(), lr=0.01)
# SGD + Momentum
optimizer_momentum = optim.SGD(model.parameters(), lr=0.01, momentum=0.9)
# RMSProp
optimizer_rmsprop = optim.RMSprop(model.parameters(), lr=0.01)
# Adam (通用默认)
optimizer_adam = optim.Adam(model.parameters(), lr=0.001)
# AdamW (Transformer 标准)
optimizer_adamw = optim.AdamW(
model.parameters(),
lr=1e-4, # 学习率
betas=(0.9, 0.999), # 默认值
weight_decay=0.01 # 权重衰减
)
# 训练循环示例
for epoch in range(100):
optimizer_adam.zero_grad() # 清空梯度
output = model(torch.randn(32, 10))
loss = output.mean()
loss.backward() # 计算梯度
optimizer_adam.step() # 更新参数

场景推荐优化器推荐学习率
初学者 / 调参基准SGD0.01 - 0.1
CNN 图像分类SGD + Momentum0.01 - 0.1
通用深度学习Adam0.001 (1e-3)
Transformer / LLMAdamW1e-4 ~ 3e-4
微调预训练模型AdamW1e-5 ~ 5e-5


论文优化器链接
Kingma & Ba, 2015AdamarXiv:1412.6980
Loshchilov & Hutter, 2019AdamWarXiv:1711.05101
Sutskever et al., 2013MomentumICML 2013
Hinton (Lecture)RMSPropCoursera Neural Networks