Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

第2章 预训练:能力的来源

第1章说明了 Transformer 为什么能成为大模型的计算底座,也说明了语言模型若要走向 Agent,必须先拥有可迁移的语言、知识和模式能力。但“模型变大”本身并不能解释这些能力从何而来:一个随机初始化的 Transformer,为什么经过数万亿 token 的训练后,会表现出语言理解、代码生成、数学表达和一定程度的推理能力?

本章的判断是:基础能力不是参数规模单独带来的属性,而是训练目标、数据分布、Tokenizer、模型规模、算力预算和评估证据共同塑造的结果。预训练让模型学习广泛而稳定的模式,却不直接提供时效事实、权限判断或可控行为;这些缺口将自然引向第3章的后训练与行为塑形。

本章面向有后端和传统机器学习经验、准备进入大模型开发的读者。重点放在能帮助工程决策的知识上:哪些问题由预训练解决,哪些问题其实应该交给后训练或推理系统;数据质量为什么会改变能力上限;Scaling Law 如何变成成本估算;以及怎样判断一个模型是真的学会了能力,还是只是在测试集上复现了训练数据。

2.1 从词概率到基础模型:预训练为什么成为能力来源

从词概率到分布式表示

语言模型最初的任务是估计一段序列的概率。给定 token 序列 \(x_1,\ldots,x_T\),自回归语言模型把联合概率分解为:

\[ P(x_1,\ldots,x_T)=\prod_{t=1}^{T}P(x_t\mid x_{<t}). \]

早期系统使用 n-gram 和平滑技术,用有限窗口统计词共现。它们易于解释,却会遇到两个根本问题:词表一大,组合空间迅速爆炸;窗口一长,统计计数变得稀疏。Bengio 等人把词表示为可学习的稠密向量,并用神经网络估计下一个词的概率,证明了“学习表示”和“学习语言概率”可以在同一个目标中完成 [1]。Word2Vec 进一步把大规模词向量训练变成高效的局部预测问题,使分布式表示成为许多 NLP 系统的基础组件 [2]。

这一步解决的是“如何把离散符号放到可泛化的连续空间”。相似上下文中的词,会被优化到相近区域;模型因此不必把“猫”和“狗”当成完全独立的类别,而能利用它们在语料中的相似分布。局限也很清楚:静态词向量不能根据上下文改变词义,词级表示难以处理未登录词、形态变化和长篇上下文。

Seq2Seq、Attention 与 Transformer

Seq2Seq 模型把输入序列编码成隐状态,再由解码器逐步生成输出,推动了机器翻译和端到端序列任务的发展 [3]。但单一固定长度的编码向量难以承载长输入,编码器和解码器之间需要一种动态选择信息的机制。第1章介绍的软对齐缓解了固定向量瓶颈;随后 Transformer 直接以 Self-Attention 为核心,取消了循环结构,并行处理同一序列中的多个位置 [4]。

Transformer 的改变不是简单地“换了一个网络层”。循环模型的时间依赖限制了训练吞吐;自注意力允许每个位置直接与其他位置建立关系,使长距离依赖路径从多步递归缩短为一步矩阵运算。代价是注意力矩阵的时间和显存复杂度近似为 \(O(T^2D)\),序列长度增加会迅速放大成本。因此,预训练从一开始就同时是一个算法问题和一个系统问题:模型想看更长上下文,训练和推理系统都必须承担更大的激活、通信和内存压力。

预训练成为主范式

GPT 的生成式预训练把 decoder-only Transformer 与无监督文本训练结合起来,再用少量任务数据进行迁移 [5]。BERT 证明了 masked language modeling 可以用双向上下文学习强大的文本表示 [6];T5 则把分类、问答、翻译等任务统一改写成 text-to-text 形式,减少了不同任务之间的接口差异 [7]。这几条路线并没有“谁完全淘汰谁”,而是在回答不同问题:decoder-only 更适合连续生成和统一接口,encoder-only 擅长理解和表示,encoder-decoder 在输入输出结构差异较大的转换任务中仍然有价值。

GPT-3 进一步展示了大规模自回归模型的上下文学习能力:在不更新参数的情况下,仅通过提示和少量示例就能完成多种任务 [8]。这改变了模型开发方式。过去是“为每个任务训练一个模型”,之后逐渐变成“先训练一个基础模型,再通过 Prompt、后训练、检索和工具把它适配到任务”。不过,上下文学习并不等于模型真正掌握了任务规则;它可能依赖示例格式、表面相关性或训练语料记忆,必须通过独立评估和分布外测试确认泛化。

从历史上看,预训练解决了三个连续问题:第一,标注样本不足时如何利用海量无标注数据;第二,不同任务如何共享语言和世界知识;第三,如何用同一基础模型覆盖更多任务。它也留下了三个长期问题:数据偏差进入参数后很难定位,训练语料可能包含隐私和版权风险,模型输出的流畅性不等于事实可靠性。

2.2 预训练目标:模型究竟在学习什么

Next-token Prediction 与交叉熵

给定 token 序列 \(x_{1:T}\),decoder-only 模型根据输入前缀 \(x_{<t}\) 预测目标 \(x_t\),使用 causal mask 保证当前位置不能读取未来 token。单个样本的平均训练损失通常写为:

