面试官:你在训模型的时候经常使用的学习率策略有哪些?

推荐直接网站在线阅读:aicoting.cn

所有相关文档、源码示例、流程图与面试八股,我也将持续更新在AIHub,欢迎关注收藏!

学习率策略

在训练神经网络时,学习率(Learning Rate, LR) 是最关键的超参数之一。学习率控制了每次参数更新的步子大小,学习率太大,可能导致震荡甚至发散,模型根本学不下去;学习率太小,训练过程会非常慢,还可能卡在局部最优点。

为了在不同阶段取得更好的训练效果,人们设计了各种 学习率调度策略(Learning Rate Scheduling),它们的目标是让学习率在训练过程中动态变化,而不是固定不变。

固定学习率

最简单的方式就是设置一个固定的学习率。固定学习率实现简单,不需要额外的调度逻辑。但是在复杂模型训练中往往效果不好,因为模型在训练初期需要更快收敛,而在后期需要更稳的更新。

Step Decay

  • :第 t 次迭代的学习率
  • :初始学习率
  • :衰减因子(如 0.1)
  • :衰减步长

Step Decay 在训练到一定阶段后,将学习率整体降低一个档次。虽然简单粗暴,但在图像分类等任务中依旧常见。

代码示例:

ini 复制代码
scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=30, gamma=0.1)

学习率变化曲线是阶梯状的,看起来像台阶。 优点是简单易用,缺点是变化太生硬,有时候不够平滑。

优点是简单易用,缺点是变化太生硬,有时候不够平滑。

指数衰减

相比 StepLR,指数衰减更加平滑。

公式:

代码示例:

ini 复制代码
scheduler = torch.optim.lr_scheduler.ExponentialLR(optimizer, gamma=0.95)

每个 epoch 学习率都会乘上一个常数系数(比如 0.95),逐步下降。

常用于中小规模训练任务,稳定但缺乏灵活性。

多步衰减

有时候你希望学习率只在特定几个时间点下降,而不是固定周期。

比如:

ini 复制代码
scheduler = torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones=[60, 120, 160], gamma=0.2)

意思是当训练到第 60、120、160 轮时,学习率衰减为原来的 0.2。

这种方式常见于图像分类任务(如 ResNet 论文原设)。

Warm-up(预热策略)

Warm-up 的思想是不要一开始就用很大的学习率,而是从小学习率慢慢升上去。

原因是在训练初期,参数随机初始化,梯度方向可能非常不稳定,如果学习率过大,很容易发散。方法就是前几轮训练让学习率线性增加,达到设定的峰值,再切换到正常调度策略。Warm-up 几乎是 Transformer、大模型训练的标配,因为它能极大地缓解训练初期的不稳定。

常见组合:

  • Warmup + Cosine Decay

  • Warmup + Linear Decay

  • Warmup + Exponential Decay 示例(以 HuggingFace 为例):

ini 复制代码
from transformers import get_cosine_schedule_with_warmup

scheduler = get_cosine_schedule_with_warmup(
    optimizer,
    num_warmup_steps=1000,
    num_training_steps=10000
)

这种方式几乎成为 Transformer 时代的默认配置。

Cosine Annealing

  • :最大学习率
  • :最小学习率
  • :当前迭代数
  • :总迭代数

Cosine Annealing 会让学习率按照余弦函数曲线逐渐下降,更新越来越小,更利于模型在训练后期收敛到更优的点。有时还会配合 重启机制(Cosine Annealing with Restarts, SGDR) 使用,让学习率周期性恢复,从而跳出局部最优。

代码示例:

ini 复制代码
scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=50)

如果结合 Warm Restarts(周期性重启),可以让学习率周期性上升再下降,从而跳出局部最优。

OneCycle Policy

OneCycle 是近年来非常流行的一种学习率策略。它的核心思想是前半程学习率从一个较小值线性升高到最大学习率;后半程学习率再逐渐下降到比初始值还小的水平。 同时,OneCycle 还会配合动量调整,学习率高时动量低,学习率低时动量高。

代码示例:

ini 复制代码
scheduler = torch.optim.lr_scheduler.OneCycleLR(
    optimizer, 
    max_lr=0.1, 
    total_steps=1000
)

OneCycle 可以让模型在训练过程中更快收敛,并且往往提升泛化性能。PyTorch 已经内置了这个调度器,很多人把它作为默认选择。

现在你想一下优化器和学习率策略有什么关系,是不是优化器决定了怎么走,学习率策略决定了走多快、何时加速、何时刹车。合理的学习率调度,往往比盲目调大模型、更换优化器带来的提升还要显著。

📚推荐阅读

面试官:深度学习中经典的优化算法都有哪些?

一文搞懂深度学习中的通用逼近定理!

一文搞懂深度学习中的表征学习理论!

一文搞懂深度学习中的信息论!

一文搞懂深度学习的反向传播与优化理论!

一文搞懂深度学习中的张量与自动微分!

一文彻底搞懂深度学习和机器学习的区别!

最新的文章都在公众号aicoting更新,别忘记关注哦!!!

作者:aicoting

分享是一种信仰,连接让成长更有温度。

我们下次不见不散!

相关推荐
卷福同学4 小时前
不用服务器,不用配环境,我10分钟上线了一个AI Agent
人工智能·后端·算法
码兄科技5 小时前
Java AI智能体开发实战:从零构建智能对话系统指南
java·开发语言·人工智能
Zik----5 小时前
CCswitch-code
人工智能
AI科技星6 小时前
全域谱分析:无穷维超复数信息场分形统一场论 ——自然、量子、金融多重分形第一性原理完整体系(中英双语终稿)
人工智能·机器学习·金融·乖乖数学·全域数学
stormzhangV7 小时前
为什么你的 AI 像智障
人工智能
ai产品老杨7 小时前
H264 H265视频分析常见问题和排查清单
人工智能·算法·音视频
项目经理老王7 小时前
OpenClaw无捆绑安装包,安全纯净版AI助手部署
人工智能·安全
梦帮科技8 小时前
GRAVIS v4.0:基于Web的极速套利架构设计与实时数据流实现
前端·人工智能·rust·自动化·区块链·智能合约·数字货币
“码”力全开8 小时前
AI视频分析API性能优化指南
人工智能·性能优化·音视频
liuyicenysabel8 小时前
大模型学习笔记 · 第八篇 · 进阶:偏好对齐与多卡训练
人工智能·笔记·学习