6-学习率如何选择

发布于 2025-03-29  91 次阅读


“选学习率就像谈恋爱——太激进(lr过大)会吓跑对方(模型发散),太保守(lr过小)又永远等不到承诺(收敛)。”

一、什么是学习率?

如果把训练模型比作“下山找路”,学习率就是每一步迈的步子大小

  • 步子太大(学习率过高):可能一步跨过最低点,在山谷两侧反复横跳,始终找不到最优解。
  • 步子太小(学习率过低):半天走不了一步,训练时间变得很长,甚至卡在半山腰。

二、选择学习率的3个关键因素

1. 你的数据量有多大?

  • 数据量小(比如几百张图片):用较小的学习率(例如0.001),避免“一步走过头”
  • 数据量大(比如百万级数据):可以尝试稍大的学习率(例如0.01)

2. 模型复杂吗?

  • 简单模型(比如3层神经网络):适合较大的学习率(0.01~0.1)
  • 复杂模型(比如ResNet、Transformer):建议较小的学习率(0.0001~0.001)

3. 用什么优化器?

  • Adam:通常直接用默认值0.001就能工作
  • SGD:需要手动调参,常设置在0.01~0.1之间

二、最简单的设置方法

第一步:先试“万能值”

  • 3e-4(即0.0003)是科研论文中常见的默认值,适合大多数场景
  • 0.001 是Adam优化器的安全选择

第二步:观察训练曲线

  • 如果loss剧烈震荡 → 学习率太大,除以3再试
  • 如果loss下降缓慢 → 学习率太小,乘以3再试

第三步:使用自动探测工具

工具名称框架支持主要特点适合场景
torch-lr-finderPyTorch轻量级、快速探测研究/小规模训练
PyTorch LightningPyTorch框架集成、自动化生产环境/大型项目
Keras 内置TensorFlow无需安装、简单易用快速原型开发
fast.ai独立框架教学友好、可视化优秀教育/快速实验
Hyperopt跨框架多参数联合优化复杂超参数调优

三、高手都在用的3个技巧

1. 预热(Warmup)

  • 前500步让学习率从0线性增长到目标值
  • 尤其对Transformer等模型有效,能减少初期震荡

2. 动态衰减

  • 每训练10轮,学习率减半(阶梯式)
  • 或用余弦退火:像波浪一样周期性调整(适合长期训练)

3. 分阶段设置

  • 卷积层:用较小的学习率(例如0.001)
  • 全连接层:用较大的学习率(例如0.01)

四、常见问题解答

Q1:学习率设错会怎样?

  • 太大:loss出现NaN(直接报错),或震荡不收敛
  • 太小:训练一晚上loss几乎没变化

Q2:有没有不用调参的方法?

  • 自适应优化器(如Adam、RMSProp)比SGD更省心
  • 试试自动学习率调整工具(Keras的ReduceLROnPlateau、PyTorch的lr_finder

Q3:学习率是不是越小越好?

答:不是!小学习率容易被困在局部最优点(就像卡在小土坑里),适当调大反而可能找到更优解。

一句话总结

从0.001开始试,loss震荡就调小,loss不动就调大,复杂模型记得加预热!
记住:深度学习是实验科学,多跑几组对比实验,比理论计算更有效!