第一次打开训练配置,最容易产生的错觉是:只要把学习率、批大小和训练轮次填成某篇教程里的数字,就得到了一套合理方案。
其实,这三个参数分别影响参数如何更新、一次更新参考多少数据,以及数据被重复使用多少遍。它们还会相互影响。理解这些关系,比记住一组数值更有用。
Hugging Face的微调文档列出了这些常见训练参数,但示例配置服务于特定演示,不能脱离模型、数据与硬件直接叫作最优值。下面用一组假设数据说明计算关系。
学习率:控制更新的尺度,不是学习速度按钮
训练先根据损失计算梯度,再由优化器据此更新可训练参数。Hugging Face训练配置中的learning_rate参与控制每次更新的尺度。更准确地说,实际更新还受优化器状态、调度和其他设置影响,并不总等于把原始梯度直接乘上一个固定数。
把学习率调大,可能让模型更快发生变化,也可能造成震荡或破坏原有能力;调得很小,变化可能更缓慢,在给定预算内也可能没有充分适应任务。不能简单把它对应成“越大越高效、越小越安全”。
还要分清初始学习率与训练过程中的实际学习率。如果采用预热或衰减,日志里的数值会随进度变化。比较两次训练时,只看配置中同一个数字,而忽略调度曲线,可能并不是在比较同一种更新安排。
全参数微调与只更新部分适配器参数,训练对象不同;数据质量、任务难度和优化器也会改变合适范围。因此,第一次选择起点时,应当优先参考同一模型和训练方式的可靠说明,再通过验证集观察,而不是跨项目照搬。
批大小:先问是“每次送入”,还是“每次更新”
显存限制下,设备一次可能只能处理少量样本。这个单次前向与反向计算所处理的批,可以先理解为微批。训练还可以累积多个微批的梯度,再进行一次优化器更新。在Trainer配置中,这两项分别对应per_device_train_batch_size和gradient_accumulation_steps。
在常见数据并行和梯度累积设置下,按样本数计算的有效批大小,近似等于每设备微批大小乘以梯度累积步数,再乘以数据并行设备数量。这里限定数据并行,不把所有形式的多卡切分都当成增加独立样本。
例如,单设备每个微批处理两个样本,累积八次,再更新一次,那么通常一次更新参考十六个样本。若增加到两份数据并行副本,并保持其他设置不变,名义有效批量就变成三十二个样本。
但“十六个样本”也不等于固定工作量。每条文本长度不同,实际token数量、填充比例和显存占用都会变化。长文训练中,还要看截断、打包和有效token预算,不能只用样本数比较成本。
梯度累积帮助在显存受限时实现更大的有效批量,却不是无条件地与直接使用大微批完全相同。损失归一化、变长序列处理和具体实现都可能影响细节,比较实验时要把这些条件记下来。
训练轮次:看过几遍,不代表学会几遍
训练配置中的num_train_epochs表示轮次,一轮通常表示遍历训练数据一遍。若数据没有发生变化,增加轮次意味着重复使用更多次同一批样本;它不会自动增加新知识,也不会把错误标签变成正确标签。
还是用教学数字:假设训练集三千二百条,单设备微批为二,梯度累积八次,不丢弃样本,也不涉及额外打包,那么每轮有一千六百次微批计算,对应二百次优化器更新。训练三轮,总计约六百次更新。
| 教学设置 | 单轮优化器更新数 | 三轮更新数 |
|---|---|---|
| 有效批量十六条 | 二百次 | 六百次 |
| 有效批量三十二条 | 一百次 | 三百次 |
这张表只演示整除情形下的关系。实际训练还受最后一个批、分布式采样、序列打包和是否按最大步数终止等设置影响。
值得注意的是,有效批量加倍、轮次保持不变,数据仍看了相同遍数,但参数更新次数减少了。反过来,如果保持更新步数不变,处理过的数据量又会变化。因此,不能说只改了批量,训练的其他含义就完全不变。
第一次实验,先把比较条件固定下来
一个可执行的起点,是固定模型版本、训练方式、数据版本、拆分规则和处理过程,再选一项参数作主要比较对象。每次记录实际学习率、有效批量、已处理token、更新次数、耗时与验证结果。
如果比较学习率,尽量保持数据顺序和预算规则一致;如果比较批量,要提前说明是保持轮次、更新数还是token预算相近。不同方案有不同用途,重点是不要在结果出来以后,才挑一个最有利的口径解释。
小规模试验可以帮助排查数据格式、损失计算和显存问题,但“短跑没有报错”不能证明完整训练有效。流程跑通与任务提升仍然是两个验收对象。
改变一项参数也不意味着已经排除了全部随机性。小幅差异可能来自初始化、采样或评估波动,必要时在预算允许的条件下重复验证,而不是把一条更低的曲线立即写成明确胜出。
训练损失下降以后,还要检查什么
训练损失反映对训练目标的拟合情况,不直接等于真实任务质量。如果数据中有重复、标注错误或与使用场景不一致的模板,模型可以更熟练地复现它们,却没有解决目标问题。
应当用未参与训练的验证数据追踪任务表现,并保留最终测试数据。训练损失继续下降、验证表现停滞或变差,是需要检查过拟合等问题的信号,但也应排除数据口径与评估波动,不能只凭一个点下结论。
生成任务还需要核对具体行为。比如希望模型稳定输出某种格式,可以统计格式有效性,同时检查内容正确性;只检查格式,就可能奖励一个结构完美却答错问题的模型。
此外,还要检查原来必须保留的能力。某项业务任务进步,如果同时导致重要的通用任务明显退化,也未必符合交付要求。训练目标与保留目标,应当在试验开始前说明。
给下一次训练留下一张能解释的记录
一份有用的记录,应该让别人能够回答:为什么选这组设置,实际处理了多少数据,更新了多少次,哪项证据支持当前选择,还有什么没有测。它不只是三行参数截图。
遇到结果不理想时,先确认数据、标签和评估是否可靠,再讨论扩大模型、延长训练或提高学习率。参数优化解决不了所有错误,有些问题必须回到数据与任务定义。
学习率控制更新尺度,批大小决定更新参考的数据量,轮次决定重复使用数据的程度。把三者与实际更新次数、token预算和独立评估连在一起,你才是在设计一次可解释的微调,而不是碰运气地填配置。
670



被折叠的 条评论
为什么被折叠?



