当前位置: 首页 > news >正文

深度学习篇---优化器

在 PyTorch 中,优化器(Optimizer)是模型训练的 “指挥官”,负责根据损失函数计算的梯度(“误差方向”)调整模型参数,最终让模型预测越来越准确。不同优化器有不同的 “调整策略”,适合不同的任务和场景。

一、基础优化器:SGD 及其变种

1. 随机梯度下降(SGD)
  • 原理:最基础的优化器,核心思想是 “沿着梯度反方向小步调整参数”。每次用一个样本(或一小批样本)计算梯度,然后更新参数:
    新参数 = 旧参数 - 学习率 × 梯度
    (学习率:每步调整的 “步长”,比如 0.01)

  • 特点

    • 优点:简单直观,内存占用小,适合大规模数据。
    • 缺点:收敛速度慢,容易在 “陡峭区域” 震荡(比如损失函数曲面像波浪,SGD 会在波浪上跳来跳去),可能陷入局部最优。
  • 应用场景
    数据量极大、对内存敏感的场景,或作为基础优化器验证模型可行性。
    例:训练大规模图像分类模型(如 ResNet 在 ImageNet 上)、推荐系统的基础模型。

2. SGD + 动量(Momentum)
  • 原理:借鉴物理中的 “动量” 概念,让参数更新不仅考虑当前梯度,还保留之前的 “运动趋势”。就像推箱子,一旦动起来就有惯性,不容易停下来。
    比如之前一直向左调整,即使某次梯度向右,也会先慢慢减速,而不是立刻反向。

  • 特点

    • 优点:加速收敛,减少震荡,更容易跳出局部最优。
    • 缺点:需要额外调整 “动量系数”(通常设 0.9)。
  • 应用场景
    几乎所有 SGD 适用的场景,尤其适合损失函数曲面较复杂(有很多局部最优)的任务。
    例:训练 CNN(卷积神经网络)处理图像、RNN(循环神经网络)处理文本序列。

3. Nesterov 动量(Nesterov Accelerated Gradient, NAG)
  • 原理:在动量基础上 “往前看一步”。先根据之前的动量 “预判” 一个位置,再在这个位置计算梯度,最后调整参数。相当于 “提前减速”,避免冲过头。

  • 特点:比普通动量收敛更快,对 “复杂曲面” 的适应性更好。

  • 应用场景
    对收敛速度要求较高的任务,尤其是深度学习中的复杂模型。
    例:训练生成对抗网络(GAN)、复杂的语义分割模型。

二、自适应学习率优化器

普通 SGD 的学习率是固定的,而 “自适应学习率” 优化器会根据参数的梯度特点自动调整步长:梯度大的参数(学习快的)步长小,梯度小的参数(学习慢的)步长大。

1. 自适应梯度调整(AdaGrad)
  • 原理:记录每个参数的 “历史梯度平方和”,然后用学习率除以这个总和的平方根。相当于:某个参数之前的梯度一直很大(比如频繁更新的权重),之后就减小它的步长;反之则增大步长。

  • 特点

    • 优点:适合稀疏数据(大部分参数梯度为 0,少数非 0),自动给重要参数更大学习率。
    • 缺点:历史梯度平方和会越来越大,导致学习率逐渐趋近于 0,后期可能停止更新。
  • 应用场景
    处理稀疏数据的任务。
    例:自然语言处理(文本中大部分词出现频率低,是稀疏的)、推荐系统(用户 - 物品交互矩阵稀疏)。

2. 动量版 AdaGrad(RMSprop)
  • 原理:解决 AdaGrad 学习率衰减过快的问题。不记录所有历史梯度,而是用 “指数移动平均”(类似滑动窗口)保留最近的梯度信息,避免总和过大。

  • 特点

    • 优点:学习率衰减更合理,收敛更稳定,是 AdaGrad 的改进版。
    • 缺点:需要调整 “衰减系数”(通常设 0.9)。
  • 应用场景
    替代 AdaGrad 的大多数场景,尤其适合需要稳定收敛的任务。
    例:语音识别模型(音频特征梯度变化快)、LSTM(长短期记忆网络,处理长序列)。

