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

【深度学习笔记 Ⅱ】11 学习率衰减

深度学习中的学习率衰减策略

学习率衰减(Learning Rate Decay)是优化深度学习模型的重要技术,它通过在训练过程中逐渐降低学习率来提高模型性能。以下是学习率衰减的全面解析:

1. 为什么需要学习率衰减?

  • 初期阶段:较大的学习率有助于快速收敛
  • 后期阶段:较小的学习率有助于精细调参,找到更优解
  • 避免震荡:防止在最优解附近来回震荡
  • 提高精度:最终能更精确地接近最优解

2. 常见学习率衰减方法

2.1 时间衰减(Time-Based Decay)

公式

η_t = η_0 / (1 + decay_rate * t)

其中:

  • η_t:当前学习率
  • η_0:初始学习率
  • decay_rate:衰减率
  • t:当前epoch或step

PyTorch实现

optimizer = torch.optim.SGD(model.parameters(), lr=0.1)
scheduler = torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda=lambda t: 1/(1 + 0.1*t)

2.2 指数衰减(Exponential Decay)

公式

η_t = η_0 * decay_rate^t

PyTorch实现

scheduler = torch.optim.lr_scheduler.ExponentialLR(optimizer, gamma=0.95)  # decay_rate

2.3 阶梯衰减(Step Decay)

公式

每N个epoch学习率减半

PyTorch实现

scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=30,  # 每30个epochgamma=0.5)    # 衰减为原来的0.5倍

2.4 余弦退火(Cosine Annealing)

公式

η_t = η_min + 0.5*(η_max-η_min)*(1+cos(t/T*π))

PyTorch实现

scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=100)  # 周期

2.5 带重启的余弦退火(Cosine Annealing with Warm Restarts)

PyTorch实现

scheduler = torch.optim.lr_scheduler.CosineAnnealingWarmRestarts(optimizer,T_0=50,     # 第一个周期长度T_mult=2)   # 后续周期倍增因子

2.6 ReduceLROnPlateau(基于指标衰减)

特点:当验证指标停止改善时降低学习率

PyTorch实现

scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer,mode='min',     # 监控指标模式(min/max)factor=0.1,     # 衰减因子patience=10,    # 等待epoch数verbose=True)   # 打印信息# 使用时需要在每个epoch后:
val_loss = ...
scheduler.step(val_loss)

3. 学习率衰减实现对比

方法优点缺点适用场景
时间衰减简单直接可能过早衰减简单任务
指数衰减衰减速度快需要调衰减率初期快速收敛
阶梯衰减明确可控非平滑变化分阶段训练
余弦退火平滑变化计算稍复杂精细调参
带重启余弦跳出局部最优超参较多复杂优化场景
ReduceLROnPlateau自适应依赖验证集实际应用

4. 学习率衰减最佳实践

  1. 初始学习率选择

    • 先用较大学习率(如0.1)测试
    • 观察损失曲线调整
  2. 衰减时机

    • 当验证损失停滞时开始衰减
    • 或预先设定衰减计划
  3. 组合策略

    # 前10个epoch用warmup
    warmup_scheduler = torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda=lambda epoch: epoch/10)# 之后用余弦退火
    main_scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=90)
    
  4. 监控与可视化

    # 记录学习率变化
    lr_history = []
    for epoch in range(epochs):lr_history.append(optimizer.param_groups[0]['lr'])# ...训练步骤...scheduler.step()
    
  5. 与优化器配合

    • Adam等自适应方法通常需要较小的衰减率
    • SGD通常需要更积极的学习率衰减

5. 学习率衰减的数学原理

学习率衰减的理论基础来自优化理论中的学习率条件:

∑η_t = ∞ 且 ∑η_t² < ∞

这意味着:

  1. 学习率足够大、持续足够长时间以保证收敛
  2. 学习率最终足够小以保证稳定

6. 现代深度学习中的学习率调度

  1. One-Cycle策略

    • 先升高再降低学习率
    • 结合动量变化
  2. Super-Convergence

    • 使用非常大的学习率
    • 配合特殊正则化
  3. 自适应方法

    • 如Adam等算法内置自适应学习率
    • 但仍可配合适度的衰减

学习率衰减是深度学习调参的关键技术之一,合理的学习率调度可以显著提高模型性能。在实际应用中,需要根据具体任务和模型结构选择合适的衰减策略。

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

相关文章:

  • I2S音频的时钟
  • 第11天 |openGauss逻辑结构:数据库管理
  • 音视频学习(四十二):H264帧间压缩技术
  • CCLink IE转ModbusTCP网关与三菱PLC通讯无纸记录器
  • 大腾智能国产3D CAD软件正式上架华为云云商店
  • OR条件拆分:避免索引失效的查询重构技巧
  • Kafka 如何优雅实现 Varint 和 ZigZag 编码
  • 代码随想录算法训练营第二十七天
  • LLMs之Grok系列:Grok-4的简介、安装和使用方法、案例应用之详细攻略
  • Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现打架检测(C#代码,UI界面版)
  • Go-通俗易懂垃圾回收及运行过程
  • 每日面试题11:JVM
  • Ubuntu 22.04 安装 Jdk 8和 Tomcat (安装包形式)
  • Three.js 从零入门:构建你的第一个 Web 3D 世界
  • 破除扫描边界Photoneo MotionCam-3D Color 解锁动态世界新维度
  • 计算机网络第四章(3)——网络层《IPV4(子网划分、子网掩码)》
  • datasophon下dolphinscheduler执行脚本出错
  • 突破密度瓶颈:PCIe 8xCAN 多通道接口技术解析
  • react 录音功能
  • ODB安装与使用
  • 部署zabbix企业级分布式监控
  • 智慧场景:定制开发开源AI智能名片S2B2C商城小程序赋能零售新体验
  • SLAM实战——13章代码学习及回环检测的补充
  • STM32-第九节-ADC模数转换
  • ❗量化模型构建回测框架
  • 【2025/07/21】GitHub 今日热门项目
  • 【HTTP缓存机制深度解析:从ETag到实践策略】
  • C# Lambdab表达式 Var 类
  • 如何防止QQ浏览器录屏,盗录视频资源?
  • Apache Ignite Binary Object 调优