1 大模型预训练要回答什么
假设要把公开的 AG News 新闻短文本分成世界、体育、商业和科技 4 类。直接训练分类器时,每条训练记录都带着类别;模型学习哪些文字线索有助于区分类别。大模型预训练先提出另一个问题:在还没有这些分类标签时,能否通过大量文本学习可复用的语言规律,让后续分类任务少依赖一些标注数据?这里的“预”表示发生在目标任务训练之前,不表示模型已经知道某个任务的答案。
本课以自回归语言模型为主线。它看到一段前文,预测下一个词元。例如输入“这场比赛的最后”,模型为后续可能出现的词元分配概率。真实后续来自原始文本,因此可以自动构造训练目标。这类方法称为自监督学习:监督信号由数据本身产生。不断做预测,可能让模型学到词语搭配、句子结构以及部分事实关联;这些能力能否迁移到新闻分类,仍需独立评估。
预训练的直接产物是模型参数和配套的分词器、配置与训练记录,不是可靠的新闻分类服务。模型善于续写,并不保证它能按固定标签输出,也不保证输出事实正确。后续微调可以让它适应标签、格式和任务要求,但不能把基础数据的问题自动消除。理解这个边界,才能避免用“回答流畅”代替质量证据,也能解释为什么预训练损失下降后,某些下游指标仍可能不升反降。
与熟悉的机器学习任务比较会更清楚。在表格流失预测中,输入可能是最近 30 天登录次数、账户使用时长、工单数,目标是未来 30 天是否流失;在 CIFAR-10 图像分类中,输入是图像,目标是 10 个类别。文本预训练则把前文作为输入、后续词元作为目标。它们都需要数据划分、可复现的训练过程和独立评价,但训练目标与业务目标之间的距离不同,不能直接比较损失数值。
本课要回答的核心问题是:用什么数据、在多少训练预算内,得到什么可验证的基础能力?“参数更多”只回答了模型容量的部分问题。若语料大多是重复页面,或者训练与测试存在大量近似文本,规模再大也可能得到误导性的结果。对于入门实验,优先选择可检查的公开数据与较小模型,完整记录训练和评估过程,比凭参数量判断强弱更有学习价值。

2 数据规模、词表与上下文
预训练数据规模通常用词元数描述。词元是分词器把文本切分后得到的模型输入单位,可能是词、子词、汉字片段或字节相关片段。它既不总等于 1 个汉字,也不总等于 1 个英文单词。同样 1 GB 文本,经过不同清洗和分词可能产生不同数量的词元;报告规模时应说明分词器版本、清洗规则和统计口径,不能只写文件大小。
词表收录模型可以处理的词元,并给每个词元分配编号。词表较大时,某些文本可以用较短的词元序列表示,但输入和输出相关的参数与计算也会变化;词表较小时,罕见词可能被拆得更碎。同样的上下文长度下,不同语言或领域能容纳的文字量也可能不同。选词表时,应抽样查看中文新闻、数字、标点、英文缩写等内容被如何切分,避免只看词表大小就判断优劣。
上下文长度表示模型在某次计算中能处理的词元位置数量。例如长度为 512 的训练片段,并不意味着能完整放入 512 个汉字。长文档可能被切成多段,短文档可能按规则拼接。截断可能丢失结论,拼接又可能引入不自然的文档边界,因此需要记录边界标记与损失计算规则。长度增加通常会提高内存和计算需求,不应把更长上下文当作没有成本的升级。
数据管线应先建立来源清单,再进行清洗、去重和划分。以公开的 WikiText 文本做教学预训练时,要固定数据版本并核对许可;以 AG News 做后续分类时,则保留其独立的评估用途。划分的基本单位通常应是文档或来源组,而不是从同一篇文章随机抽取句子。相邻句子、转载和轻微改写若落在不同集合,模型可能借助记忆取得过于乐观的验证结果。
训练集用于更新参数,验证集用于选择设置与检查问题,测试集用于最终报告。若某个公开数据集已经有官方测试集,就先保留它,再从官方训练集划出验证集。例如可按固定随机种子从训练部分划出 10% 做验证,并按类别检查分布。这个比例是教学选择,不是所有预训练的统一规则;数据越大、相关性越强,越应说明划分单位、去重范围与每部分的实际规模。
还要区分独立词元量与累计训练词元量。包含 1000 万词元的语料重复读 3 次,累计处理约 3000 万词元,却没有获得同等数量的新内容。重复可以帮助学习,但重复太多可能加重记忆、降低泛化。清洗也不是越狠越好:把罕见表达全部删除,可能损害少见类别和特定群体文本的覆盖。数据质量需要同时考虑准确性、重复率、语言分布、来源与目标任务的相关程度。