\[ \mathcal{L}(\theta)=-\frac{1}{T}\sum_{t=1}^{T}\log p_\theta(x_t\mid x_{<t}). \]

在实现上,模型输出每个位置对词表的 logits,经过 softmax 得到概率,再用交叉熵与真实 token 做比较。优化器只看到“正确 token 的概率是否提高”,并不知道我们以后想让模型会写代码、做数学题或调用工具。后续能力是一个涌现式结果:如果某种结构能够降低大量语料上的平均损失,梯度就会推动模型学习这种结构。

从机器学习角度看,这相当于用一个参数化分布逼近训练语料分布。模型会同时学习语法约束、词义关系、篇章结构、代码格式、常见事实、问答模式和文档布局。一个代码仓库里的函数调用模式能降低代码 token 的预测损失;一条数学推导中的符号依赖能降低公式 token 的损失;多轮对话中的角色标记能降低特定格式的损失。模型不需要被显式告知“这是一条规则”,只要规则在数据分布中足够稳定,就可能被压缩到参数中。

概率与损失侧栏:熵、交叉熵、KL

以下均用自然对数,单位为nat。在固定上下文下,令 \(p_i\) 是目标分布,\(q_i=p_\theta(i\mid x_{<t})\) 是模型预测,二者定义在相同离散词表上且各自求和为一。不要把目标分布 \(p\) 与模型分布 \(q\) 的方向互换。中文教材对softmax、负对数似然和熵的定义可作基础参照。[9]

\[ H(p)=-\sum_i p_i\log p_i,\qquad H(p,q)=-\sum_i p_i\log q_i, \]

\[ D_{KL}(p\Vert q)=\sum_i p_i\log\frac{p_i}{q_i} =H(p,q)-H(p). \]

最后一式由前两式直接相减得到。约定 \(0\log0=0\);如果某项 \(p_i>0\) 而 \(q_i=0\),交叉熵与该方向KL为无穷。KL不是对称距离,也一般不满足三角不等式。固定 \(p\) 时熵不随模型参数变化,最小化交叉熵等价于最小化这个方向的KL;若目标由同步更新的另一个模型生成,就不能无条件把它当固定常量。

对单个one-hot标签 \(y\),交叉熵只剩 \(-\log q_y\)。这不表示现实语言在该上下文中只有一种合理续写,而是该样本只观测到一个目标,训练在许多样本上估计分布。对教学分布 \(p=(1/2,1/2)\)、\(q=(3/4,1/4)\),熵约为0.6931,交叉熵约为0.8370,KL约为0.1438,三者满足分解。这些数值由公式计算,不是模型实验。

Token监督还要计入有效位置。设 \(m_t\) 为是否参与损失的二元mask,则平均NLL为 \(-\sum_tm_t\log q_{t,y_t}/\sum_tm_t\)。若分母为零,应拒绝样本或按明确规则跳过;不能除以包含padding的总长度后,把loss变小误认为学得更好。不同长度样本先逐句平均再平均,与按全部有效token平均也不等价,需要固定统计口径。

对logits \(z\),softmax后交叉熵可写为 \(\log\sum_i e^{z_i}-z_y\)。令 \(c=\max_i z_i\),用 \(c+\log\sum_i e^{z_i-c}\) 计算第一项,避免直接指数溢出。将原始logits交给已融合log-softmax的损失接口,不应再手动softmax一次。这里讨论的是分类形式如何组成语言模型目标,通用分类的完整损失选型不在本章扩写。

分类选读:为什么通常选交叉熵而非MSE

以下用二分类说明,不另扩一套分类教材。令预测概率 \(q=\sigma(z)\)、标签 \(y\in{0,1}\)。交叉熵对logit的梯度为 \(q-y\),而取平方损失 \(L_{MSE}=\tfrac12(q-y)^2\),链式法则给出梯度 \((q-y)q(1-q)\)。CE梯度可由前述softmax推导退化得到,平方损失的结果是本书直接求导。[9]

当模型自信地预测错误,如 \(y=1,q\approx0\),CE梯度仍接近负一,MSE还要乘很小的 \(q(1-q)\),纠正信号可能很弱。CE也与分类分布的负对数似然一致,因此是token分类常用目标。这里不能推断“MSE不能分类”:概率上的平方误差可作为Brier型评分,用途不同。选损失要看输出参数化、优化与校准,不能仅因为标签是数字就把类别当有序回归值。

语言、知识、推理与行为的边界

“模型学会了知识”容易造成误解。预训练权重不是一个带版本号、权限和更新时间的数据库。更准确的说法是,模型在参数中压缩了训练数据中的统计规律和部分可重复模式。它可能记住某些长字符串,也可能只学到“某类问题通常这样回答”;两者在表面输出上很难区分。

可以把预训练产生的内容分为四层:

层次训练中体现的对象适合的工程判断
表示token、词法、句法、跨语言映射能否理解输入形式
模式文档结构、代码惯用法、解题步骤能否生成符合分布的输出
事实训练语料反复出现的实体关系是否需要检索和时效校验
行为角色、格式、拒答和服从指令主要由后训练和运行时策略塑造

