学习率调整方法详解

在深度学习训练过程中,学习率(Learning Rate, LR) 是影响模型收敛速度和效果的关键超参数。学习率过大可能导致训练不稳定、震荡甚至无法收敛;学习率过小又会导致收敛过慢甚至陷入局部最优。因此,如何合理调整学习率,是模型优化中的核心问题。常见方法可以分为三类:有序调整、自适应调整、自定义调整


一、有序调整(Scheduled Adjustment)

有序调整指在训练过程中按照预先设定的规律逐步减少学习率,帮助模型更快收敛。

1. Step Decay(阶梯式衰减)

  • 思路:训练到一定 epoch 后,将学习率按比例缩小。

  • 公式:

    • η0:初始学习率

    • γ:衰减因子(通常取 0.1 或 0.5)

    • step:间隔的 epoch 数

  • 特点:学习率呈“阶梯”下降。适合在数据分布平稳、训练较长的任务中使用。

2. Exponential Decay(指数衰减)

  • 思路:学习率随着 epoch 持续按指数缩小。

  • 公式:

    • k 控制衰减速度

  • 特点:下降平滑,但如果衰减过快,可能导致模型过早停止学习。

3. Cosine Annealing(余弦退火)

  • 思路:学习率在训练中呈“余弦曲线”变化,逐步减小但在末尾仍保持一定值。

  • 特点:常用于 SGDR(Stochastic Gradient Descent with Restart),有助于跳出局部最优。


二、自适应调整(Adaptive Adjustment)

自适应方法会根据梯度的历史信息,自动调整不同参数的学习率,减少人工设定难度。

1. Adagrad

  • 思路:为每个参数维护一个累计梯度平方和,根据历史更新情况自动缩小学习率。

  • 优点:适合稀疏特征问题,如 NLP。

  • 缺点:学习率会单调减小,可能过早停止学习。

2. RMSprop

  • 思路:在 Adagrad 基础上,引入 指数加权移动平均,避免学习率衰减过快。

  • 特点:适合非凸优化问题,如 RNN 训练。

3. Adam

  • 思路:结合 Momentum + RMSprop,既考虑一阶动量(梯度均值),又考虑二阶动量(梯度方差)。

  • 优点:收敛快,常作为默认选择。

  • 缺点:可能陷入鞍点或震荡,需要调整 β 参数。

4. AdamW(权重衰减版)

  • 改进 Adam 的 L2 正则化问题,更适合深度网络和 Transformer 模型。


三、自定义调整(Custom Adjustment)

当任务复杂、对收敛要求特殊时,可以设计自定义学习率调整策略。

1. 手动函数定义

  • 通过函数形式动态调整:

    def lr_lambda(epoch):if epoch < 10:return 1.0elif epoch < 50:return 0.1else:return 0.01
    scheduler = torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda)
    

2. 基于性能的调整(Performance-based)

  • 根据验证集的 loss 或 accuracy 动态调整:

    • ReduceLROnPlateau:当指标在若干 epoch 内不再提升,自动降低学习率。

    • 特点:更智能,常用于实际任务。

3. 自定义回调(Callback)

  • 在 Keras、PyTorch Lightning 等框架中,可自定义回调函数,在训练过程中动态控制学习率。

  • 如:损失振荡时降低,损失稳定时保持。

把各种 学习率调整方法的调用方式 全部整理出来,分别给出 PyTorchKeras(TensorFlow) 两种框架的示例。这样可以一目了然,直接套用。


学习率调整调用方式汇总

一、有序调整(Scheduled Adjustment)

1. Step Decay(阶梯衰减)

PyTorch

import torch
import torch.optim as optimoptimizer = optim.SGD(model.parameters(), lr=0.1)
scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=30, gamma=0.1)for epoch in range(100):train(...)scheduler.step()

Keras