3 目标函数与训练稳定性
自回归预训练把每个可预测位置看作概率预测问题。给定前文,模型为词表中的候选词元分配概率,再用真实后续词元评价预测。常用的交叉熵损失会对真实词元概率较低的预测施加更大的惩罚。直观上,模型把正确后续的概率从 0.1 提到 0.4,这个位置的损失会下降;但训练要求在大量不同位置上持续改进,不能只记住某个例句。
训练时要遮住未来位置,防止模型直接看到答案。损失还可能排除填充位置,因为填充只是为了组成整齐的批次,不是真实文本内容。模型先完成前向预测,得到损失,再计算梯度,最后由优化器更新参数。梯度可以理解为“参数怎样微调可能降低当前损失”的局部提示。每次更新都很小,效果依赖许多批次的累计,不能把某次更新解释成模型掌握了某条完整知识。
学习率控制每次参数更新的步幅。步幅过大,可能越过有用区域并让损失剧烈上升;步幅过小,则可能在有限预算内进展缓慢。常见调度先用预热逐渐增加学习率,再随训练推进降低学习率。预热不是保证稳定的开关,其长度和峰值仍需结合模型、批次与初始化选择。实验记录应保存实际执行的学习率曲线,不能只记录配置文件里想要使用的数值。
有效批量表示每次参数更新综合了多少训练内容。它由设备上的小批次、参与计算的设备数以及梯度累积方式共同决定。若改变批量却保留原来的学习率,训练动态可能改变;若只看更新步数,又可能忽略每步实际处理的词元数量差异。比较实验时,至少同时记录累计有效训练词元数和更新次数。填充位置、被排除的标签等不应混入有效词元统计。
训练稳定还涉及数值是否有效。损失突然变成非数值 NaN,或者梯度与参数出现无穷值,表示当前计算已经失去正常意义。梯度裁剪能限制异常大的梯度幅度,但不能替代修复错误数据、错误掩码或不合适的学习率。入门阶段只需理解这些可观测信号及其用途,暂不展开低精度计算与优化器内部机制。先有清楚的故障证据,再决定是否需要更深入的工具。
预训练损失常与困惑度一起报告。在采用自然对数的平均交叉熵定义下,困惑度等于损失的指数。它可以帮助比较同一分词、同一评估数据和同一损失口径下的预测效果,却不适合直接跨词表、跨语言或跨数据集排名。损失为 2 的模型不自动比另一个损失为 3 的模型更适合流失预测;任务不同、统计单位不同,数值就缺少共同的比较基础。
4 动手:读一条预训练损失曲线
先看一组教学用的虚构日志。所有检查点都在同一份固定验证集上评估,使用相同分词器与损失掩码;训练损失则是最近一段训练的平均值。横轴使用累计有效训练词元数,才能看出模型在实际读过多少内容后取得变化。这组数据只用于练习读图,不代表某种模型的标准收敛速度,也不能据此承诺真实项目所需的算力。
| 累计训练词元 | 训练损失 | 验证损失 | 当前学习率 |
|---|---|---|---|
| 0 | 8.10 | 8.12 | 0 |
| 100 万 | 5.30 | 5.42 | 0.0001 |
| 300 万 | 4.20 | 4.36 | 0.0003 |
| 600 万 | 3.65 | 3.92 | 0.0002 |
| 900 万 | 3.30 | 3.95 | 0.0001 |
| 1200 万 | 3.05 | 4.14 | 0.00003 |
先找整体方向。前 600 万词元内,训练和验证损失都下降,说明模型在训练文本上的改善能够部分迁移到保留文本。随后训练损失继续下降,验证损失却开始上升,形成需要调查的分离。这可能与过拟合、语料重复或训练与验证分布不同有关,不能只凭曲线直接断定原因。也要检查验证样本是否固定、评估代码是否变化、每次评价的有效词元数是否一致。
再找候选检查点。表中验证损失最低的是 600 万词元附近,因此它值得作为后续评估候选;不过 3.92 与 3.95 的差异是否稳定,还需要复评和随机性记录。保存最后的检查点与保存验证表现较好的检查点,解决的是不同问题。继续训练前要考虑剩余预算以及验证是否仍可能改善,而不是因为训练损失还在下降,就认定后面一定更好。
现在把日志与真实任务连接起来。可用 AG News 的官方训练部分构造训练与验证划分,固定分类微调方法,比较不同预训练检查点的下游结果。输入只使用约定的标题与摘要,目标是 4 个类别;验证时报告准确率与宏平均 F1,并查看各类别召回率。宏平均 F1 先计算每类 F1 再取平均,能避免样本较多的类别完全主导评价,但它也不能代替逐类错误分析。
精确率回答预测为某类的样本中有多少正确,召回率回答真实属于某类的样本中找回多少,F1 综合这两者。对于表格流失预测,可以同时报告少数类精确率、召回率、PR-AUC 和 ROC-AUC,说明决策阈值只用验证集选择。AUC 衡量不同阈值下的排序表现,不表示选定阈值后的误报已经可接受。新闻分类与流失预测的指标不能直接互换,更不能拿词元损失充当分类 F1。
最后检查评估可信度。若某篇测试新闻的转载早已进入预训练语料,测试结果可能包含记忆收益;若目标是未来新闻,随机划分也未必反映时间变化。可以在有时间信息时增加按时间保留的评估,并按来源、类别和文本长度切片观察。正文风格改变、出现新机构名称或者短文本比例升高,都可能形成分布偏移。读损失曲线的终点,是提出可验证的问题,而不是给曲线贴标签。