推理也需要分层看待。预训练可以让模型见过大量“问题—解答—推导”的文本,学习到可复用的组合模式;但在新组合、长链条或高可靠任务中,单次生成可能仍不稳定。训练阶段学到的是能力先验,推理时是否成功还取决于采样、上下文、验证器和额外计算。把预训练损失直接等同于生产正确率,是从训练目标跨越到业务目标的常见错误。

Causal LM、Masked LM 与 Encoder-Decoder

Causal LM 只利用左侧上下文,训练目标与生成过程一致,部署为聊天模型时接口简单。Masked LM 随机遮挡输入中的部分 token,让模型利用左右文恢复缺失内容,能获得较强的双向理解表示 [6]。Encoder-decoder 结构把输入和输出分开建模,在翻译、摘要等条件生成任务上具有清晰的结构优势 [7]。

选择目标函数时,应先问产品需要什么:如果核心任务是连续生成、代码补全和对话,Causal LM 的训练—推理一致性更重要;如果核心任务是分类、检索表示或句子级理解,双向 encoder 可能更高效;如果输入与输出是两个不同序列,encoder-decoder 能显式建模条件信息;如果目标是一个统一基础模型,decoder-only 便于把各种任务转成同一种 token 预测接口。

中文工程实践还要考虑词表和语料比例。Qwen 技术报告展示了多语言、代码和中文数据共同训练时,词表设计、数据混合和评估集合会直接影响模型使用体验 [10];InternLM2 技术报告也说明,中文基础模型不能只用英文模型的 benchmark 推断能力,需要建立中文、代码、知识和对话的分层评估 [11]。

2.3 数据不是原料,而是能力设计

数据管线的基本分层

预训练数据可以按加工阶段分成 raw、filtered、deduplicated、mixed 和 packed 五种状态。raw 是抓取或采购得到的原始文档;filtered 去除明显垃圾、乱码和不合适内容;deduplicated 处理重复和近重复;mixed 根据训练目标配比;packed 才是按序列长度组织成训练样本。每一层都应保留版本、规则和统计信息,否则出现能力退化时无法回答“是模型问题还是数据版本问题”。

C4 的公开文档化工作提醒我们,网页语料的过滤规则会改变数据集组成,并可能引入语言、主题和站点偏差 [12]。The Pile 通过多源语料组合和来源说明,把“我们收集了一堆网页”推进到更可追溯的数据集治理 [13]。RefinedWeb 则显示,网页清洗、质量过滤和去重可以使相对简单的数据管线得到有竞争力的基础模型结果 [14]。这些工作共同说明:数据工程不是训练前的杂务,而是模型能力的组成部分。

清洗:过滤噪声而不是消灭多样性

常见清洗规则包括语言识别、文档长度、特殊字符比例、HTML 模板、广告密度、重复行、链接比例和质量分类器。工程上不能把“越干净”当成“越好”。过度过滤可能删除低资源语言、口语、代码注释、表格、论坛问答和专业文档,结果是模型在主流测试集上变好,却在真实用户输入上变窄。

更稳妥的做法是把过滤分成硬规则和软评分:硬规则负责删除明显违规或无法学习的内容;软评分保留分布,按桶采样并记录阈值。每次改变过滤器,都要比较文档数、token 数、语言比例、领域比例、平均长度、重复率和评估指标,而不是只看最终 loss。

质量分类器本身也会带来偏差。它可能把方言、短文本或非标准格式误判为低质量;它还可能与目标模型共享训练数据,形成循环偏差。因此数据质量评估应包含人工抽样、规则解释、分层统计和模型结果四个维度。中文、英文、代码、数学和长文档最好分别抽样,不要用一个总体平均分掩盖少数分布被删除的问题。

去重:泛化、记忆和计算效率的共同杠杆

重复文档会让模型多次看到同一个训练信号,浪费 token 预算,并增加记忆和 benchmark 泄露风险。精确去重可以通过文档哈希实现;近重复去重通常使用 n-gram、MinHash、局部敏感哈希或 embedding 相似度。Lee 等人的实验显示,去重不仅减少训练数据,还能改善泛化并降低模型对重复文本的记忆 [15]。

去重的粒度需要根据文档类型选择:网页正文适合段落或文档级去重;代码需要同时考虑文件、函数和仓库级重复;书籍和法规文本可能存在合法的版本差异,简单按相似度删除会误伤;问答数据中相同问题的不同高质量答案不能全部删掉。对工程团队而言,最重要的不是宣称“去重率达到某个数字”,而是记录算法、阈值、抽样误删率和跨数据集重复率。

数据配比:把训练预算投向目标能力

如果总训练 token 固定,增加一种数据就会减少另一种数据。数据混合因此是一个预算分配问题,而不是越多越好。通用网页提供覆盖面,书籍和长文增强篇章结构,代码改善程序模式,数学和科学文本提供符号推导,多语言数据扩大覆盖,合成数据可以定向补齐稀缺能力。

一个实用的数据配比表应至少记录:来源、语言、领域、质量分桶、token 数、采样权重、重复率、版权状态和对应评估集。T5 的系统实验说明,预训练数据规模、任务混合和训练步数之间存在耦合,不能只凭直觉选择数据比例 [7]。LLaMA 的报告也把公开数据组成、训练 token 和模型规模放在一起讨论,说明开放模型的效果并非只由参数量决定 [16]。

