“语言模型只是预测下一个token。”这句话描述了常见训练目标,却容易留下一个大洞:如果任务只是接着写,为什么模型后来能回答问题、翻译,甚至写程序?
答案不能只靠“它压缩了知识,所以理解了世界”来完成。我们需要看清三个环节:一段文本怎样提供训练信号;同一套参数怎样从大量信号中形成可复用的计算;这些计算为什么仍可能在真实任务上失败。
本文讨论自回归语言模型的预训练。预训练还有其他目标,并不是所有模型都用同一种接续预测方法。
1.原文自己提供目标
假设我们有一句“小猫喝水”。不请人逐条设计问答,而是把已经存在的文字切成token,就能构造“给前面的内容,预测后面的内容”的任务。
为便于手算,本篇固定使用五个教学token:
〈始〉/小猫/喝/水/〈终〉。
〈始〉和〈终〉分别表示开始与结束;真实模型使用什么特殊符号,以及“小猫”会切成几个token,需要看具体分词器。本篇不把这套手工切分当作真实模型结果。
从这段序列可以得到四个有效预测位置:看到〈始〉,预测“小猫”;看到〈始〉小猫,预测“喝”;看到〈始〉小猫喝,预测“水”;看到完整句子,预测〈终〉。
目标来自原文自身,所以叫自监督。这里并非没有监督信号,也并非没有人类劳动:文字的创作、资料选择和清洗仍有人参与;省去的是给每一个预测位置额外编一份答案。
一次遇到“小猫”之后是“喝”,不表示世界上只有这一种续写。其他文本里可能接“跑”“睡觉”。训练反复积累这些条件下的信号,让模型学习分配概率,而不是给每个前缀规定唯一永恒答案。
2.输入与目标错开一位
实际计算不必把四个前缀分别抄成四份。可以把输入写成:
〈始〉/小猫/喝/水。
与各位置对齐的目标则是:
小猫/喝/水/〈终〉。
同一份输入经过Transformer后,四个位置各自输出一份词表分布。第一个位置用来预测“小猫”,第二个位置用来预测“喝”,依此类推。损失分别检查四份分布给对应目标分了多少概率。
注意第二个位置的输入是“小猫”,目标是“喝”。“允许读到自己”并不意味着已经读到了目标。输入和目标错开一位,正是避免偷看答案的一部分。
但只错开还不够。虽然“喝”在第二个预测位置之后,它仍出现在整张输入表的第三行。若第二个位置可以读取第三行,就能抄答案。因此,每一层的因果mask都必须阻止读取未来位置。原始Transformer对移位与mask的说明

图1|输入、下一位目标、目标概率和损失按四个预测位置对齐;下面的三角区标可读输入。四个概率属于四份不同分布,不能加起来当成一个概率总和;每份分布仍在整个词表上归一化。
3.训练能并行,是因为真实前缀已经给出
如果第二个位置把“吃”排在“喝”前面,第三个位置接下来收到的是“吃”还是“喝”?
在这里的标准训练方式中,仍然是原文里的“喝”。因为输入整段来自已知文本,不需要等待模型前一个位置选出什么词,再决定下一行输入。这叫teacher forcing,通常译作教师强制。T5原论文也明确用这个术语描述其最大似然训练方式。T5的训练说明
名字里的“教师”不是另一个大型模型,也不是有人守着纠错,而是用真实序列中的前文作为后续预测的条件。于是同一层的多个位置能够一起计算,同时由mask维护各自的可见范围。层与层仍有依赖,不能因此说所有计算都同时完成。
自由生成时不同。用户只给开头,尚未生成的词没有标准答案供我们提前填入。模型实际输出“吃”,下一步就要基于包含“吃”的前缀继续。它可能沿着自己造成的偏差越走越远。
因此,训练时各位置在真实前缀上预测得不错,不保证自由续写一长段也同样可靠。两种情境的前缀来源不同;理解这一点,比把“训练并行、生成逐步”背成口号更重要。关于训练与生成前缀差异的原始研究