5 规模法则与算力预算取舍
规模法则描述在一定实验条件下,模型参数量、训练数据量和计算量与损失之间呈现的经验关系。它的价值是帮助规划实验范围,减少完全凭感觉投入资源。它不是保证任意模型、任意语料都服从同一公式的定律,也不保证损失改善能按固定比例转化为任务收益。数据质量、结构和训练方法变化后,原来的估计可能不再适用,需要用小规模实验重新校准。
在预算固定时,扩大模型意味着每处理 1 个词元通常需要更多计算,因而可能减少能读的数据量;增加训练词元则可能要求选择更小的模型。某些配置会出现“大模型还没学充分,预算已经耗尽”,另一些配置则可能是“小模型反复读旧数据,继续投入收益很低”。要寻找的是在任务约束下合适的组合,而不是把参数量当作唯一的优化目标。
对于结构相近的稠密模型,可以用“计算量约与参数量乘以训练词元量成正比”做粗略比较。这里省略了许多实现和上下文长度相关因素,只适合教学估算。假设基准参数量记为 1,固定计算预算能训练 1 亿词元,那么参数量变成 2 时,粗略只剩 5000 万词元的额度。这不表示训练时间恰好相同,也不表示两者最终质量相同。
预算还包括内存、数据准备、验证、检查点保存和失败重跑。训练吞吐量受硬件利用率、序列长度、读取速度等影响,不能只从参数数量换算小时数。合理的做法是先用短试跑测出实际每秒有效词元数与峰值内存,再估算完整训练时间,并给评估和恢复预留额度。若试跑发现数据读取长期等待,首先解决供数问题,盲目增加模型规模未必有效。
交互中的滑块只改变相对模型规模,显示固定计算预算下可处理词元额度的反向变化。独立语料库存保持为 8000 万词元:当额度大于库存时,界面提示可能需要重复读取;当额度小于库存时,提示本次预算无法覆盖全部语料。这让“模型容量”和“数据覆盖”成为可以一起讨论的变量。图中不输出虚构的 F1 或性能排名,因为仅凭这几个量无法可靠推断下游效果。
选择配置时可先比较 2 到 3 个可承受的小实验,固定语料规则、验证集、上下文和评价口径,再观察单位计算带来的验证改善。若目标是学习新闻分类迁移,还应纳入简单基线,例如词频特征加线性分类器。对于流失表格,树模型也可能更合适。是否需要从头预训练应由数据特点和实验目的决定;当现有公开模型已能满足任务时,后续适配可能更节省预算。
6 常见坑:只追参数量忽视数据质量
最容易发生的错误,是先决定一个显眼的参数规模,再把所有能找到的文本拼进去。网页导航、重复模板、乱码和内容农场会占据词元预算,却未必提供有用的语言覆盖。若训练集反复出现同样的新闻,模型可能很快降低训练损失,让人误以为数据很适合。应抽样检查原始文本与清洗结果,记录去除比例及理由,并观察来源是否被少数站点支配。
数据泄漏也不只发生在有标签训练中。预训练语料包含下游测试题、测试新闻或其近似改写,都可能污染后续结论。可用文档标识、规范化后的文本匹配与近似重复检查降低风险,同时记录检查的覆盖范围。不能因为做过某种去重就宣称完全没有污染:跨语言翻译、摘要与转载可能逃过规则。无法确认干净的数据应明确限制结论,避免把公开榜单数字当成独立泛化证据。
类别不平衡在预训练与下游评价中表现不同。通用语料里的体育内容很多,不代表分类训练标签已经平衡;分类集整体平衡,也不代表不同来源与文本长度都平衡。如果某类样本少,只报告总体准确率可能掩盖它的低召回。需要查看每类数量、精确率和召回率,必要时在训练阶段尝试重采样或权重调整,并在原始目标分布的验证集上评价其代价。
清洗规则本身也可能引入偏差。例如把短文本一概删除,可能使模型对短标题处理较差;把含大量数字的段落删掉,可能削弱财经新闻覆盖;只保留主流语言风格,可能降低其他表达方式的表现。质量不是把文本改得整齐,而是让保留内容符合训练目的,同时保持需要的多样性。制定规则时应保存边界样例,让别人能理解哪些内容被删除以及可能损失什么能力。
还有一种隐蔽问题是反复使用验证集做决策。每次看到某类表现差就调整语料,最终会逐渐针对这份验证集优化。它仍然没有直接参与梯度更新,却已经影响了实验选择。应限制无计划的反复试探,保留未参与选择的测试集,并记录试验次数。测试结果出来后若继续调参,就需要另一个独立评估才能支撑新的最终结论,不能沿用原来的“首次测试”说法。
分布偏移则要求把评价时间与使用场景写清楚。公开新闻数据可能主要来自较早时期,今天出现的新术语、表达和主题会改变输入分布。训练中低损失并不能证明模型能稳定处理这些变化。可保留较新的、有合法使用依据的样本作为额外评估,比较各类召回与错误类型。这里的重点是识别迁移边界,暂不展开持续预训练、领域自适应等后续技术细节。
7 案例:学习率调度失误导致发散
考虑一个使用公开文本训练小型语言模型的教学事故。原计划先预热 1000 次更新,峰值学习率为 0.0003,再逐渐衰减。训练在第 2400 次更新中断,恢复时模型权重正确加载了,但优化器与调度器状态没有完整恢复,恢复脚本又把学习率设为 0.003。接下来的日志中,实际学习率突然升高,训练损失剧烈震荡,随后出现 NaN。
这些数字是虚构案例,用于说明排查顺序。学习率从 0.0003 到 0.003 是 10 倍变化,但不能据此推导任何任务的通用发散阈值。故障的核心是恢复后的真实训练状态与原计划不一致。某些训练即使遇到类似变化也未必立刻出现 NaN;另一些训练可能先缓慢恶化。判断应依据这次运行的日志、检查点和数据批次,而非套用单个数值。
发现异常后,先暂停参数更新,保留最后正常检查点、异常日志与触发附近的数据标识。检查损失是否有限、实际学习率是否连续、有效词元数量是否异常,再核对优化器和调度器状态。如果把异常后保存的权重直接当作恢复起点,损坏可能已经进入参数。若仍在持续覆盖检查点,还可能丢失故障前的可用状态,因此保存策略也属于训练方案的一部分。
接着建立证据链。比较中断前后的实际学习率,检查恢复日志是否显示状态缺失,并用同一批固定文本做短程复现。若从正常检查点恢复完整状态后稳定,而错误配置在相近位置再次出现异常,就增强了学习率调度错误的解释。不过仍要排除批次内容、损失掩码和数值处理差异,不能只因调低学习率后暂时没有报错,就宣布所有问题都已解决。
修复包括恢复匹配的模型、优化器与调度器状态,校验累计更新次数和词元数,并在正式续跑前执行短程观察。若状态确实无法找回,需要把重新初始化优化器的续跑作为新的实验分支记录,而不是宣称无缝继续。重新预热是否合适要经过小试验;简单恢复某个学习率数值,不能还原优化器历史。对照运行的差异必须在实验报告中可见。
最后用固定验证集检查修复后的趋势,并确认异常值不再出现、实际学习率符合计划。梯度裁剪或更保守的设置可以辅助稳定,但应围绕明确原因添加。若修复后训练损失正常而验证持续恶化,还要回到数据与泛化问题。排障流程因此需要分支:数值失效、数据异常与训练验证分离是不同信号,不能全部用“把学习率调小”处理。