from tensorflow.keras.optimizers import SGD
from tensorflow.keras.callbacks import LearningRateSchedulerdef step_decay(epoch):initial_lr = 0.1drop = 0.1epochs_drop = 30return initial_lr * (drop ** (epoch // epochs_drop))optimizer = SGD(learning_rate=0.1)
lr_scheduler = LearningRateScheduler(step_decay)
model.fit(x_train, y_train, epochs=100, callbacks=[lr_scheduler])

2. Exponential Decay(指数衰减)

PyTorch

scheduler = torch.optim.lr_scheduler.ExponentialLR(optimizer, gamma=0.95)for epoch in range(100):train(...)scheduler.step()

Keras

import tensorflow as tfinitial_lr = 0.1
lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay(initial_lr, decay_steps=100, decay_rate=0.96, staircase=True
)optimizer = tf.keras.optimizers.SGD(learning_rate=lr_schedule)
model.compile(optimizer=optimizer, loss="categorical_crossentropy")

3. Cosine Annealing(余弦退火)

PyTorch

scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=50)for epoch in range(100):train(...)scheduler.step()

Keras

import tensorflow as tflr_schedule = tf.keras.optimizers.schedules.CosineDecay(initial_learning_rate=0.1, decay_steps=1000
)optimizer = tf.keras.optimizers.SGD(learning_rate=lr_schedule)
model.compile(optimizer=optimizer, loss="categorical_crossentropy")

二、自适应调整(Adaptive Adjustment)

这些是 优化器自带 的,不需要 scheduler。

PyTorch

import torch.optim as optim# Adagrad
optimizer = optim.Adagrad(model.parameters(), lr=0.01)# RMSprop
optimizer = optim.RMSprop(model.parameters(), lr=0.01)# Adam
optimizer = optim.Adam(model.parameters(), lr=0.001)# AdamW
optimizer = optim.AdamW(model.parameters(), lr=0.001)

Keras

from tensorflow.keras.optimizers import Adagrad, RMSprop, Adamoptimizer = Adagrad(learning_rate=0.01)
optimizer = RMSprop(learning_rate=0.01)
optimizer = Adam(learning_rate=0.001)

三、自定义调整(Custom Adjustment)

1. LambdaLR / 自定义函数

PyTorch

def lr_lambda(epoch):if epoch < 10:return 1.0elif epoch < 50:return 0.1else:return 0.01scheduler = torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda)

Keras

from tensorflow.keras.callbacks import LearningRateSchedulerdef custom_schedule(epoch, lr):if epoch < 10:return lrelif epoch < 50:return lr * 0.1else:return lr * 0.01lr_scheduler = LearningRateScheduler(custom_schedule)
model.fit(x_train, y_train, epochs=100, callbacks=[lr_scheduler])

2. ReduceLROnPlateau(性能驱动)

PyTorch

scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode='min', factor=0.1, patience=5
)for epoch in range(100):val_loss = validate(...)scheduler.step(val_loss)

Keras

from tensorflow.keras.callbacks import ReduceLROnPlateaureduce_lr = ReduceLROnPlateau(monitor='val_loss', factor=0.1, patience=5, min_lr=1e-6
)model.fit(x_train, y_train, epochs=100, validation_data=(x_val, y_val), callbacks=[reduce_lr])

3. Warmup + 余弦退火(常用于大模型训练)

PyTorch (手动实现 Warmup + Cosine)

import mathdef warmup_cosine_lr(epoch, warmup_epochs=10, max_epochs=100, base_lr=0.1):if epoch < warmup_epochs:return epoch / warmup_epochselse:return 0.5 * (1 + math.cos(math.pi * (epoch - warmup_epochs) / (max_epochs - warmup_epochs)))scheduler = torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda=warmup_cosine_lr)

Keras

import tensorflow as tfclass WarmUpCosine(tf.keras.optimizers.schedules.LearningRateSchedule):def __init__(self, initial_lr, warmup_steps, decay_steps):super().__init__()self.initial_lr = initial_lrself.warmup_steps = warmup_stepsself.decay_steps = decay_stepsdef __call__(self, step):warmup_lr = self.initial_lr * (step / self.warmup_steps)cosine_lr = tf.keras.optimizers.schedules.CosineDecay(self.initial_lr, self.decay_steps)(step)return tf.cond(step < self.warmup_steps, lambda: warmup_lr, lambda: cosine_lr)lr_schedule = WarmUpCosine(initial_lr=0.1, warmup_steps=1000, decay_steps=10000)
optimizer = tf.keras.optimizers.Adam(learning_rate=lr_schedule)

✅ 这样你就同时拿到了 PyTorch + Keras 下的所有调用方式,涵盖了:

  • 有序调整(Step, Exponential, Cosine)

  • 自适应调整(Adagrad, RMSprop, Adam, AdamW)

  • 自定义调整(Lambda、自写函数、ReduceLROnPlateau、Warmup+Cosine)


四、方法比较