图2|同一处分布把“吃”排在“喝”之前:训练下一位置的输入仍从原文取“喝”,生成下一步则使用实际选出的“吃”。图中没有把训练画成先选词再算loss;损失直接读取分布中标准目标“喝”的概率。
做一个纸上检查:把原文第三个token“喝”改成“吃”。预测“喝”的那个位置,看不到被改的第三行,所以它的输出分布不变;但该位置的目标变成了“吃”,计分依据随之改变;若两词的概率不同,损失也会改变。之后的位置能读到改动,输出也可能改变。输入可见范围与监督目标,必须分开追踪。
4.四份损失怎样合在一起
假设模型给四个正确目标的概率依次是0.5、0.25、0.8、0.5。这里的“正确”只表示与这份原文一致,不保证原文本身的事实正确。
沿用第04章的负对数损失,使用自然对数,四项约为0.6931、1.3863、0.2231、0.6931。等权平均后,得到约0.7489。
第二项最大,因为模型只给原文的“喝”分了0.25。参数更新会综合这些位置的信号,沿着降低所用训练目标的方向调整。一次更新同时影响许多输入下的表现,也不保证每个位置都立刻改善。
在这个例子里,没有“模型先生成四个词,再用人类观感给整句打分”的步骤。训练可以直接计算目标token的损失,把梯度传回词表投影、每层注意力与FFN等可训练参数。输出不必先变成一段可读文字,误差信号就已经存在。
5.为什么局部预测会推动更广的能力
预测对象虽然只有下一个token,可用条件却可能是很长的前文。要在不同材料里降低损失,有时需要抓住比相邻词更复杂的关系。
例如,前文说“小林把钥匙交给小周,随后小周把它放进抽屉”。当后面问“钥匙现在在……”,只统计“钥匙”后面最常出现什么,不足以分辨这个情境。使用人物、物品和位置之间的联系,才有机会更准确地预测续写。
这是训练为什么可能推动关系建模的直觉,不是声称看过一句话就必然学会物体追踪。模型也可能抓住题型、常见答案或其他捷径。只有换名字、换地点、改变事件顺序后继续检查,才能区分它用了什么规律。
同一套参数会参与大量不同文本。若一种表示能在许多样本中降低损失,就有机会被反复强化并复用。例如,处理指代、否定、数字格式或代码结构的计算,可能帮助多个预测位置。训练无需先给这些中间计算逐一命名。
中间的连接点是参数共享。不同句子的损失都对同一组参数求梯度,按所选目标汇总后更新;不是每句训练完就另存一个专用网络。若两个上下文的信号支持同一种关系,它可能得到反复强化;若信号冲突,就像第07章的小批次例子,需要合并取舍。仅凭这一机制不能证明形成了哪一种内部算法,所以还要用“换名字但保留关系”“交换交付顺序”等受控变化检查。
文本本身还记录了任务过程:文章附摘要,外文附译文,习题附解答,程序附说明。把“问题之后继续写答案”放进同一个条件预测框架,就让预测目标与任务表现发生了联系。不过,能表达为续写任务,不等于一定已经把这个任务学好。FineWeb论文对自回归目标与文本任务的说明
可以把参数知识理解为:训练改变了许多权重,使某些关系和处理方式以后更容易被调用。它通常不是一条事实对应一个独立、可检索的格子,也不会自动带上原始网址、版本和可信度。记住某段文字与学会可迁移的方法可能同时发生,需要分别检验。
6.从文件到训练样本,还差好几步
一份网页文件不能直接当作模型输入。通常先提取正文、处理明显异常内容,再分词,把得到的序列按训练允许的长度组织成样本。
长文可能切成多个片段。切断点前后的联系就可能丢失:如果一个名字只在前段出现,后段的代词便少了依据。短文则可能拼接到同一个计算块里,减少空位置,提升处理效率。
拼接时要说明边界怎么处理。结束符可以告诉模型“前一篇到这里结束”,但符号本身不自动禁止跨文档注意力。若希望文档之间互不读取,还要使用相应的注意力mask;不同训练方案对此可以有不同选择。
若用填充符把长短不同的样本补齐,通常还要排除填充位置的损失。否则模型可能花力气学习没有任务价值的填充模式。这里又出现一个区别:注意力mask控制“能读什么”,损失mask控制“哪些预测计分”,二者不是一回事。TensorFlow官方教程中的填充位置损失处理
资料如何采样也会改变训练信号。把同一份材料多抽几次,就让其中的模式在更新中占更大份量;一个长文档还可能贡献远多于短文档的有效位置。所以“收集了一万份文件”不足以说明模型实际学了多少、重点学了什么。
7.清洗和去重改变的不是文件整洁度
网页中可能混有导航菜单、乱码、重复页脚和自动拼接内容。若直接训练,模型也会为预测这些部分花计算。清洗要判断哪些材料值得占用训练预算,并通过实验检查筛选是否真的帮助目标能力。FineWeb的数据构建研究
去重还涉及训练信号的权重。假设同一篇错误说明被转载一百次,不处理重复,就可能让它获得远大于另一篇说明的影响。一百个网址并不自动等于一百份独立证据。
完全相同的文件容易识别,换标题、改页脚的近重复文本则更难;还要留意长段落被许多文档共同复制。已有研究发现,去重可以减少模型复现训练原文,并降低训练集与测试集的重叠,帮助评价更可信。去重研究原论文
评测隔离同样重要。把一篇文章随机切成几段,再把相邻段分到训练集与测试集,可能留下近似内容甚至答案泄漏。应该按任务检查文档、来源与近重复关系,而不是只确认文件名不同。
过滤也有代价。只保留某一种书面风格,可能减少方言、特定社区表达或少见专业材料。质量没有一个适用于所有目的的简单开关;需要同时检查有效信息、多样性、来源合规与隐私风险,不能把“删得更多”直接等同“更好”。
8.真实预训练并非一锅不变的数据
Qwen团队的2025年Qwen3技术报告描述了三个预训练阶段:先用超过30万亿token进行通用训练;再用约5万亿token,提高STEM、代码、推理及合成数据的比例;最后进行长上下文训练,训练序列长度从4096提高到32768。Qwen3预训练阶段
这些数字对应报告公开的训练口径,其中的近似数据不能当作精确加总。训练序列长度与产品在某些扩展方案下允许的最大输入长度,也不是同一个指标。
报告还说明,预训练资料包含合成的教材、问答、指令与代码片段。可见“预训练”不必等于只读未经组织的自然网页;某条资料长得像问答,也不足以单独判定它属于哪一训练阶段。Qwen3的数据说明
更重要的是看目标和流程:本阶段在训练什么能力,用什么数据和损失,随后还有哪些后训练步骤。基础模型会接续文本,与它是否稳定遵循用户指令、是否知道何时拒答,是相连但不同的问题。
9.预测损失下降,仍要单独检查任务
做一个刻意构造的小实验:同一评估片段包含9个常见续写位置和1个关键答案位置。
模型A给常见位置的目标各分0.95,给关键目标分0.10;模型B分别给0.70与0.80。按十个位置等权平均,A的损失约0.2764,低于B的0.3433。
但如果只关心关键位置,B给目标的概率明显更高。A通过大量常见位置的优势,取得了更好的整体平均数。这不说明预测损失没有价值,而是说明它回答的问题与特定任务的验收问题不完全相同。