8 把预训练假设写进实验方案
实验方案需要把愿望改写成能被证伪的假设。例如:“在固定模型、累计词元预算和分词器的条件下,降低近似重复率能改善独立验证文本的损失,并改善固定新闻分类评估的宏平均 F1。”这同时指定了控制条件、干预与结果。若只写“增加优质数据,提高智能水平”,即使结果变好,也无法判断是哪项变化起作用,更无法知道应否继续投入。
对照组与实验组应尽量只改变要研究的因素。研究去重时,若实验组总训练词元也减少,就可能混入预算差异;可以明确采用相同累计训练词元预算,并报告独立文档覆盖和重复读取次数。若清洗后数据不足,无法完全对齐条件,应如实写出限制。公平比较不意味着隐藏差别,而是让差别可见,让读者知道结论适用于哪些条件。
评价应分成直接目标与迁移目标。直接目标使用固定保留语料的词元损失,迁移目标使用固定下游训练流程与验证集的分类指标。对 AG News 可以约定宏平均 F1 为主要指标,准确率与逐类召回为辅助指标;微调学习率、训练轮数和检查点选择规则保持一致。结果只支持这个评估设置下的结论,不能自动推广到图像分类或表格流失预测。
还需要事先约定停止和失败规则。预算耗尽时停止;出现非有限损失时暂停并保存证据;验证长期没有改善时按预先约定的检查节奏评估是否继续。规则应写明单位是更新次数、有效词元数还是验证次数,避免运行中临时更换口径。记录随机种子、软件版本、数据指纹与恢复状态,能让后续的人区分“同一配置的随机波动”和“设置真的发生变化”。
如果资源允许,可用多个随机种子复验关键比较,报告均值与变化范围;如果只完成 1 次运行,就明确报告单次结果与不确定性。不能把很小的 F1 差异包装成稳定提升。错误分析可以补充数字:提升来自哪个类别,是否牺牲少数类召回,短标题是否仍经常误判。方案的目的不是预先承诺成功,而是让成功、失败与证据不足都能被清楚辨认。
9 从大模型预训练走向微调(A30)
预训练交接给微调的不只是权重文件,还应包含分词器、词表、特殊标记、上下文限制、模型配置、数据说明和评价记录。分词器错配会让同样的编号表示不同内容;输入格式改变也可能让预训练能力难以发挥。微调前先用固定短文本检查分词与前向计算,确认输出维度和损失有限,再进入有标签训练。这些基础检查能避免把文件与配置问题误认为模型能力不足。
到 A30,我们会把 AG News 的标题与摘要映射到 4 个标签,讨论怎样用标注样本调整模型,以及怎样保留验证与测试边界。预训练回答模型如何从大量未标注文本获得基础表示,微调回答怎样把这些能力对齐到具体任务。两者的损失、标签与评价单位可能不同,因此应分别记录。某个检查点预训练损失更低,仍需要同样的微调流程才能判断分类是否更好。
迁移之前还要保留简单方法的比较价值。如果线性文本分类器已经达到任务要求,复杂训练必须用额外收益解释其成本;如果目标是表格流失,文本模型也未必适合那些数值与类别特征。图像分类可以采用相应的图像预训练路线,但不能直接套用本课的词元目标。可以迁移的是数据边界、预算意识、曲线阅读和独立评价的方法,具体输入与目标仍由任务决定。
带着几个问题进入下一课:训练数据是否覆盖目标表达?预训练与测试是否存在重叠?剩余预算足以完成怎样的微调比较?错误主要来自基础表示,还是标签、阈值和任务格式?先把这些问题写下来,再选择适配方式,才能让微调成为有依据的实验。模型规模是其中的变量,最终判断仍要落到可复现的指标与可解释的错误样例。
放进方案里
本项目以公开文本预训练与新闻分类迁移为教学目标,使用固定版本的 WikiText 语料训练基础模型,并以 AG News 的标题、摘要和 4 类标签进行后续评价。启动前确认数据许可、来源与处理记录,按文档划分并检查近似重复,登记预训练语料与下游评估文本的潜在重叠。保留官方测试集,只从官方训练部分划出 10% 作为分类验证集,所有选择均在测试前完成。
预训练采用固定分词器、上下文长度与累计有效词元预算,记录独立语料词元数、重复读取次数、模型参数量、有效批量和实际学习率。先以短试跑测量吞吐与内存,再确定正式预算,并预留验证、保存和恢复所需资源。研究数据去重的影响时,只调整明确列出的去重规则,尽量对齐计算与训练流程,同时报告无法对齐的数据覆盖差异。
直接评价使用固定验证文本上的平均词元损失,迁移评价使用固定微调流程下的宏平均 F1,并补充准确率、逐类精确率与召回率。检查来源、长度和时间切片,避免总体指标掩盖少数类别或分布偏移。最终测试仅在配置确定后执行;若只进行 1 次运行,明确说明随机性尚未充分评估,不把细小差异视为稳定提升。
训练出现非有限损失或学习率异常跳变时暂停更新,保存日志、数据批次标识和最后正常检查点。恢复时核对模型、优化器、调度器与累计进度,并先短程验证。交付包括权重、分词器、配置、数据处理说明、指标与失败记录;只有在预算、数据边界和独立评价均清楚的情况下,才进入 A30 的微调实验。
10 小结:下一步微调(A30)
预训练用数据自身构造监督信号,让模型学习可迁移的规律。读懂它需要同时看数据、词表、上下文、目标函数、学习率与预算;评价它则需要固定验证口径和独立的下游证据。
进入 A30 前,试着解释 3 个现象:训练损失下降而验证损失上升,为什么值得排查?相同算力下参数翻倍,为什么可训练词元可能减少?恢复训练只加载权重,为什么不能保证连续性?能把答案落实到数据划分、实际日志和检查点状态,就具备了开始微调实验的基础。