欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > 深度学习---常用优化器

深度学习---常用优化器

2025/5/14 0:31:43 来源:https://blog.csdn.net/2403_88150975/article/details/147903863  浏览:    关键词:深度学习---常用优化器

 优化器一:Adam(Adaptive Moment Estimation)


 一、适用场景总结(实践导向)

场景是否推荐用 Adam说明
小模型训练(如 MLP、CNN)✅✅✅稳定、无需复杂调参,适合快速实验
初学者使用或结构新颖✅✅容错率高,容易收敛
医学图像初步建模✅✅常用于 baseline 训练
复杂大模型(如 Transformer)❌ 不推荐替代方案为 AdamW,更稳定


 二、PyTorch代码与推荐参数设置

import torch
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3,                     # 学习率betas=(0.9, 0.999),          # 一阶和二阶动量系数eps=1e-8,                    # 数值稳定项weight_decay=0.0            # L2正则化强度
)
  • lr=1e-3:标准初始值,大部分任务适用;若 loss 波动剧烈可调小至 1e-4

  • betas=(0.9, 0.999):默认设置几乎不需要改

  • eps=1e-8:保证数值稳定,基本不改

  • weight_decay=0.0:Adam 本身不建议加 L2 正则(详见后面误区)


 三、实战调参技巧

目的推荐设置说明
想加快训练收敛lr = 1e-3(初始)可在训练初期较快降低 loss
loss 波动大 / 不下降lr = 1e-4 ~ 5e-5小学习率更稳,适合细调
防过拟合weight_decay = 1e-5(慎用)Adam 的 weight_decay 实际为梯度正则,不太有效,建议改用 AdamW
微调已有模型lr = 5e-5 或更小防止破坏已有特征表示
调整学习率StepLRCosineAnnealingLR 调度器调整学习率以适应不同阶段收敛需求

学习率调度器示例:

from torch.optim.lr_scheduler import StepLR
scheduler = StepLR(optimizer, step_size=20, gamma=0.5)  # 每20轮将lr减半

 四、常见误区与建议

  •  误用 weight_decay:在 Adam 中加入 weight_decay 相当于错用 L2 正则,实际对参数更新方向产生影响,不是标准正则方式
     推荐使用 AdamW 替代

  • 学习率调度器常被忽视:Adam 虽然自适应,但仍推荐使用调度器,否则后期收敛慢

  •  适合作为 baseline 起点优化器,特别是结构不熟时、或做 ablation 实验时

 优化器二:AdamW(Adam with decoupled Weight Decay)


 一、适用场景总结(实践导向)

场景是否推荐用 AdamW说明
Transformer 模型训练(如 BERT、Swin Transformer)✅✅✅论文标准优化器,收敛稳定
微调预训练模型(如 BERT fine-tune)✅✅✅默认使用 AdamW,效果好且安全
图像分割任务(如 UNETR、TransUNet)✅✅权重正则更合理
小模型实验也可以用,但优势不如 Adam 明显

核心优点:解决了 Adam 中正则化不标准的问题!


 二、PyTorch代码与推荐参数设置

import torch
optimizer = torch.optim.AdamW(model.parameters(), lr=1e-4,                     # 通常比 Adam 略小betas=(0.9, 0.999), eps=1e-8,weight_decay=0.01           # 推荐加上!默认值一般 0.01
)
  • lr=1e-4:起始建议略小于 Adam;若是预训练模型微调,用 1e-5 ~ 3e-5

  • weight_decay=0.01:这个值是有效的 L2 正则项,推荐设置!

  • 其他参数基本保留默认


🧪 三、实战调参技巧

目的推荐做法说明
Transformer 预训练lr = 1e-4weight_decay = 0.01官方推荐设置
微调 BERT、Swin 等预训练模型lr = 2e-5 或更小;weight_decay = 0.01防止破坏已有参数
防止训练不稳定使用 warmup + 调度器transformer 很依赖 warmup 技术(见下)

📉 搭配调度器(transformer常用):

from transformers import get_linear_schedule_with_warmupscheduler = get_linear_schedule_with_warmup(optimizer,num_warmup_steps=500,              # 前500步线性升温num_training_steps=10000           # 总训练步数
)

 或者直接在pytorch中创建

from torch.optim.lr_scheduler import CosineAnnealingLR
scheduler = CosineAnnealingLR(optimizer, T_max=50)

 四、常见误区与建议

  • 不要用普通 Adam 加 weight_decay:请务必用 AdamW

  •  Transformer 必须用调度器(特别是 warmup),否则很容易训练失败

  •  直接使用 Adam 调高 weight_decay 会使收敛变差,原因为其 weight_decay 与标准 L2 不等价


 实战总结:什么时候用 AdamW?

应用推荐
微调 BERT、Swin Transformer 等预训练模型✅✅✅
医学图像分割中使用 Transformer 网络✅✅
需要正则效果(防止过拟合)
新任务上做 baseline,想加入合理正则项

 

 优化器三:SGD + Momentum(随机梯度下降 + 动量)


 一、适用场景总结(实践导向)

场景是否推荐用 SGD+Momentum说明
图像分类(如 ResNet、VGG、DenseNet)✅✅✅默认优化器,经典高效
大规模数据训练✅✅表现稳定,泛化强
医学图像(图像分割 / 分类)传统CNN模型✅✅与 AdamW 表现相当甚至更好
小数据集、快速测试❌ 不推荐收敛慢、对学习率更敏感


 二、PyTorch代码与推荐参数设置

import torch
optimizer = torch.optim.SGD(model.parameters(),lr=0.1,                      # 高起始学习率momentum=0.9,                # 动量系数weight_decay=5e-4,           # 标准 L2 正则nesterov=True                # 推荐开启
)
  • lr=0.1:SGD 起始学习率高!但需配合学习率调度器

  • momentum=0.9:常用设定,加快收敛,减少振荡

  • nesterov=True:一般推荐打开,提升稳定性

  • weight_decay=5e-4:这是传统 ImageNet 设置的标准正则


 三、实战调参技巧

目标推荐设置说明
CNN训练(ResNet、VGG)lr = 0.1,调度器减半不要一开始就设置太低
训练早期不收敛检查 batch size 和 lr 配合batch size 变大时 lr 要增大(线性关系)
想更快稳定收敛开启 nesterov=True,调大 momentum对震荡敏感任务更有效
中后期 loss 不再下降MultiStepLRCosineAnnealingLR非自适应优化器必须调度 lr!


📉 推荐调度器设置(图像任务中常见)

from torch.optim.lr_scheduler import MultiStepLRscheduler = MultiStepLR(optimizer, milestones=[30, 60, 90],   # 在这些 epoch 处学习率减半gamma=0.1
)
from torch.optim.lr_scheduler import CosineAnnealingLRscheduler = CosineAnnealingLR(optimizer, T_max=100)

 四、常见误区与建议

  •  用默认学习率 0.01 或太小的 lr 会严重阻碍收敛

    SGD 通常使用较大的初始 lr(0.1 是经典设置),但需要调度器配合!

  •  不使用调度器就用 SGD → 后期训练停滞

    学习率下降对于 SGD 是必须的!

  •  泛化能力更强:训练慢但往往结果比 Adam 更好,常用于正式比赛、ImageNet 模型、CV base model 训练


 实战总结:什么时候用 SGD+Momentum?

应用推荐
图像分类任务(ResNet 等)✅✅✅
图像分割中使用 CNN 结构(UNet)✅✅
模型较浅,想减少过拟合✅✅
对训练速度不敏感、追求最终精度✅✅✅
transformer 模型或 NLP任务❌ 不推荐

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词