数据混合通常有三种策略:固定比例、温度采样和阶段性配比。固定比例容易复现;温度采样可以避免大语种或大数据源完全支配训练;阶段性配比则先用广覆盖数据学习基础,再提高代码、数学、长上下文或领域数据的权重。阶段性训练的风险是分布切换造成遗忘,因此需要在通用评估和目标评估上同时监控。

合成数据与数据闭环

合成数据可以生成题目、解答、代码、偏好对和长上下文样本,特别适合补齐人工数据稀缺的能力。但生成器的错误会被蒸馏到训练集,模板化样本会降低多样性,模型还可能反复学习自身的错误。Shumailov 等人关于递归训练的研究提示,持续使用模型生成内容替代真实分布,可能导致分布尾部消失、错误累积和模式退化 [17]。

因此合成数据不能只看数量。至少应有四个门槛:生成器与目标模型尽量隔离;使用规则、程序执行器或人工抽样验证答案;保留真实数据作为锚点;用独立测试集检查多样性和分布外能力。对代码数据,要运行单元测试、静态检查和依赖审计;对数学数据,要执行符号或数值验证;对事实数据,要与独立来源交叉核对。合成数据是能力定向工具,不是廉价 token 生产器。

2.4 Tokenizer、样本构造与有效训练信号

Tokenization 的模型影响

模型看到的不是字符、单词或句子,而是 tokenizer 产生的 token。词表大小影响 embedding 和输出层参数,分词粒度影响序列长度、跨语言效率和稀有词处理。英文常见词可能被编码成一个或几个 token;中文字符、英文缩写、数字、代码符号和路径的切分模式可能完全不同。

这会影响三类成本:同一段内容需要多少 token,决定训练和推理计算;一个概念被切成多少片,影响模型学习稳定性;特殊格式被如何分割,影响代码、JSON、URL 和工具调用格式的可靠性。比较模型成本时不能只比较“每百万 token 价格”,还要看目标语言和业务文本的 token 化膨胀率。

词表不是越大越好。更大的词表可能减少序列长度,却会增加 embedding、softmax 和通信成本;更小的词表参数压力较低,但长序列会增加注意力和位置编码负担。最终选择应基于目标语料的 token/字符比、词表覆盖率、训练速度、显存占用和下游格式稳定性。中文基础模型尤其要在中文字符、英文单词、代码标识符、数字和混合文本上做分层统计,而不是只报告一个平均压缩率。

中文、代码与模板:先固定测量对象

BPE用高频子词组合缓解稀有词问题,SentencePiece提供从原始句子训练子词模型的方法;它们是算法与工具路线,具体词表仍由训练数据和配置确定。[18][19] 本书教学输入可以固定为“订单A-123可以退款吗?”与代码 if (order_id == "A-123") return refund(100);,另加路径、连续空格、换行和emoji。它们用于暴露中文、字母、数字、标点和缩进的切分差别,不预先声称会产生多少token。

测量时记录Tokenizer制品修订、词表与merge文件哈希、normalization、特殊token策略及chat template;分别输出token ID、可见片段、长度和decode后文本。先验证round-trip是否符合该Tokenizer的规范,再比较各语言和代码样本的长度分布。不能把一种Tokenizer的整数ID送给另一模型,也不能假设相同字符串在不同词表下成本相同。上述输入只是待执行测量规约,本章没有编造实测ID或跨模型压缩率。

把教学对话装成“user问退款、assistant给答复”时,角色标记、换行与EOS也是输入契约。模板改变后,正文文字可能不变,模型读到的协议却已变化。预训练可对全部合法位置预测,SFT则可能只监督assistant位置;阶段差异由目标与mask决定,不能仅按数据文件后缀判断。模板与Tokenizer需要和模型权重一起版本化,后训练样本对齐由第3章展开。

文档边界、Packing 与样本泄露

本书以下流程建议用于定义有效训练信号。训练样本通常组织成token block。把多个短文档拼接到一个 block 可以减少 padding,提高 token 利用率,但必须正确处理文档边界,否则模型会学到本来不存在的跨文档关系。对于对话、代码文件、JSON 和书籍章节,边界 token 的设计会影响模型是否知道“一个样本在这里结束”。

Packing 还可能带来评估污染:如果一个训练 block 把不同文档拼在一起,近邻内容可能通过上下文泄露。更稳妥的管线会在 packing 前完成文档级切分,在评估时按文档或主题隔离训练和验证集合,并检查重复 n-gram。验证集不能只是随机抽取训练网页的另一段,因为随机切分会让近重复内容同时出现在训练和评估中。

边界符告诉模型内容在何处结束,却不自动阻止跨文档注意力。连续语料预训练可以显式选择允许跨文档读的策略;独立对话或任务样本若要求隔离,则需block-diagonal等可见性约束,并正确重置或延续位置ID。Attention mask决定能读哪里,loss mask决定哪些目标产生梯度,两者职责不同。先按原始文档、仓库或去重簇划分训练/验证,再分别packing,避免一个源文档的相邻切块落入不同集合。所有隔离策略都应进入数据manifest。

长上下文数据

