3、学习率与调度
本节先掌握: 学习率控制更新步长,调大不等于学得更好。预热和衰减先看懂变化方向,首次训练沿用课程设置。
批次和轮次决定了“多久更新一次、总共更新多少次”。学习率则影响“每次更新走多大一步”。
3.1 学习率设置
把学习率调大,是否就能更快学好关键词抽取? 学习率控制每次更新的步长。步子太小,有限轮数内变化可能不足;步子太大,也可能使训练不稳定。它不是“学习速度”或“掌握知识量”的直接刻度。
训练页中的“学习率”对应配置字段 learning_rate。课程取值是 5e-5,在 YAML 中写作 learning_rate: 5.0e-5,两种写法表示同一个数:
5e-5 = 5 × 10⁻⁵ = 0.00005这里的 e-5 是科学计数法的写法,用来简短地表示这样的小数。数值虽小,是否适合当前训练,仍要结合模型、数据和优化器判断。
| 学习率情况 | 可能发生什么 |
|---|---|
| 过大 | 参数更新过猛,Loss 可能剧烈波动,甚至越训越差 |
| 过小 | 参数变化缓慢,在有限轮数内可能还没有学到任务规律 |
| 合适 | 在当前设置下,训练较稳定,验证表现也有改善 |
把这个含义用到课程设置上:若从原模型重新开始训练,保持其他设置一致,将 5e-5 改为 1e-4,设定的学习率就从 0.00005 提高到 0.0001,变成原来的 2 倍。它会让优化器按更大的学习率更新;经过多步后,梯度和参数也会不同,不能推断损失下降或学习速度恰好翻倍。
怎样判断是否值得改? 先确认样本、答案标签和 Adapter 加载都正确。如果在多个记录区间内,训练与验证损失改善都很慢,可以把较大学习率作为待比较的假设;如果训练反复出现大幅波动,可以比较较小学习率。某一条 Loss 上升只值得继续观察,还不足以决定改值。
比较时,先从日志确认实际学习率按新设置变化,再看相同训练进度下的损失趋势和同一批验证输入的回答。若数字降得更快,漏词或格式错误却更多,就不能只凭下降速度保留新配置。
</details> <details> <summary>进阶选读:只改学习率,手算一次更新幅度</summary>回到第 1.2 节那个参数:原值为 0.30,梯度为 0.20。暂时保持二者不变,只换学习率,按同一条简单梯度下降规则计算:
| 学习率 | 本次减去的数值 | 更新后的参数 |
|---|---|---|
0.10 | 0.10 × 0.20 = 0.02 | 0.30 - 0.02 = 0.28 |
0.01 | 0.01 × 0.20 = 0.002 | 0.30 - 0.002 = 0.298 |
学习率缩小到十分之一,这个算例中的更新幅度也缩小到十分之一。它控制的是“朝这个方向走多大一步”,不是“这次学会了多少知识”。上表继续使用教学数字和简单规则;实际 AdamW 的更新还涉及梯度历史,不能直接套用表中结果。
</details>3.2 学习率预热与衰减
如果学习率填的是一个固定数字,为什么日志中的数字还会变化?因为还配置了学习率调度器(scheduler),让学习率随训练进度变化。
界面中的“学习率调节器”就是选择调度规则的地方;展开“其它参数设置”还能找到预热步数。这三项配合使用:
| 界面名称 | 配置写法 | 作用 |
|---|---|---|
| 学习率 | learning_rate: 5.0e-5 | 本例预热结束时达到的学习率 |
| 学习率调节器 | lr_scheduler_type: cosine | 预热后按余弦曲线逐渐降低 |
| 预热步数 | warmup_steps: 5 | 开始的 5 个更新步逐步提高学习率 |
**预热(warmup)**是训练开始时,先使用较小学习率,再逐步升到设定值,用来缓和刚开始的参数更新。
这里用最初 5 个更新步做预热,包含在总共 150 步之内。预热阶段线性升高;预热结束后,学习率再按余弦曲线逐渐降低,这个后半程叫作衰减。
主图横轴按实际步数比例绘制,前 5 步因此很窄;下方单独放大预热区,方便看清起步过程。这是配置示意,实际日志中的数值会在第 9.1 节一起看。
为什么后面逐渐降低?参数已经经过许多次调整,继续用较大的步长可能在较好的位置附近来回波动。衰减让后期更新逐渐减小,但它按预先设置的进度执行,并不会自动判断模型已经掌握了哪些知识。
<details> <summary>调整时再看:预热步数与总步数变化会影响什么</summary>假设总步数仍为 150,只把预热从 5 步改成 15 步,模型会用更多更新步慢慢升到 5e-5,后面的衰减阶段则由 145 步缩为 135 步。这个变化可以直接算出;训练是否更稳定,要结合日志检查。预热拖得过长,也会让有限训练中的更多步骤处于较小学习率。
总步数本身也参与调度。第 2 节若只减小 batch,使总步数从 150 变成 300,即使仍填 cosine 和预热 5 步,衰减也会按新的总进度展开。因此,比较同一次训练的第 50 步和第 150 步,与分别新跑“总共 50 步”和“总共 150 步”,不是同一个实验。具体规则见 Transformers 学习率调度说明。