模型训练的优化器和调度器选择

  • 时间:2025-11-07 14:26 作者: 来源: 阅读:0
  • 扫一扫,手机访问
摘要:目录 一、常用优化器(Optimizer) 1. SGD(Stochastic Gradient Descent) 2. Adam(Adaptive Moment Estimation) 3. AdamW 4. RMSprop 5. Adagrad 6. Adamax 7. Lion(Evolved Sign Momentum) 二、常用学习率调度器(Learning Rate

目录

一、常用优化器(Optimizer)

1. SGD(Stochastic Gradient Descent)

2. Adam(Adaptive Moment Estimation)

3. AdamW

4. RMSprop

5. Adagrad

6. Adamax

7. Lion(Evolved Sign Momentum)

二、常用学习率调度器(Learning Rate Scheduler)

1. StepLR(固定步长衰减)

2. MultiStepLR(多步衰减)

3. CosineAnnealingLR(余弦退火)

4. CosineAnnealingWarmRestarts(带重启的余弦退火)

5. ReduceLROnPlateau(按需衰减)

6. LinearLR(线性衰减)

7. CyclicLR(循环学习率)

三、优化器与调度器的搭配建议

四、关键调优原则

深度学习模型训练中,优化器(Optimizer)负责控制参数更新策略,调度器(Learning Rate Scheduler)负责动态调整学习率,两者配合直接影响模型收敛速度和最终性能。

大部分都已经集成在torch.optim库中,Lion可从timm.optim导入:



#调用学习器
import torch.optim as optim
#调用调度器
import torch.optim.lr_scheduler as lr_scheduler
'''
包含下面调度器
__all__ = ['LambdaLR', 'MultiplicativeLR', 'StepLR', 'MultiStepLR', 'ConstantLR', 'LinearLR',
           'ExponentialLR', 'SequentialLR', 'CosineAnnealingLR', 'ChainedScheduler', 'ReduceLROnPlateau',
           'CyclicLR', 'CosineAnnealingWarmRestarts', 'OneCycleLR', 'PolynomialLR', 'LRScheduler']
'''
#调用Lion调度器
from timm.optim import Lion
 

一、常用优化器(Optimizer)

优化器的核心是如何根据梯度调整参数,不同优化器适用于不同场景(如收敛速度、稳定性、内存占用等)。

1. SGD(Stochastic Gradient Descent)

最基础的优化器,随机梯度下降,每次用一个批次的数据更新参数。核心公式 param = param - lr * gradient

关键参数

lr(学习率):必选,控制更新步长(如  1e-3 1e-2)。过小收敛慢,过大会震荡。 momentum(动量):可选,默认  0,模拟物理动量(如  0.9),加速收敛并抑制震荡(适合高曲率区域)。 weight_decay(权重衰减):可选,默认  0,等价于 L2 正则化(如  1e-4),减轻过拟合。 nesterov(Nesterov 动量):可选,默认  False,启用 Nesterov 加速梯度(比普通动量收敛更快)。

适用场景

大规模数据集、简单模型(如 CNN 分类)。需精细调优学习率的场景(配合调度器效果更好)。
2. Adam(Adaptive Moment Estimation)

结合动量(Momentum)和自适应学习率(RMSprop)的优点,收敛快且稳定,应用最广泛。核心原理

维护一阶矩(动量)和二阶矩(梯度平方的指数移动平均),动态调整每个参数的学习率。

关键参数

lr:默认  1e-3,初始学习率(通常比 SGD 小)。 betas:默认  (0.9, 0.999),一阶矩和二阶矩的指数衰减率(β₁ 控制动量,β₂ 控制自适应学习率平滑度)。 eps:默认  1e-8,数值稳定项,避免分母为 0。 weight_decay:默认  0,L2 正则化(部分实现中与  AdamW 不同,需注意)。

适用场景

几乎所有场景(NLP、CV、推荐系统等),尤其适合中等规模模型和数据集。收敛速度要求高的场景(比 SGD 快,但可能泛化略差)。
3. AdamW

Adam 的改进版,修复了 Adam 中权重衰减的实现缺陷(将权重衰减与梯度更新分离,更接近纯 L2 正则)。关键参数

与 Adam 完全相同( lr betas eps weight_decay),但  weight_decay 效果更稳定。

与 Adam 的区别

Adam 中权重衰减是 “梯度衰减”( weight_decay * param 加到梯度中),而 AdamW 是 “参数衰减”(直接从参数中减去  weight_decay * lr * param),正则效果更可靠。

适用场景

替代 Adam 的首选(尤其是预训练模型微调,如 BERT、LLaMA 等),过拟合控制更优。
4. RMSprop

自适应学习率优化器,对梯度平方做指数移动平均,适合处理非平稳目标(如递归神经网络)。核心原理

每个参数的学习率与梯度平方的累积成反比(梯度大的参数学习率小,反之亦然)。

关键参数

lr:默认  1e-2 alpha:默认  0.99,梯度平方的指数衰减率(控制历史信息的保留程度)。 eps:默认  1e-8,数值稳定项。 momentum:默认  0,可选动量项(如  0.9)。 weight_decay:默认  0,权重衰减。

适用场景

RNN、LSTM 等序列模型(处理时间序列数据时稳定性优于 Adam)。
5. Adagrad

自适应学习率优化器,累计所有历史梯度的平方,适合稀疏数据(如文本)。关键参数

lr:默认  1e-2(通常需要调小,如  1e-4)。 lr_decay:默认  0,学习率衰减因子。 weight_decay:默认  0,权重衰减。

优缺点

优点:自动降低频繁更新参数的学习率(适合稀疏特征)。缺点:学习率随训练步数单调递减,可能过早停滞(后期几乎不更新),实际应用较少。
6. Adamax

Adam 的变体,用无穷范数替代二阶矩(更稳定的自适应学习率),适合内存受限场景。关键参数

与 Adam 类似,但去掉了二阶矩的  beta2,改用  beta1=0.9 beta2=0.999(默认)。

适用场景

大规模模型(内存占用略低于 Adam),但实际应用不如 Adam 广泛。
7. Lion(Evolved Sign Momentum)

2023 年提出的新型优化器,用符号函数替代 Adam 中的二阶矩,收敛快且内存占用低(适合大模型)。核心参数

lr:通常比 Adam 小(如  1e-4)。 betas:默认  (0.9, 0.99),一阶矩参数。 weight_decay:默认  0,权重衰减。

适用场景

超大规模模型(如千亿参数 LLM),训练速度比 Adam 快 2-3 倍,内存节省约 20%。

二、常用学习率调度器(Learning Rate Scheduler)

调度器的作用是动态调整学习率(如前期大步快收敛,后期小步精调),避免模型陷入局部最优。

1. StepLR(固定步长衰减)

每隔一定 epoch 按固定比例衰减学习率。关键参数

step_size:每  step_size 个 epoch 衰减一次(如  10 表示每 10 个 epoch 衰减)。 gamma:衰减因子(如  0.1 表示每次衰减为原来的 1/10)。

示例 lr=0.1 step_size=10 gamma=0.1 → 第 1-10 epoch 用  0.1,11-20 epoch 用  0.01,以此类推。

适用场景

对训练过程有明确预期(如已知 30 epoch 后需衰减),简单易调。
2. MultiStepLR(多步衰减)

在指定的 epoch 处衰减学习率(更灵活的 StepLR)。关键参数

milestones:需衰减的 epoch 列表(如  [10, 25, 40])。 gamma:衰减因子(如  0.5)。

示例 lr=0.1 milestones=[10,25] gamma=0.5 → 1-10 epoch 用  0.1,11-25 epoch 用  0.05,26+ epoch 用  0.025

适用场景

需根据任务特点手动设置衰减点(如验证集效果下降时)。
3. CosineAnnealingLR(余弦退火)

学习率随 epoch 按余弦曲线衰减(先快后慢),后期精细调优。关键参数

T_max:余弦周期(如  50 表示 50 个 epoch 完成一次衰减周期)。 eta_min:最小学习率(默认  0,建议设为  lr * 1e-3,避免学习率归零)。

原理 lr = eta_min + 0.5 * (base_lr - eta_min) * (1 + cos(pi * epoch / T_max))

适用场景

预训练模型微调、需要精细收敛的任务(如 ResNet、Transformer)。
4. CosineAnnealingWarmRestarts(带重启的余弦退火)

周期性重启学习率(回到初始值),避免模型陷入局部最优(适合长训练)。关键参数

T_0:初始周期(如  10 表示前 10 个 epoch 为第一个周期)。 T_mult:每次重启后周期翻倍(如  2 → 周期变为  10, 20, 40...)。 eta_min:最小学习率。

适用场景

训练周期长(如 100+ epoch)、复杂模型(如 GAN、目标检测)。
5. ReduceLROnPlateau(按需衰减)

当验证指标(如 loss、准确率)停滞时自动衰减学习率(最灵活的调度器)。关键参数

mode 'min'(指标越小越好,如 loss)或  'max'(指标越大越好,如准确率)。 factor:衰减因子(如  0.5)。 patience:指标停滞  patience 个 epoch 后衰减(如  3 表示 3 个 epoch 无提升则衰减)。 threshold:指标变化的最小阈值(如  1e-4,小于此值视为 “停滞”)。

适用场景

几乎所有场景(尤其是不知道何时衰减的情况),推荐优先使用。
6. LinearLR(线性衰减)

学习率从初始值线性衰减到目标值(适合预热或逐步衰减)。关键参数

start_factor:初始缩放因子(如  0.1 表示初始 lr = base_lr * 0.1)。 end_factor:最终缩放因子(如  1.0 表示最终 lr = base_lr * 1.0)。 total_iters:完成线性变化的步数(如  10 表示 10 个 epoch 从  start_factor 到  end_factor)。

适用场景

学习率预热(如大模型训练初期,从低 lr 逐步升到目标 lr,避免震荡)。
7. CyclicLR(循环学习率)

学习率在预设范围内周期性波动(如从低到高再到低),帮助模型跳出局部最优。关键参数

base_lr:最低学习率。 max_lr:最高学习率。 step_size_up:从  base_lr 升到  max_lr 的步数。 step_size_down:从  max_lr 降到  base_lr 的步数。

适用场景

难收敛的任务(如小样本学习、高维特征空间)。

三、优化器与调度器的搭配建议

场景推荐优化器推荐调度器核心参数示例
预训练模型微调AdamWCosineAnnealingLRlr=1e-5,T_max=50,eta_min=1e-6
从头训练小模型SGD(带动量)StepLR / ReduceLROnPlateaulr=1e-3,momentum=0.9,gamma=0.1
生成式任务(GAN/NLG)AdamW / LionCosineAnnealingWarmRestartslr=5e-5,T_0=30,T_mult=2
序列模型(RNN/LSTM)RMSpropReduceLROnPlateaulr=1e-3,alpha=0.99,patience=3
超大规模模型LionLinearLR(预热)+ Cosinelr=1e-4,start_factor=0.1

四、关键调优原则

优化器选择

新手优先用  AdamW(稳定、适用广);追求速度和大模型用  Lion;简单任务或需强泛化用  SGD + momentum

学习率设置

预训练微调: 1e-5 ~ 5e-5;从头训练: 1e-4 ~ 1e-3;生成式任务: 5e-5 ~ 1e-4(偏小更稳定)。

调度器选择

未知衰减时机:优先  ReduceLROnPlateau;已知训练周期: CosineAnnealingLR;长训练: CosineAnnealingWarmRestarts

权重衰减

小数据 / 大模型: 1e-3 ~ 5e-3(强正则);大数据 / 小模型: 1e-4 ~ 5e-4(弱正则)。

通过观察训练曲线(loss 趋势、验证指标)动态调整,是参数调优的核心技巧。

  • 全部评论(0)
最新发布的资讯信息
【系统环境|】20251031编辑(2025-11-07 15:34)
【系统环境|】看技术文档和手顺方法(2025-11-07 15:34)
【系统环境|】前端(Vue框架)实现主题切换(2025-11-07 15:33)
【系统环境|】c# OpenCV 基于成像色度计的汽车氛围灯亮度色度计算(2025-11-07 15:33)
【系统环境|】JAVA 接口文档优化 —— 用 Knife4j 让前后端对接 “零沟通”(参数、权限、示例全说清)(2025-11-07 15:32)
【系统环境|】BPF for HID drivers(2025-11-07 15:32)
【系统环境|】202506 CCF-GESP编程能力等级认证Scratch一级真题 建议答题时长:60min(2025-11-07 15:31)
【系统环境|】动态调整身份验证安全级别(2025-11-07 15:31)
【系统环境|】【AI辅助生成】QT 3D基础设施技术架构分析 为什么QT 3D技术栈如此复杂?(2025-11-07 15:30)
【系统环境|】HTML 事件(2025-11-07 15:30)
手机二维码手机访问领取大礼包
返回顶部