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

 优化器一: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任务❌ 不推荐

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/81165.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SparkSQL 连接 MySQL 并添加新数据:实战指南

SparkSQL 连接 MySQL 并添加新数据:实战指南 在大数据处理中,SparkSQL 作为 Apache Spark 的重要组件,能够方便地与外部数据源进行交互。MySQL 作为广泛使用的关系型数据库,与 SparkSQL 的结合可以充分发挥两者的优势。本文将详细…

基于对抗性后训练的快速文本到音频生成:stable-audio-open-small 模型论文速读

Fast Text-to-Audio Generation with Adversarial Post-Training 论文解析 一、引言与背景 文本到音频系统的局限性:当前文本到音频生成系统性能虽佳,但推理速度慢(需数秒至数分钟),限制了其在创意领域的应用。 研究…

AI画图Stable Diffusion web UI学习笔记(中)

本文记录讲解AI画图工具Stable Diffusion web UI的部分基本使用方法,以便进行学习。AI画图Stable Diffusion web UI学习笔记分为上、中、下三篇文章。 我在 AI画图Stable Diffusion web UI学习笔记(上)_webui-CSDN博客 这篇文章中介绍了Stabl…

安全与智能的双向奔赴,安恒信息先行一步

人类文明发展的长河中,每一次技术变革都重新书写了安全的定义。 从蒸汽机的轰鸣到电力的普及,从互联网的诞生到人工智能的崛起,技术创新与变革从未停止对于安全的挑战。今天,我们又站在一个关键的历史节点:AI大模型的…

【Reality Capture 】02:Reality Capture1.5中文版软件设置与介绍

文章目录 一、如何设置中文二、如何设置界面分区三、如何切换二三维窗口四、工具栏有多个视图选项卡RealityCapture是虚幻引擎旗下一款三维建模软件,跟我们常用的三维建模软件一样,可以从图像或激光扫描中创建实景三维模型和正射影像等产品。可用于建筑、测绘、游戏和视觉特效…

真题卷001——算法备赛

蓝桥杯2024年C/CB组国赛卷 1.合法密码 问题描述 小蓝正在开发自己的OJ网站。他要求用户的密码必须符合一下条件: 长度大于等于8小于等于16必须包含至少一个数字字符和至少一个符号字符 请计算一下字符串,有多少个子串可以当作合法密码。字符串为&am…

17.three官方示例+编辑器+AI快速学习webgl_buffergeometry_lines

本实例主要讲解内容 这个Three.js示例展示了如何使用BufferGeometry创建大量线段,并通过**变形目标(Morph Targets)**实现动态变形效果。通过随机生成的点云数据,结合顶点颜色和变形动画,创建出一个视觉效果丰富的3D线条场景。 核心技术包括…

InfluxDB 2.7 连续查询实战指南:Task 替代方案详解

InfluxDB 2.7 引入了 Task 功能,作为连续查询(CQ)的现代替代方案。本文详细介绍了如何使用 Task 实现传统 CQ 的功能,包括语法解析、示例代码、参数对比以及典型应用场景。通过实际案例和最佳实践,帮助开发者高效迁移并…

Pytorch张量和损失函数

文章目录 张量张量类型张量例子使用概率分布创建张量正态分布创建张量 (torch.normal)正态分布创建张量示例标准正态分布创建张量标准正态分布创建张量示例均匀分布创建张量均匀分布创建张量示例 激活函数常见激活函数 损失函数(Pytorch API)L1范数损失函数均方误差损失函数交叉…

大模型在数据分析领域的研究综述

大模型在业务指标拆解中的应用场景与方法研究 随着人工智能技术的快速发展,大模型(Large Language Models, LLMs)在数据分析领域的应用日益广泛。尤其是在业务指标拆解这一复杂任务中,大模型展现了其独特的价值和潜力。通过对多维…

JAVA:ResponseBodyEmitter 实现异步流式推送的技术指南

1、简述 在许多场景下,我们希望后端能够以流式、实时的方式推送数据给前端,比如消息通知、日志实时展示、进度条更新等。Spring Boot 提供了 ResponseBodyEmitter 机制,可以让我们在 Controller 中异步地推送数据,从而实现实时流式输出。 样例代码:https://gitee.com/lh…

Spring Boot循环依赖的陷阱与解决方案:如何打破“Bean创建死循环”?

引言 在Spring Boot开发中,你是否遇到过这样的错误信息? The dependencies of some of the beans in the application context form a cycle 这表示你的应用出现了循环依赖。尽管Spring框架通过巧妙的机制解决了部分循环依赖问题,但在实际开…

如何阅读、学习 Tcc (Tiny C Compiler) 源代码?如何解析 Tcc 源代码?

阅读和解析 TCC(Tiny C Compiler) 的源代码需要对编译器的基本工作原理和代码结构有一定的了解。以下是分步骤的指南,帮助你更高效地学习和理解 TCC 的源代码: 1. 前置知识准备 C 语言基础:TCC 是用 C 语言编写的&…

Java Set系列集合详解:HashSet、LinkedHashSet、TreeSet底层原理与使用场景

Java Set系列集合详解:HashSet、LinkedHashSet、TreeSet底层原理与使用场景 一、Set系列集合概述 1. 核心特点 无序性:存取顺序不一致(LinkedHashSet除外)。唯一性:元素不重复。无索引:无法通过索引直接访…

解决 CentOS 7 镜像源无法访问的问题

在国内使用 CentOS 系统时,经常会遇到镜像源无法访问或者下载速度慢的问题。尤其是默认的 CentOS 镜像源通常是国外的,如果你的网络环境无法直接访问国外服务器,就会出现无法下载包的情况。本文将介绍如何修改 CentOS 7 的镜像源为国内镜像源…

云计算与大数据进阶 | 26、解锁云架构核心:深度解析可扩展数据库的5大策略与挑战(上)

在云应用/服务的 5 层架构里,数据库服务层稳坐第 4 把交椅,堪称其中的 “硬核担当”。它的复杂程度常常让人望而生畏,不少人都将它视为整个架构中的 “终极挑战”。 不过,也有人觉得可扩展存储系统才是最难啃的 “硬骨头”&#…

Linux——UDP/TCP协议理论

1. UDP协议 1.1 UDP协议格式 系统内的UDP协议结构体: 注1:UDP协议的报头大小是确定的,为8字节 注2:可以通过报头中,UDP长度将UDP协议的报头和有效载荷分离,有效载荷将存储到接收缓冲区中等待上层解析。 注…

考研复习全年规划

25考研以330分成功上岸。 备考期间,我深知学习规划的重要性,为大家精心整理了一份初试备考时间线任务规划,希望能为正在备考的同学们提供参考。如果你对如何规划学习路线仍感迷茫,不妨参考这份时间表,合理分配时间&…

PhpStudy | PhpStudy 环境配置 —— PhpStudy 目录结构 环境变量配置 · Windows 篇

🌟想了解这个工具的其它相关笔记?看看这个:[网安工具] 服务器环境配置工具 —— PhpStudy 使用手册 在前面的章节中,笔者详细介绍了如何在 Windows 和 Linux 系统中安装 PhpStudy,但可能会有崽崽在安装完成后发现依旧…

DDS(数据分发服务) 和 P2P(点对点网络) 的详细对比

1. 核心特性对比 维度 DDS P2P 实时性 微秒级延迟,支持硬实时(如自动驾驶) 毫秒至秒级,依赖网络环境(如文件传输) 架构 去中心化发布/订阅模型,节点自主发现 完全去中心化,节…