把最大上下文从 4K 直接扩到 128K,不等于模型自动获得了长文档能力。模型需要在训练中看到足够多的长序列、跨段引用、远距离检索和结构化文档。长序列还会显著增加 attention 计算和激活内存,训练预算不能只按 token 数粗略估计。

长上下文数据至少分成四类:自然长文档、人工拼接文档、远距离依赖任务和长上下文问答。人工拼接可以测试位置和检索能力,但不能替代真实长文档;长文档问答可以测试使用能力,但如果答案总在开头或结尾,不能说明模型能稳定处理中间信息。评估时要改变答案位置、干扰内容、文档数量和引用距离,避免得到虚假的“长上下文支持”。

2.5 Scaling Law:怎样分配模型、数据与算力

经验规律与工程意义

Scaling Law 的核心观察是,在一定规模范围内,验证损失会随模型参数量、训练 token 数和计算量以相对平滑的幂律下降 [20]。它不是物理定律,也不能保证任何新架构都服从同一曲线,但它提供了一个重要工程工具:在真正投入大规模训练之前,可以用小模型和短训练估算不同预算下的趋势。

为避免与第1章的隐藏宽度 \(D\) 冲突,本节用 \(P\) 表示参数量,\(N_{tok}\) 表示训练token数,\(C_{train}\) 表示训练计算。一个用于说明参数/数据折中的形式是:

\[ \widehat L(P,N_{tok})=L_\infty+aP^{-\alpha}+bN_{tok}^{-\beta}. \]

这类拟合描述给定架构族与数据配方中的经验趋势,不把计算量再当独立变量任意叠加。对普通Dense训练,可在特定计数口径下用 \(C_{train}\approx6PN_{tok}\) 作为粗估,长序列Attention、不同算子和稀疏激活会使实际账本偏离。参数与token在固定计算下相互约束,计算最优也不等于推理成本最优。[20][21]

实际拟合需要固定Tokenizer、数据分布、优化器和架构族,并报告测量范围与误差。一个实验若同时改变数据质量、参数和训练步数,就不能只归因于参数scaling。不要把经验系数和最优比例照搬到中文业务语料,更不能把验证损失下降直接换算成业务正确率。

Chinchilla 与 compute-optimal

早期行业实践倾向于优先扩大参数量,但 Chinchilla 研究指出,在固定训练计算下,很多大模型实际上训练 token 不足;适当减少参数并增加训练数据,可以得到更低的验证损失 [21]。这不是“模型越小越好”,而是说明容量和训练充分度必须成比例设计。

对项目规划可以采用如下顺序:先确定目标推理成本和延迟,得到可接受的激活参数量;再依据目标能力和可获得高质量数据估计训练 token;最后反推训练计算、集群时长和 checkpoint 存储。若数据质量不足,继续堆 token 可能只是重复噪声;若模型容量不足,增加同分布数据的收益会变小;若训练没有收敛,盲目做后训练会把基础缺陷包装成行为问题。

需要区分三种“规模”:总参数、激活参数和训练 token。MoE 模型可以拥有更大的总容量而只激活部分参数,但路由和通信有额外代价;密集模型每个 token 都使用全部参数,算力结构简单但激活成本高。后续 Infra 章节会讨论这些选择如何影响并行和部署,本章只保留一个判断原则:训练规模必须和目标能力、数据质量、推理预算一起设计。

Loss 与能力不是一条直线

验证 loss 是重要指标,但它不是所有能力的充分统计量。它对高频 token 和常见格式非常敏感;一个模型可以通过更好地预测模板文本降低 loss,却未必提高少数复杂任务的准确率。反过来,针对数学、代码或工具格式的定向数据可能提高业务能力,却让总体 loss 变化很小。

因此训练曲线应与分层能力曲线一起看:通用 loss、按语言 loss、按领域 loss、长上下文 loss、代码执行成功率、数学答案准确率、结构化输出通过率和安全回归。每一项都要固定评估版本,记录置信区间和样本数量。不能从一次 benchmark 的涨跌推断模型整体进步,尤其当测试集较小、污染未知或评测提示未公开时。

规模预算如何落到优化过程

Batch、学习率与训练预算

在 token 级训练中,global batch size 决定一次更新看到多少 token。增大 batch 可以提高硬件利用率并降低梯度噪声,但可能需要调整学习率、warmup 和正则化;batch 太大也可能减少参数更新次数,使模型在固定 token 预算下的优化轨迹改变。中文教材对交叉熵、梯度下降和深度网络训练的系统解释,有助于把这些经验规则还原成优化问题 [9]。

学习率通常经历 warmup、稳定训练和衰减阶段。warmup 用于避免随机初始化或大 batch 下的早期更新过大;衰减让模型在后期更稳定地收敛。实际训练还需要监控梯度范数、logit 范围、loss spike、NaN、激活溢出和不同数据桶的 loss。混合精度能节约显存和提高吞吐,但数值稳定性、loss scaling 和归一化实现都可能改变结果。

AdamW、正则化与数据顺序

Adam 类优化器用一阶和二阶动量调整每个参数的更新尺度,适合 Transformer 这种参数尺度差异明显的网络。AdamW 将权重衰减与自适应梯度更新解耦;在Adam中把L2正则项直接加进梯度,并不等同于这种权重衰减。[22]工程上不要把优化器当成可随意更换的实现细节:优化器、学习率、权重衰减、梯度裁剪、batch 和数据顺序共同决定训练轨迹,改变其中任何一个都可能需要重新做小规模校准。