3. 自适应矩估计(Adam)
  • 原理:结合了 “动量” 和 “RMSprop” 的优点:

    • 用动量保留梯度的 “方向趋势”;
    • 用 RMSprop 的方式自适应调整每个参数的学习率。
  • 特点

    • 优点:收敛速度快,稳定性好,对超参数(学习率等)不敏感,“开箱即用” 效果好。
    • 缺点:在某些任务(如生成模型)中可能收敛到局部最优,而非全局最优。
  • 应用场景
    深度学习中最常用的优化器之一,几乎适用于所有场景,尤其是快速迭代的研究和开发。
    例:Transformer 模型(BERT、GPT 等)、目标检测(YOLO、Faster R-CNN)、图像生成(StyleGAN)。

4. Adam 的变种(AdamW)
  • 原理:在 Adam 基础上改进了 “权重衰减”(L2 正则化)的实现方式,让正则化效果更稳定。普通 Adam 的权重衰减会和梯度更新耦合,AdamW 将两者分离,更符合正则化的数学定义。

  • 特点:比 Adam 的泛化能力更好(模型在新数据上表现更稳定)。

  • 应用场景
    对模型泛化能力要求高的任务,尤其是需要大量正则化的场景。
    例:训练大规模预训练模型(如 BERT、LLaMA)、小样本学习(数据少,易过拟合)。

三、其他特殊优化器

1. 学习率调度优化器(如 RAdam、Lookahead)
  • RAdam:解决 Adam 在训练初期(样本少)梯度估计不准的问题,让前期收敛更稳定。

  • Lookahead:作为 “优化器的优化器”,先让一个基础优化器(如 Adam)快速探索,再慢慢调整到更优的参数,适合需要高精度的任务。

  • 应用场景
    对收敛稳定性要求极高的场景,如学术研究中的高精度模型训练。

2. 低资源优化器(如 Adadelta)
  • 原理:完全去掉学习率参数,通过历史梯度自动计算步长,适合不知道如何设置学习率的场景。

  • 应用场景
    资源有限、调参成本高的任务,如嵌入式设备上的小型模型。

总结:如何选择优化器?

  1. 新手首选:Adam 或 AdamW,适用性广,调参简单,适合 90% 以上的场景(分类、检测、NLP 等)。
  2. 追求极致性能
    • 数据稀疏(文本、推荐):RMSprop 或 AdaGrad;
    • 复杂曲面(GAN、分割):Nesterov 动量或 Adam;
    • 大规模数据:SGD + 动量(内存效率高)。
  3. 特殊需求
    • 泛化能力:AdamW;
    • 低资源:Adadelta;
    • 学术研究:RAdam、Lookahead。

简单说,优化器就像 “调参的方向盘”,Adam 是 “自动挡”(省心),SGD 是 “手动挡”(灵活但需要更多技巧),根据任务选对 “车型”,模型才能跑得又快又稳!

http://www.dtcms.com/a/301270.html

相关文章:

  • 上位机知识篇---Tailwind CSS
  • Linux内核设计与实现 - 第15章 进程地址空间
  • python-列表推导式,迭代器和生成器,上下文管理器
  • Unity3D 平台宏定义
  • 双指针算法技巧
  • CCF-GESP 等级考试 2025年6月认证C++七级真题解析
  • PyQt5图形和特效(Qss的UI美化)
  • zabbix-agent静默安装
  • MinIO 用户管理与权限控制详解
  • LINUX727 磁盘管理回顾1;配置文件回顾
  • 数据类型处理流讲解
  • 《中国棒球》cba外援规则·棒球1号位
  • Java排序中(a).compareTo(b)与Integer.compare(a, b)区别
  • Java学习-------外观模式
  • incus套件在 主力 Linux Distros 上的安装配置与基本使用
  • 【NLP实践】三、LLM搭建中文知识库:提供RestfulAPI服务
  • LeetCode第349题_两个数组的交集
  • python 阿里云 安装 dashscope的简介、安装
  • c语言结构体字节对齐
  • github上传本地项目过程记录
  • Spring经典“送命题”:BeanFactory vs FactoryBean
  • Flutter中实现页面跳转功能
  • vulhub-red靶机攻略
  • 深度学习计算(深度学习-李沐-学习笔记)
  • IKAnalyzer分词插件使用方法
  • 第十八章:AI的“通感”:揭秘图、文、音的共同语言——CLIP模型
  • 图像智能识别(一)-Python方向
  • 嵌入式学习日志————对射式红外传感器计次
  • 「iOS」————ARC
  • MyBatis-Plus 条件构造器(Wrapper)全解析