深度学习:优化器(Optimizer)

本节目标:

  • 理解优化器在深度学习训练中的作用
  • 掌握不同优化算法的原理,优缺点和使用场景
  • 了解学习率的调节机制(如学习率衰减,Warmup)
  • 理解PyTorch中如何正确使用优化器
  • 对比主流优化器在不同任务中的表现

一、什么是优化器?

优化器是一个算法,用于根据反向传播计算出的梯度,更新神经网络中的可学习参数(如权重和偏置) 

优化器的核心目标是最小化损失函数:

\theta \leftarrow \theta - \eta \cdot \frac{\partial L}{\partial \theta }

其中:

  •  \theta:模型参数
  • \eta:学习率
  • \frac{\partial L}{\partial \theta }:参数的梯度

二、常见优化器原理与对比

 

优化器原理优点缺点适用场景
SGD梯度下降法简单,高效收敛慢,易陷局部极小小规模数据,控制精细更新
SGD+Momentum加速梯度方向快速收敛,越过鞍点超参数复杂图像任务(如CNN)
RMSProp自适应学习率适用于非平稳目标权重更新不直观RNN、时许任务
AdamRMSProp+Momentum收敛快,调参少有时过拟合,泛化差默认首选
AdamW正确实现权重衰减防止L2范数错误作用略慢Transformer类模型(如BERT)
Adagrad每参数自适应更新对稀疏数据有效学习率快速衰减文本,稀疏特征

三、每种优化器工作原理详解

1.SGD(Stochastic Gradient Descent)

最基本的优化器

\theta _{t+1} = \theta _t-\eta \cdot \bigtriangledown L(\theta _t)

  • 更新方向依赖当前梯度
  • 易受震荡影响,收敛慢 

2.SGD+Momentum(动量项)

引入速度概念:

v_{t+1} = \gamma v_t + \eta \cdot \bigtriangledown L(\theta _t)

\theta _{t+1} = \theta _t-v_{t+1} 

  • \gamma是动量因子(常取0.9)
  • 避免震荡,跳出鞍点,加速收敛

 

3.RMSProp(Root Mean Square Prop)

核心思想:适用过去梯度平方的均值调整每个参数的学习率

G_t = \rho G_{t-1}+(1-\rho )\cdot \bigtriangledown L(\theta _t)^2

\theta _{t+1} = \theta _t -\frac{\eta }{\sqrt{G_t+\epsilon }}\cdot \bigtriangledown L(\theta _t)

  • 更适合非平稳目标(如RNN)

4.Adam(Adaptive Moment Estimation)

结合Momentum + RMSProp的优点:

m_t = \beta _1m_{t-1}+(1-\beta _1)\bigtriangledown L(\theta _t)

v_t = \beta _2v_{t-1} + (1-\beta _2)\bigtriangledown L^2(\theta _t)

\hat{m_t} = \frac{m_t}{1-\beta ^t_1}\hat{v_t} = \frac{v_t}{1-\beta ^t_2}

\theta _{t+1}=\theta _t-\frac{\eta }{\sqrt{\hat{y_t}}+\epsilon }\hat{m_t}

  • 默认推荐优化器
  • 自适应每个参数的学习率
  • \beta _1=0.9,\beta _2=0.999通常效果好

5.AdamW(Weight Decay修正)

Adam原始版本中权重衰减不正确,AdamW正确分离了权重衰减项:

\theta _{t+1} = \theta _t-\eta (\frac{\hat{m_t}}{\sqrt{\hat{v_t}}+\epsilon }+\lambda \theta _t)

  • 当前Transformer、BERT、ViT中的默认优化器

四、学习率策略(LR Schedule)

策略说明使用场景
固定学习率手动设定\eta不变简单但收敛慢
Step Decay每N轮衰减一次经典方式
Exponential Decay每轮按指数衰减过拟合时使用
Cosine Annealing逐步变慢再重启近年大模型常用
Warmup初始逐渐增加学习率避免前期训练不稳定
# 示例:PyTorch中CosineAnnealing + Warmup
from torch.optim.lr_scheduler import CosineAnnealingLR

optimizer = torch.optim.Adam(model.parameters(), lr=3e-4)
scheduler = CosineAnnealingLR(optimizer, T_max=10)

 

五、PyTorch优化器使用模板

optimizer = torch.optim.Adam(model.parameters(), lr=0.001, weight_decay=1e-4)

for epoch in range(num_epochs):
    for batch in dataloader:
        outputs = model(inputs)
        loss = criterion(outputs, labels)

        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

六、优化器选择建议总结

场景首选优化器备注
初学者&默认Adam通用表现优良
文本任务(如NLP)AdamWHuggingFace等大模型默认
图像任务SGD+Momentum微调CNN效果更稳定
RNN结构RMSProp时间序列任务
小样本 or 稀疏特征Adagrad推荐系统、文本分类

七、常见问题与调试建议

现象可能原因建议
loss不下降学习率太小或太大使用warmup或调整LR
loss波动大没有使用动量使用SGD+Momentum
模型过拟合权重未衰减使用AdamW或添加正则项
loss为nan学习率过高或梯度爆炸梯度裁剪、降低lr

 

八、优化器进化关系

SGD
 └── + Momentum → SGD+Momentum
      └── + RMS → RMSProp
           └── + 一阶矩 → Adam
                └── + Weight Decay 修复 → AdamW

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值