方法类型优点缺点典型应用
有序调整简单直观,易控制需要预先设定 scheduleCV、NLP 基础训练
自适应调整自动调节参数,无需复杂调参对超参数敏感,可能震荡NLP、RNN、Transformer
自定义调整灵活,适应任务实现复杂,需经验工业级任务、研究实验

五、实践建议

  1. 初学/基线实验:推荐 AdamAdamW,收敛快且稳定。

  2. 大规模训练:结合 Cosine Annealing + Warmup 效果更佳。

  3. 模型表现停滞:使用 ReduceLROnPlateau 动态降低学习率。

  4. 科研/特殊任务:可尝试自定义函数或回调。

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

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

相关文章

Java分页 Element—UI

前端代码 <div class"block"><span class"demonstration">页数较少时的效果</span><el-paginationlayout"prev, pager, next":total"50"></el-pagination> </div>参考Element-UI total:0, form: …

html中列表和表格的使用

列表一般来说只有一列一列的进行使用&#xff0c;是一维的列表分为三种列表形式<!-- 列表标签ul-li:无序列表&#xff0c;必须用 <ul> 当 “容器”&#xff08;代表 “无序列表”&#xff09;&#xff0c;每个条目用 <li> 包起来&#xff08;代表 “列表项”&am…

大学信息查询平台:一个现代化的React教育项目

一 项目简介大学信息查询平台是一个基于React Vite Tailwind CSS构建的现代化Web应用&#xff0c;专门用于查询中国各大高校的详细信息。该项目不仅功能实用&#xff0c;更在用户体验和界面设计上做到了极致。二 核心功能2.1. 智能大学搜索// 搜索功能核心代码 const searchU…

代码随想录算法训练营第六天 - 哈希表2 || 454.四数相加II / 383.赎金信 / 15.三数之和 / 18.四数之和

代码随想录算法训练营第六天 - 哈希表2 || 454.四数相加II / 383.赎金信 / 15.三数之和 / 18.四数之和454.四数相加II解题思路383.赎金信自己解答&#xff1a;代码随想录讲解暴力做法哈希表15.三数之和双指针优化改进18.四数之和自己的解答系统讲解454.四数相加II 文档讲解&…

FPGA实现流水式排序算法

该算法采用双调排序算法&#xff0c;是一种可流水的递推算法&#xff0c;且算法的消耗时长可算&#xff0c;具体细节参考视频&#xff1a; https://www.bilibili.com/video/BV1S3thzWEnh/?spm_id_from333.1387.homepage.video_card.click&vd_source69fb997b62efa60ae1add…

平衡车 -- MPU6050

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 传感器原理 此外&#xff0c;用陀螺仪获取x,y,z轴的加速度。 初始化 我们现在对MPU6050进行初始化&#xff0c;MPU6050通过I2C总线与单片机进行通信&#xff0c;通过的是PB8和PB…

在电路浪涌测试中,TVS(瞬态电压抑制二极管)的防护效果确实会受到陪测设备中去耦网络(Decoupling Network,DN)的显著影响

在电路浪涌测试中&#xff0c;TVS&#xff08;瞬态电压抑制二极管&#xff09;的防护效果确实会受到陪测设备中去耦网络&#xff08;Decoupling Network&#xff0c;DN&#xff09;的显著影响&#xff0c;这一现象与浪涌能量的传递路径、阻抗匹配及信号完整性密切相关。结合 AD…

Redis之分布式锁与缓存设计