数据顺序也会影响能力形成。若模型过早大量看到某一领域,可能在该领域快速下降但损害通用分布;若高质量数据只在训练尾部出现,可能改善最终 checkpoint 却减少可用训练步数。数据混合应与学习率和阶段计划联合设计,并在中间 checkpoint 上做评估,确认收益来自稳定学习而不是最后一次偶然波动。

训练中间评估与故障归因

成熟训练项目不会等到最终模型才评估。每隔固定 token 或 step 保存 checkpoint,并对固定小集合执行快速评估:通用语言、中文、多语言、代码、数学、长上下文、格式遵循和安全。遇到 loss spike 时,先区分数据异常、数值不稳定、节点故障、恢复错误和学习率问题;遇到某领域退化时,再检查数据配比、过滤和遗忘,而不是立即扩大模型。

故障归因需要可重放。至少要保存 tokenizer 版本、数据 manifest、采样权重、随机种子、优化器状态、学习率状态、代码版本、配置和评估版本。Checkpoint 只保存模型权重而没有 optimizer state,通常无法严格恢复训练;只保存最后一个 checkpoint,则无法比较退化发生的时间点。训练可观测性属于 Infra 的实现内容,但“哪些状态必须留下”是算法和工程共同决定的。

2.6 数据污染、记忆与隐私

Benchmark contamination

如果测试集内容或近似内容出现在训练语料里,模型在测试集上的高分就不能代表泛化。污染既可能是完全重复,也可能是题目、选项、解答和网页讨论的近似重复。HellaSwag 等基准的设计展示了如何用对抗性候选和常识完成任务,但任何公开 benchmark 长期存在,都必须面对进入训练语料的可能性 [23]。

污染检查应在训练前和评估前都做。训练前对数据与 benchmark 做精确和近似匹配;评估前记录 benchmark 版本、发布时间和是否可能被抓取;发布结果时披露污染检测方法。只给出一个分数而不说明训练数据边界,会让读者无法判断结果是推理、记忆还是泄露。

Memorization 与隐私风险

模型可能记忆训练数据中的罕见序列,尤其当内容重复、样本稀有、模型容量较大或训练步数较多时。Carlini 等人展示了从语言模型中抽取训练数据的风险 [24],后续研究进一步量化了不同模型、数据重复度和序列稀有度下的记忆行为 [25]。这说明“公开网页”不等于“可以无风险地训练和再生成”。

工程上要把隐私治理前移:在数据进入训练前识别手机号、邮箱、密钥、地址和内部标识;对必须保留的敏感数据做权限和用途审计;对模型做 canary、成员推断、提示抽取和长字符串复现测试;对发布模型设置使用政策和响应过滤。去重、减少罕见敏感样本重复和抽取攻击回归可以帮助发现风险,但不能把它们当作隐私保证。

版权与数据治理

版权问题不只是法务问题,也影响工程可追溯性。每个数据源最好记录获取方式、许可信息、抓取时间、保留理由、过滤版本和退出机制。若模型出现某类受保护内容复现,团队需要知道哪些来源可能贡献了该模式,才能进行风险评估或数据修订。数据卡、模型卡和评估报告的价值在于让训练决策可解释,而不是为报告增加形式化章节。

2.7 评估:从 loss 到能力证据

三层评估框架

可以把预训练评估分成三层。第一层是训练健康度:loss、困惑度、梯度、吞吐和数值稳定性,回答“训练是否正常”。第二层是能力覆盖:语言、知识、代码、数学、多语言、长上下文和结构化输出,回答“模型学到了什么”。第三层是风险与泛化:污染、记忆、偏见、安全、分布外和真实任务,回答“这些能力是否可信、是否可用”。

HELM 提倡从准确性、校准、鲁棒性、公平性、偏见、毒性和效率等多个维度评估模型 [26]。这个思路对基础模型尤其重要:一个总体平均分会掩盖中文能力、长上下文、拒答行为和推理成本的变化。评估集最好分为开发集、冻结测试集和真实任务集;开发集用于迭代,冻结集用于发布决策,真实任务集连接模型指标和产品成功标准。

评估设计的常见陷阱

第一,测试集过小导致偶然波动被误认为进步;第二,提示模板改变导致模型分数变化,却被解释成训练收益;第三,使用模型自己生成的评判结果,形成自评偏差;第四,只看准确率,不看格式、延迟、成本和拒答;第五,训练数据和评估数据分布高度重叠。

解决方式是固定提示、记录版本、报告样本数和置信区间,并用程序化判定代替主观判断。代码任务尽量执行测试,数学任务尽量验证最终答案,JSON 任务使用 schema 校验,检索任务拆分召回和生成,安全任务同时看攻击成功率与过度拒答率。评估不是发布前的一次考试,而是训练闭环中的反馈信号。

基础模型、后训练与应用评估的分工

Base model 评估关注语言建模和潜在能力;SFT、偏好优化和推理强化之后,评估才关注指令遵循、风格、安全和推理策略;应用系统还要评估检索、工具、权限、状态、回滚和人工接管。把应用失败全部归因于预训练,会导致错误的解决方案:事实过期通常需要 RAG,格式不稳可能需要 schema 和重试,工具误用需要权限和验证,推理不足才可能需要后训练或更强模型。

