“选学习率就像谈恋爱——太激进(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-finder | PyTorch | 轻量级、快速探测 | 研究/小规模训练 |
PyTorch Lightning | PyTorch | 框架集成、自动化 | 生产环境/大型项目 |
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不动就调大,复杂模型记得加预热!
记住:深度学习是实验科学,多跑几组对比实验,比理论计算更有效!
Comments NOTHING