跳转至

语言模型与训练目标

本章导读:大模型的一切能力都建立在“下一个 token 预测”这个看似简单的目标上。面试中,围绕损失函数、困惑度、Scaling Law、采样策略和训练稳定性的追问非常多。本章把这些概念串成一条因果链:概率建模 → 最大似然 → 交叉熵 → 困惑度 → 规模法则 → 采样与评估。

阅读建议:重点掌握第 2、3、5 节的公式推导,以及第 6 节对 Scaling Law 的“结论 + 适用边界”表述。

核心要点

  • 自回归语言模型用链式法则把序列概率分解为逐 token 条件概率的乘积。
  • 最大似然估计等价于最小化交叉熵,困惑度是交叉熵的指数形式,可理解为“平均候选分支数”。
  • 训练用 teacher forcing,所有位置可并行计算损失;推理必须自回归,二者存在 exposure bias。
  • 训练算力常用 \(C\approx 6ND\) 估算,其中 \(N\) 为参数量、\(D\) 为训练 token 数。
  • Chinchilla 给出计算最优配比约为 20 token/参数,但现代模型普遍“过训练”以降低推理成本。
  • 温度、top-k、top-p 改变的是采样分布,不改变模型本身的知识;参数选择要结合任务容错率。
  • 困惑度低不等于能力强,评测要区分知识、推理、指令遵循、长上下文与安全性。
  • 训练稳定性问题(loss spike、梯度爆炸)通常要从数据、学习率、数值精度、归一化位置联合排查。

1. 语言模型是什么

给定词表 \(\mathcal{V}\) 和长度为 \(T\) 的 token 序列 \(x_{1:T}=(x_1,\dots,x_T)\),自回归语言模型定义:

\[ P(x_{1:T})=\prod_{t=1}^{T}P(x_t\mid x_{<t}) \]

其中 \(x_{<t}=(x_1,\dots,x_{t-1})\) 是前缀,\(P(x_t\mid x_{<t})\) 由模型输出 logits 后经 softmax 得到:

\[ P(x_t=v\mid x_{<t})=\frac{\exp(z_{t,v})}{\sum_{u\in\mathcal{V}}\exp(z_{t,u})} \]

\(z_{t,v}\) 是模型在位置 \(t\) 对词 \(v\) 的未归一化分数(logit)。

这个定义看起来简单,但它把所有任务统一成了条件续写:

  • 翻译:“把下面中文翻译成英文:……\n英文:” → 续写英文;
  • 问答:“问题:……\n回答:” → 续写答案;
  • 代码:“根据以下函数签名补全实现:……” → 续写代码;
  • 工具调用:模型续写出结构化的函数名与参数。

面试点:为什么 next-token prediction 能产生“推理”能力?一种解释是,预测下一个 token 需要隐式建模文本背后的世界规律、逻辑关系与任务结构;推理 token(CoT)把中间计算显式写进上下文,降低了单步预测的难度。

2. 最大似然与交叉熵

2.1 从最大似然到损失函数

给定训练集 \(\mathcal{D}=\{x^{(i)}\}_{i=1}^{M}\),假设样本独立,最大似然估计为:

\[ \hat{\theta}=\arg\max_{\theta}\sum_{i=1}^{M}\log P_\theta(x^{(i)}) \]

取负号并除以 token 总数 \(N_{\text{tok}}\),得到平均负对数似然:

\[ \mathcal{L}(\theta)=-\frac{1}{N_{\text{tok}}}\sum_{i=1}^{M}\sum_{t=1}^{T_i}\log P_\theta(x_t^{(i)}\mid x_{<t}^{(i)}) \]

这就是语言模型训练使用的交叉熵损失。由于标签是 one-hot 的“真实下一个 token”,交叉熵等价于最大化正确 token 的 log 概率。

2.2 梯度直觉

对单个位置,softmax + 交叉熵对 logits 的梯度为:

\[ \frac{\partial \mathcal{L}_t}{\partial z_{t,v}}=P_\theta(v\mid x_{<t})-\mathbb{1}[v=x_{t+1}] \]

即“预测分布减去真实分布”。模型会把正确 token 的概率往上推,把其他 token 往下压。这个简洁的梯度形式是 softmax 回归被广泛使用的原因之一。

2.3 困惑度(Perplexity)

\[ \mathrm{PPL}=\exp(\mathcal{L})=\exp\left(-\frac{1}{N_{\text{tok}}}\sum\log P_\theta(x_t\mid x_{<t})\right) \]

直观理解:如果模型在每一步都等价于在 \(k\) 个候选词中均匀猜测,则 \(\mathrm{PPL}=k\)。PPL 越低,模型对语料的预测越确定。

换算成比特/字节:

\[ \text{bits per token}=\frac{\mathcal{L}}{\ln 2} \]

PPL 的局限:

  • 依赖分词器:不同词表的 PPL 不可直接比较;
  • 依赖语料领域:在代码上训练的模型,代码 PPL 低,不代表通用能力强;
  • 不反映指令遵循、推理、安全性;
  • 对长尾 token 敏感,可能被高频模式“刷低”。

面试表达:PPL 是“模型对这批数据的平均惊讶程度”,适合做同词表、同分布下的训练监控,不适合作为跨模型能力排名。

3. 训练目标与训练过程

3.1 Teacher Forcing 与并行训练

训练时,位置 \(t\) 的输入是真实前缀 \(x_{<t}\),标签是 \(x_t\)。整条序列可以一次前向,所有位置的损失并行计算。这称为 teacher forcing。

优点:训练高效、梯度稳定;缺点:训练时模型从未见过自己的错误输出,推理时一旦偏离训练分布,误差会累积,称为 exposure bias。

3.2 优化器与学习率

大模型通常使用 AdamW:

\[ m_t=\beta_1 m_{t-1}+(1-\beta_1)g_t,\qquad v_t=\beta_2 v_{t-1}+(1-\beta_2)g_t^2 \]
\[ \theta_t=\theta_{t-1}-\eta_t\left(\frac{\hat{m}_t}{\sqrt{\hat{v}_t}+\epsilon}+\lambda\theta_{t-1}\right) \]

其中 \(\hat{m}_t,\hat{v}_t\) 是偏差修正后的矩估计,\(\lambda\) 是解耦权重衰减。

常见超参(量级):

  • \(\beta_1=0.9\),\(\beta_2=0.95\)(大模型常用 0.95 而非 0.999,因训练步数少、梯度噪声大);
  • 权重衰减 0.1;
  • 梯度裁剪 1.0;
  • warmup 占总步数的 1%–5%;
  • 学习率峰值 \(1\times10^{-4}\) 到 \(3\times10^{-4}\)(取决于模型大小与 batch size);
  • 余弦退火到峰值的 10% 左右。

3.3 批量大小与学习率

有效 batch size 增大时,梯度噪声降低,可以使用更大的学习率。经验规则:batch size 翻倍,学习率近似翻倍(linear scaling rule),但超过临界 batch size 后收益递减。

大模型训练常用“梯度累积”在有限显存下模拟大 batch。注意:梯度累积与 BatchNorm 不兼容,但 Transformer 用 LayerNorm/RMSNorm,不受影响。

3.4 Loss Spike 的排查

训练大模型时 loss 突然飙升是常见问题,可能原因:

  1. 数据问题:脏数据、重复格式、异常长序列、空样本。
  2. 数值问题:FP16 溢出、softmax 全 mask、除零、attention logits 过大。
  3. 优化问题:学习率过大、warmup 不足、梯度爆炸。
  4. 结构问题:Post-LN 深层不稳定、初始化尺度不当。
  5. 分布式问题:某个 rank 的数据或梯度异常、通信不同步。

处理手段:回滚 checkpoint、跳过异常 batch、降低学习率、加强梯度裁剪、改用 BF16、检查数据管线、增加监控(梯度范数、激活范数、loss 分位)。

4. 训练与推理的差异

维度 训练 推理
输入 真实前缀(teacher forcing) 模型自己生成的前缀
并行性 序列维度全并行 逐 token 自回归
计算特征 大矩阵乘,compute-bound decode 阶段矩阵-向量,memory-bound
显存 参数 + 梯度 + 优化器状态 + 激活 参数 + KV Cache
目标 拟合数据分布 按任务采样高质量输出

推理阶段的采样策略因此变得重要:同样的模型,不同的解码方式会带来截然不同的体验。

5. 解码与采样策略

模型输出的是每个位置的概率分布,如何从中选 token 决定生成风格。

5.1 贪心与束搜索

  • 贪心(greedy):每步取概率最大的 token。确定性强,但容易重复、缺乏多样性。
  • 束搜索(beam search):维护 \(k\) 条候选序列,每步扩展并保留总分最高的 \(k\) 条。适合翻译等有明确目标的任务,不适合开放式生成(容易生成“安全但平庸”的文本)。

5.2 温度采样

\[ P_T(x_t=v)=\frac{\exp(z_{t,v}/T)}{\sum_u \exp(z_{t,u}/T)} \]
  • \(T<1\):分布更尖锐,输出更确定、更保守;
  • \(T>1\):分布更平坦,输出更多样,但更容易胡说;
  • \(T\to 0\):退化为贪心。