图3|九个常见位置加一个关键位置,统一按十个位置等权平均。模型A平均损失更低,模型B给关键目标的概率更高。图中数字不能还原全部候选的排序,也不是完整任务成功率。
对数学题,可以换成没见过的数;对摘要,可以检查关键信息是否遗漏;对程序,可以运行测试。模型能复述一种方法、在熟悉格式里答对、在变化条件下稳定完成,是不同层级的证据。
语料中的谣言、过时知识和互相矛盾的说法,也都能成为预测目标。训练目标没有自带一个事实核查器;降低原文预测损失,不能保证以后说出的每句话真实。
最后别把这一章扩展成所有预训练的定义。BERT的代表性目标是从被遮盖或扰动的文本中恢复选中位置,它可以利用目标两侧的上下文,样本构造与本文不同。BERT的预训练目标
本章练习
题目
问题1|对齐四个位置
输入〈始〉/小猫/喝/水各预测什么?为什么输入移位后仍需要因果mask?
问题2|追踪一次替换
固定参数,把原文第三个token“喝”改为“吃”。预测第二个目标的输出分布、目标标签、损失和后续位置分别可能怎样变?
问题3|核算训练目标
四个正确目标概率为0.5、0.25、0.8、0.5,求自然对数平均损失。若训练时第二处选词偏好“吃”,下一输入来自哪里?自由生成呢?
问题4|检查边界与证据
结束符是否自动阻止跨文档读取?仅凭聊天中接受一次纠正,能证明做过参数训练吗?分别说明还需要哪类依据。
思考提示
提示1|对应问题1
把第i个输入的输出与原文第i+1个token对齐,检查答案还可能藏在哪一行。
提示2|对应问题2
先分开输入可见性与监督标签,再看能读到改动的位置。
提示3|对应问题3
逐项取负自然对数再平均;区分真实前缀与模型实际生成前缀。
提示4|对应问题4
一个问题关乎网络信息路径,另一个关乎是否发生参数更新。
参考答案与解析
答案1|对应问题1
目标依次为小猫/喝/水/〈终〉。例如“喝”仍在整张输入的第三行,若第二行可读它便会泄漏目标,所以各层还必须用因果mask;有正确mask时各训练位置可在同一层一起计算。
答案2|对应问题2
第二个预测位置只看〈始〉、小猫,故在参数与其他条件固定时输出分布不变。其目标由“喝”变为“吃”,若两者概率不同,损失随之改变。后续位置可读到第三行改动,因此分布可能改变;是否实际改变需看具体参数。
答案3|对应问题3
平均损失为[-ln0.5-ln0.25-ln0.8-ln0.5]÷4=0.748933…,约0.7489。训练下一位置仍使用原文的“喝”,不用先选词;自由生成若实际选了“吃”,就以包含“吃”的前缀继续。teacher forcing在这里不指另一个模型。
答案4|对应问题4
结束符只表达文档边界,是否阻止跨文档读取要看注意力mask。聊天纠正可作为新上下文影响回答,不足以证明参数更新;需要实际的数据使用、训练与参数更新记录。两者都不能由界面看起来“懂了”来替代检查。
下一章
同一组参数从大量位置接收训练信号,容量和训练机会也都要花资源。下一章把参数量、训练token量与计算预算放在一张账上:预算固定时,模型更大为什么未必更好?