一、极简概念
学习率 = 模型每次 "改错" 时,迈出去的步子大小
- 梯度:告诉你往哪个方向改能让模型更准
- 学习率:告诉你每次改多少、迈多大步
它是深度学习最重要的超参数之一,必须手动设置,不是模型自己学出来的。
二、它到底有什么用?(核心作用)
- 控制模型参数更新的幅度 模型每训练一步,权重、偏置会根据梯度调整,学习率决定调整幅度大小。
- 决定模型训练的快慢步子大→学得快;步子小→学得慢。
- 决定模型能不能学到正确结果步子不合适,模型要么永远学不会,要么直接学 "废"。
- 避免出现 NaN、梯度爆炸 学习率乱设是训练出
nan最常见的原因之一。
三、生活化比喻(秒懂)
把训练模型 比作下山找谷底:
- 谷底 = 损失最小、模型最准的地方
- 你现在的位置 = 当前模型参数
- 梯度 = 下坡的方向
- 学习率 = 你每一步迈多大
三种情况:
- 学习率太大(步子迈太大) 直接跨过谷底,在山坡上反复横跳,甚至冲到更高的地方→ 模型不收敛、损失震荡、出现
nan、完全学不会 - **学习率太小(步子像蚂蚁爬)**走了很久还在半山腰,训练几百轮都没到谷底→ 收敛极慢、浪费 GPU 算力、训练效率极低
- 学习率刚刚好稳步下坡,快速走到谷底→ 损失快速下降,模型快速收敛,预测精准
四、三种学习率的实际后果(结合你的课题)
你的场景:用 UNet 训练 SH 波信号,拾取混凝土裂缝首波到达时间
1. 学习率过大(比如 1e-1、0.1)
- 模型参数疯狂乱改
- 损失直接飙升、出现
nan - UNet 预测的首波时间完全错乱
- 裂缝深度计算结果全错
2. 学习率过小(比如 1e-6)
- 训练 100 轮损失几乎不动
- RTX4070 跑半天,模型跟没训练一样
- 首波拾取精度毫无提升
- 纯浪费时间和算力
3. 合适的学习率(你的课题推荐:1e-4 ~ 5e-4)
- 损失稳步下降
- 模型快速学会 SH 波信号特征
- 首波拾取精度越来越高
- 训练速度快,效果好
五、结合你之前的代码看
python
运行
lr = 0.03 # 学习率
这就是线性回归模型的步长:
- 每次梯度下降,参数就往正确方向走
0.03这么大的一步 - 如果改成
lr=1,模型直接飞了;改成lr=0.0001,要训练很久才收敛
六、终极一句话总结
- 学习率 = 模型改错的步长
- 梯度管方向,学习率管大小
- 太大:模型震荡、学废、出 NaN
- 太小:训练极慢、收敛不了
- 合适:模型快速学好,精准预测