对后端工程师来说,最有价值的模型评估表不是“模型总分排名”,而是能力—成本—风险矩阵。例如:代码生成通过率、每次调用 token、执行延迟、失败类型、敏感操作误调用率、需要人工修复的比例。只有把模型输出放入真实工作流,才能判断预训练能力是否转化成工程价值。

从公开配方看训练重点的变化

不同基础模型报告的共同点,不是使用了完全相同的网络配置,而是都把数据、训练阶段和评估作为一个整体说明。LLaMA 代表了用相对克制的架构和公开数据进行高效训练的路线 [16];Llama 3 则进一步强调更大规模、高质量数据、合成数据、长上下文和严格后训练之间的联动 [27]。这类报告对工程师最有价值的地方,不是记住某个模型的层数,而是看到能力提升通常来自多项配方同时变化,不能把结果简单归因于参数量。

复现一个训练结果时,应先列出可比条件:同一 tokenizer、相近数据分布、相同 token 预算、相同上下文长度、相近优化器和一致的评估脚本。如果只能复现网络结构,却拿不到数据配比和过滤规则,那么复现的只是一个外形相似的模型,不能复现能力。报告中的“使用了某类数据”也不够,最好知道来源数量、采样权重、去重策略和阶段变化。

能力迁移与遗忘

继续训练某一领域时,目标能力可能增强,通用能力也可能退化。这个现象可以从分布变化理解:梯度更新更频繁地服务新分布,旧分布中的参数结构被改写。传统机器学习中,训练误差、泛化误差、偏差和方差的区分能帮助我们理解这种权衡 [28]。对语言模型而言,还要增加语言、领域、长度和格式四个维度的分层检查。

一个可操作的实验是保留三组数据:通用锚点、目标领域、分布外挑战。每个 checkpoint 都在三组数据上测试,不只看目标领域是否上升。如果目标领域上升、通用锚点下降,说明需要降低领域采样温度、混入回放数据、调整学习率或缩短继续训练阶段;如果三组都不变,则可能是数据量不足、任务目标不匹配或模型容量已成为瓶颈。

训练结果的可解释记录

训练报告应能回答五个问题:模型看过多少有效 token;每类数据占比是多少;在哪个阶段出现能力变化;哪些评估结果来自冻结测试集;哪些风险仍然未知。建议把每次实验记录为一条不可变 manifest,关联数据版本、代码提交、配置、硬件、随机种子、checkpoint 和评估结果。这样做的收益和后端系统中的事件审计类似:失败之后可以重放,成功之后也知道为什么成功。

2.8 从预训练到后训练:边界与工程决策

Pretraining、Mid-training、Post-training

预训练使用大规模、相对广泛的数据,让模型形成语言和领域先验;mid-training 或 continued pretraining 仍然常用 next-token prediction,但把数据分布定向到代码、数学、中文、长上下文或行业语料;post-training 则使用指令、偏好、轨迹和环境反馈,让模型学习“如何按要求行动”。三者的边界不是由文件名决定,而是由目标、数据和损失共同决定。

当问题是“模型完全不知道某领域术语和文档模式”,继续预训练可能有效;当问题是“知道内容但不会按格式回答”,SFT 或结构化解码更合适;当问题是“多个答案都合理但偏好不同”,偏好优化更合适;当问题是“实时事实变化”,检索和工具比重新训练更合适;当问题是“复杂任务一次生成不稳定”,推理时搜索、验证器或推理强化可能更合适。

缺口优先候选阶段或系统动作数据与验证
稳定领域语料与术语缺失继续预训练 / mid-training授权领域文档、通用锚点和遗忘评估
知识已有但指令、格式或工具轨迹不稳SFT,必要时约束解码演示及assistant监督位置,独立任务集
多种候选间存在明确偏好偏好优化成对比较与偏好偏差回归
任务可验证但复杂推理预算或验证型后训练外部判定、成本与停止条件
时效事实、权限与外部状态变化检索、规则或工具来源版本、授权范围和业务回执

这些是本书的初筛建议,不是由某篇模型报告证明的通用处方。以教学8B企业问答方案为例,先按去重簇冻结授权文档的训练/验证/测试划分,再在相同有效token预算下比较通用与领域配比。记录held-out NLL、领域成功率、通用回归、污染与成本;测试集不能拿去调配比。领域词汇改善但问答格式不稳时,再引入示范,而不是把更多原始文档当作指令数据。这里没有实际训练结果。

选择训练还是系统方案

可以用四个问题做初筛:

  1. 缺的是知识、能力、行为还是外部状态?
  2. 目标是否需要实时更新、权限控制和可审计性?
  3. 失败是否能被检索、工具、验证器或工作流拦截?
  4. 训练成本是否低于长期推理和人工修复成本?

如果答案涉及动态事实、数据库状态或外部动作,优先在系统层解决;如果是稳定的领域语言、格式或推理模式,再考虑训练。训练改变的是模型的通用分布,系统控制改变的是一次调用的上下文和权限。把两者混为一谈,会得到一个既昂贵又难以回滚的模型。