5.3 Top-k 与 Top-p

  • Top-k:只保留概率最高的 \(k\) 个 token,重新归一化后采样。\(k\) 固定,不随分布形状自适应。
  • Top-p(nucleus):按概率从高到低累加,保留累计概率达到 \(p\) 的最小集合。分布尖锐时候选少,分布平坦时候选多,更自适应。
  • Min-p:保留概率不低于最大概率 \(p_{\min}\) 倍的 token,近年较流行,能在高温下仍保持一定连贯性。

常见组合:\(T=0.7\)、top-p \(=0.9\);创意写作提高温度,代码/数学降低温度。

5.4 重复惩罚

\[ z'_{t,v}=\begin{cases}z_{t,v}/\theta & v\in\text{已生成集合}\\ z_{t,v} & \text{否则}\end{cases} \]

\(\theta>1\) 时降低已出现 token 的概率,缓解复读。惩罚过强会导致语言不自然、专有名词被改写。也可用 frequency/presence penalty。

5.5 采样参数不是“调模型”

需要强调:温度、top-p 只改变从分布中取样的方式,不会让模型“学会”新知识。若模型不知道答案,降低温度只会让它更自信地犯错。面试中常被追问“如何减少幻觉”,答案不应只是“调低 temperature”。

6. Scaling Law

6.1 经验规律

Kaplan et al. (2020) 发现,在固定计算预算下,模型损失与参数量 \(N\)、数据量 \(D\)、计算量 \(C\) 呈幂律关系:

\[ L(N)\approx\left(\frac{N_c}{N}\right)^{\alpha_N},\qquad L(D)\approx\left(\frac{D_c}{D}\right)^{\alpha_D},\qquad L(C)\approx\left(\frac{C_c}{C}\right)^{\alpha_C} \]

其中 \(\alpha_N\approx0.076\)、\(\alpha_D\approx0.095\)、\(\alpha_C\approx0.050\)(论文拟合值,量级参考)。

核心结论:损失随规模平滑下降,这为“大力出奇迹”提供了经验依据,也让小规模实验可以外推大模型表现。

6.2 Chinchilla 的计算最优配比

训练算力近似:

\[ C\approx 6ND \]

其中前向每个 token 约 \(2N\) FLOPs,反向约 \(4N\) FLOPs。Chinchilla(Hoffmann et al., 2022)在固定 \(C\) 下联合优化 \(N\) 与 \(D\),得到:

\[ N_{\text{opt}}\propto C^{0.5},\qquad D_{\text{opt}}\propto C^{0.5},\qquad \frac{D_{\text{opt}}}{N_{\text{opt}}}\approx 20 \]

即“每个参数约配 20 个训练 token”。Chinchilla 70B 用 1.4T token 训练,性能超过更大的 Gopher 280B,说明此前的模型普遍“参数过大、数据不足”。

6.3 现代实践:过训练(over-training)

Chinchilla 优化的是“训练算力最优”,但产品还要考虑推理成本。给定推理需求,更小的模型配更多数据,虽然训练更贵,但推理更便宜。于是现代模型普遍远超 20 token/参数:

  • Llama 3 8B 使用约 15T token(公开资料),远高于 Chinchilla 最优;
  • 小模型(1B–8B)过训练尤其明显,因为部署成本敏感。

面试表达:Chinchilla 回答“给定训练算力,参数和数据怎么分”;实际选型还要加一个约束——“给定推理预算,模型要多小”,于是最优配比会向更多数据、更小模型偏移。

6.4 Scaling Law 的边界

  • 幂律在极大规模可能出现拐点或收益递减;
  • 数据质量、数据重复、课程学习会改变系数;
  • 下游能力(推理、指令遵循)不一定随损失平滑提升,可能出现“涌现”;
  • 评测污染会让 scaling 预测失真;
  • 多模态、MoE、长上下文有各自的缩放规律,不能直接套用稠密模型结论。

7. 评估体系

7.1 三类评估

类型 例子 优点 局限
困惑度/损失 验证集 PPL 便宜、连续、适合训练监控 与下游能力脱节
基准测试 MMLU、GSM8K、HumanEval、BBH 可比较、覆盖广 污染、饱和、prompt 敏感
人类/模型评审 Arena Elo、MT-Bench、A/B 贴近真实体验 昂贵、主观、偏差

7.2 常见基准

  • MMLU:57 个学科的多选题,考知识广度;已接近饱和,需看细分领域。
  • GSM8K / MATH:小学数学/竞赛数学,考多步推理;对 prompt 与采样敏感。
  • HumanEval / MBPP:代码生成,用 pass@k 评估;与真实工程能力有差距。
  • BBH / ARC-Challenge:复杂推理。
  • MT-Bench / Arena:多轮对话质量、人类偏好胜率。
  • 长上下文:Needle-in-a-Haystack、RULER、LongBench;注意“能检索到”不等于“能推理”。
  • 安全:毒性、越狱成功率、隐私泄露。

7.3 评测的陷阱

  1. 数据污染:测试集出现在预训练语料中,分数虚高。可用 n-gram 重叠、生成式探测、时间切分检测。
  2. prompt 敏感:同一模型换模板分数波动可达数个百分点,比较时必须固定协议。
  3. 采样方式:greedy、majority voting、pass@k 的结论不同。
  4. 选择性报告:只报擅长的 benchmark。
  5. LLM-as-judge 偏差:位置偏差、长度偏好、自我偏好,需要交换顺序、校准、人工抽检。

8. 从“预测下一个 token”到“有用助手”

预训练目标只教模型“续写”,不教它“听从指令”。从基座模型到助手,需要后训练:

  1. SFT:用指令-回答数据教模型对话格式与任务模式。
  2. 偏好对齐:RLHF/DPO 等,让输出更符合人类偏好(有用、无害、诚实)。
  3. 推理增强:用可验证奖励的 RL 训练长链推理(RLVR)。
  4. 工具使用:训练模型调用函数、使用检索、执行代码。

这些内容分别在《SFT 与参数高效微调》《对齐:RLHF、DPO 与 GRPO》中展开。

9. 面试高频问题

Q1:语言模型的训练目标是什么?为什么用交叉熵?

  • 目标是最大化训练语料的似然,等价于最小化平均负对数似然。
  • 交叉熵衡量预测分布与真实 one-hot 分布的差异,梯度形式简洁(预测减真实)。
  • 它对数概率敏感,能持续优化长尾 token,适合大规模训练。

Q2:困惑度的定义和局限?

  • \(\mathrm{PPL}=\exp(\text{平均交叉熵})\),可理解为平均候选分支数。
  • 依赖分词器与语料分布,跨模型/跨领域不可直接比较。
  • 不反映推理、指令遵循、安全等下游能力。

Q3:训练和推理有什么不一致?如何缓解?

  • 训练用真实前缀,推理用自生成前缀,存在 exposure bias。
  • 缓解:大规模数据、SFT、RL 后训练、 scheduled sampling(较少用于大模型)、推理时 self-correction。
  • 更根本的是让训练分布覆盖推理时的错误分布,例如 on-policy 蒸馏/RL。

Q4:\(6ND\) 是怎么来的?

  • 前向每个 token 约 \(2N\) FLOPs(每个参数一次乘加),反向约 \(4N\)(计算输入梯度与参数梯度)。
  • 总训练算力 \(C\approx 6ND\)。
  • 这是稠密模型的粗略估算,不含注意力随序列长度的额外开销、MoE 只算激活参数、通信与重计算开销。

Q5:Chinchilla 的结论是什么?现在还适用吗?

  • 固定训练算力下,参数量和数据量应同比例增长,约 20 token/参数。
  • 现代模型为了降低推理成本,普遍过训练(更多数据、更小模型)。
  • 因此 Chinchilla 是“训练最优”的基准,不是“产品最优”的终点。

Q6:温度、top-k、top-p 的区别?

  • 温度对 logits 整体缩放,改变分布尖锐程度。
  • top-k 固定保留前 \(k\) 个;top-p 按累计概率自适应保留。
  • 三者都只改变采样,不改变模型知识;任务越需要确定性,温度越低。

Q7:为什么贪心解码会重复?

  • 每步选最大概率,模型容易陷入“高概率循环”,尤其在长文本中。
  • 重复惩罚、top-p 采样、训练时的去重与多样性目标可以缓解。
  • 束搜索也可能产生重复,因为它优化的是序列似然,而非多样性。

Q8:如何判断一个 benchmark 分数是否可信?

  • 检查数据污染(n-gram 重叠、时间切分、题目变体)。
  • 检查评测协议(prompt、few-shot 数、采样参数、答案抽取)。
  • 看细分维度与错误类型,不只看总分。
  • 用私有集或人工评估交叉验证。

Q9:Loss spike 怎么排查?

  • 先定位时间和 rank,确认是否单点/全局。
  • 检查数据(异常样本、长度、空 batch)与数值(FP16 溢出、全 mask)。
  • 检查梯度范数、学习率、warmup。
  • 处理:回滚、跳 batch、降 LR、BF16、梯度裁剪、加监控。

Q10:如果训练 loss 正常但下游效果差,可能是什么原因?

  • 数据分布与下游任务不匹配;训练目标只优化续写,未对齐指令格式。
  • 评测协议不一致(prompt、答案格式)。
  • 模型容量或训练 token 不足;灾难性遗忘。
  • 需要 SFT/对齐,或补充领域数据;也可能是评测集污染导致“看起来差”。

本文档为面试复习资料,公式与数字建议结合原始论文复核。