1、分布式锁 1.1、超卖问题/*** 存在库存超卖的不安全问题*/private void deductStock() {int stockTotal Integer.parseInt(stringRedisTemplate.opsForValue().get("stock"));if (stockTotal > 0) { // 这里存在多个线程、进程同时判断通过&#xff0c;然后超买…

静态住宅IP的特点

稳定性高&#xff1a;与动态IP地址相比&#xff0c;静态住宅IP不会不定时变更&#xff0c;能确保业务在网络环境中的一致性和连贯性&#xff0c;适合需要长期维持同一身份的场景&#xff0c;如跨境电商业务等3。安全性强&#xff1a;由于其住宅属性&#xff0c;看起来更像是正常…

Linux 编译 Android 版 QGroundControl 软件并运行到手机上

Linux 编译 Android 版 QGroundControl 软件并运行到手机上环境说明操作步骤一、参考上一篇文章在电脑端把环境搭建好二、配置 Qt Creator 的 Android 环境环境说明 电脑系统 Ubuntu 22.04 qgroundcontrol master 分支 Qt 6.8.3 操作步骤 一、参考上一篇文章在电脑端把环境搭…

Python 2025:量化金融与智能交易的新纪元

当Python遇见金融大数据&#xff0c;算法交易正迎来前所未有的技术变革在2025年的技术浪潮中&#xff0c;Python已经从一个"胶水语言"蜕变为金融科技领域的核心驱动力。根据GitHub 2025年度报告&#xff0c;Python在量化金融项目中的使用率增长了217%&#xff0c;在对…

[论文阅读] 人工智能 + 软件工程 | TDD痛点破解:LLM自动生成测试骨架靠谱吗?静态分析+专家评审给出答案

TDD痛点破解&#xff1a;LLM自动生成测试骨架靠谱吗&#xff1f;静态分析专家评审给出答案 论文信息项目详情论文原标题Evaluation of Large Language Models for Generating RSpec Test Skeletons in Ruby on Rails论文链接https://arxiv.org/pdf/2509.04644一段话总结 该研究…

开源PSS解析器1

本章介绍另一个开源PSS解析工具zuspec&#xff1a; zuspec 提供了一组用于处理 actions relationship level 的工具 &#xff08;ARL&#xff09; 模型&#xff0c;主要是使用 Accellera 便携式测试和刺激 &#xff08;PSS&#xff09; 语言描述的模型。ARL 模型用于为数字设计…

26考研——内存管理_内存管理策略(3)

408答疑 文章目录一、内存管理策略1、内存管理的基本原理和要求1.1、相关概念1.2、逻辑地址与物理地址1.3、程序的链接与装入1.4、进程的内存映像1.5、内存保护1.6、内存共享1.7、内存分配与回收1.8、在存储管理中涉及到两个问题2、连续分配管理方式2.1、相关概念2.2、单一连续…

Python爬虫实战:研究Event Handling机制,构建在线教育平台的课程数据采集和分析系统

1. 引言 1.1 研究背景与意义 在大数据时代,互联网作为全球最大的信息载体,蕴含着海量有价值的数据。这些数据涵盖了商业交易、用户行为、社会趋势等多个领域,对企业决策、学术研究和社会管理具有重要参考价值。如何高效、准确地获取这些数据并进行深度分析,成为当前数据科…

docker 安装 redis 并设置 volumes 并修改 修改密码(四)

设置新密码: 127.0.0.1:6379> CONFIG SET requirepass newpassword OK验证新密码: 127.0.0.1:6379> AUTH newpassword OK更新配置文件: 编辑主机的配置文件/data/redis/conf/redis.conf,将requirepass的值修改为新密码: requirepass newpassword重启容器以使配置…

NBA球星知识大挑战:基于 PyQt5 的球星认识小游戏

NBA球星知识大挑战&#xff1a;基于 PyQt5 的球星认识小游戏 代码详见&#xff1a;https://github.com/xiaozhou-alt/NBA_Players_Recognition 文章目录 NBA球星知识大挑战&#xff1a;基于 PyQt5 的球星认识小游戏一、项目介绍二、文件夹结构三、项目实现1. 自定义动画按钮&a…

电磁波成像(X射线、CT成像)原理简介

电磁波成像&#xff08;X射线、CT成像&#xff09;原理简介一、图像形成的一般形式二、可见光成像2.1可见光2.2可见光成像三、其他电磁波成像3.1X射线成像3.2CT成像3.2.1CT成像原理3.2.2CT成像与X射线成像对比3.2.3CT生成三维描述3.3PET成像一、图像形成的一般形式 大多数图像…

k8s部署2:前置条件:docker部署

前两天发布了k8s的前置发布条件,对于防火墙的处理,我看大家反响还不错,所以作为先行者,我感觉自己多了不少动力,所以今天来说说k8s部署前置条件中docker部分的部署。在此先感谢一下那些点赞和添加收藏的朋友们,你们的支持是我永远的动力!三克油喂给马吃! 之前写过docke…

某开源漫画系统RCE代码审计

免责声明 本文档所述漏洞详情及复现方法仅限用于合法授权的安全研究和学术教育用途。任何个人或组织不得利用本文内容从事未经许可的渗透测试、网络攻击或其他违法行为。使用者应确保其行为符合相关法律法规&#xff0c;并取得目标系统的明确授权。 对于因不当使用本文信息而造…