从输入到证据的评审顺序

先查来源与划分,再查目标和有效监督位置,接着查参数/token/计算预算,最后比较分层评估及成本。单位时间吞吐、有效token比例与单位计算的能力收益是不同指标。算法与Infra应共享数据manifest、更新步定义和评估版本,避免把硬件更忙直接写成学习更有效。恢复训练所需状态和平台实现由第8章展开,本章保留数据与目标的输入契约。

2.9 本章小结:能力形成不等于行为可用

预训练的作用,是让模型在大量数据中压缩语言、知识、代码和任务模式;数据、目标、Tokenizer、规模和算力共同决定这种压缩覆盖什么、遗漏什么,以及训练成本是否值得。可靠的预训练并不等于只追求更低 loss 或更多 token,而是建立一条来源可追踪、配比可解释、过程可恢复、评估可比较的能力生产链路。

但参数中形成的能力仍是行为的原材料。预训练模型会延续训练分布中的文本,却不会天然理解当前用户的目标、输出格式、安全边界和协作方式;更不会自动区分“回答得像”与“应该这样回答”。第3章因此从这一缺口出发,回答如何用示范、偏好和可验证奖励,把原始能力塑造成可用行为。

2.10 参考资料

  1. Bengio, Y., Ducharme, R., Vincent, P., & Jauvin, C,A Neural Probabilistic Language Model,2003。核验日期:2026-10-16。
  2. Mikolov, T., Chen, K., Corrado, G., & Dean, J,Efficient Estimation of Word Representations in Vector Space,2013。核验日期:2026-10-16。
  3. Sutskever, I., Vinyals, O., & Le, Q. V,Sequence to Sequence Learning with Neural Networks,2014。核验日期:2026-10-16。
  4. Vaswani, A., et al,Attention Is All You Need,2017。核验日期:2026-10-16。
  5. Radford, A., et al,Improving Language Understanding by Generative Pre-Training,2018。核验日期:2026-10-16。
  6. Devlin, J., Chang, M.-W., Lee, K., & Toutanova, K,BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding,2019。核验日期:2026-10-16。
  7. Raffel, C., et al,Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer,2020。核验日期:2026-10-16。
  8. Brown, T. B., et al,Language Models are Few-Shot Learners,2005。核验日期:2026-10-16。
  9. Zhang, A., Lipton, Z. C., Li, M., & Smola, A. V,动手学深度学习:softmax回归,中文在线版2.0.0。核验日期:2026-10-16。
  10. Bai, J., et al,Qwen Technical Report,2023 / original Qwen。核验日期:2026-10-16。
  11. Cai et al. / InternLM,InternLM2 Technical Report,2024。核验日期:2026-10-16。
  12. Dodge, J., et al,Documenting Large Webtext Corpora: A Case Study on the Colossal Clean Crawled Corpus,2021。核验日期:2026-10-16。
  13. Gao, L., et al,The Pile: An 800GB Dataset of Diverse Text for Language Modeling,2020。核验日期:2026-10-16。
  14. Penedo, G., et al,The RefinedWeb Dataset for Falcon LLM: Outperforming Curated Corpora with Web Data Only,2023。核验日期:2026-10-16。
  15. Lee, K., Ippolito, D., Nystrom, A., et al,Deduplicating Training Data Makes Language Models Better,2022。核验日期:2026-10-16。
  16. Touvron, H., et al,LLaMA: Open and Efficient Foundation Language Models,2023。核验日期:2026-10-16。
  17. Shumailov, I., et al,AI Models Collapse When Trained on Recursively Generated Data,2024。核验日期:2026-10-16。
  18. Sennrich, Haddow, Birch,Neural Machine Translation of Rare Words with Subword Units,2016 ACL。核验日期:2026-10-16。
  19. Kudo, Richardson,SentencePiece: A simple and language independent subword tokenizer and detokenizer for Neural Text Processing,2018 EMNLP。核验日期:2026-10-16。
  20. Kaplan, J., et al,Scaling Laws for Neural Language Models,2001。核验日期:2026-10-16。
  21. Hoffmann, J., et al,Training Compute-Optimal Large Language Models,2022。核验日期:2026-10-16。
  22. Loshchilov, Hutter,Decoupled Weight Decay Regularization,2019 / arXiv v3。核验日期:2026-10-16。
  23. Zellers, R., et al,HellaSwag: Can a Machine Really Finish Your Sentence?,2019。核验日期:2026-10-16。
  24. Carlini, N., et al,Extracting Training Data from Large Language Models,2012。核验日期:2026-10-16。
  25. Carlini, N., et al,Quantifying Memorization Across Neural Language Models,2023。核验日期:2026-10-16。
  26. Liang, P., et al,Holistic Evaluation of Language Models,2023。核验日期:2026-10-16。
  27. Grattafiori et al. / Llama Team,The Llama 3 Herd of Models,2024 / arXiv v3。核验日期:2026-10-16。
  28. 周志华:《机器学习》,清华大学出版社,2016。https://cs.nju.edu.cn/zhouzh/zhouzh.files/publication/MLbook2016.htm 访问日期:2026-09-22,周志华:《机器学习》,清华大学出版社,2016。,2016。核验日期:2026-10-16。