---
title: LLM 中的信息论
url: https://doc.liz6.com/theory/01-information-theory/06-information-theory-in-llms
locale: zh
area: theory
tags:
- theory
- 信息论
date: 2026-07-18
modified: 2026-07-29
description: 把前五章的工具对准 LLM:困惑度是交叉熵的人类可读包装,预训练使用交叉熵损失,RLHF/DPO 用 KL 约束策略漂移,采样温度调节输出分布的熵。压缩视角也能帮助理解语言建模与 scaling law,但信息量、能力、事实性和有用性不是一回事。
---

# LLM 中的信息论

> 把前五章的工具对准 LLM:困惑度是交叉熵的人类可读包装,预训练使用交叉熵损失,RLHF/DPO 用 KL 约束策略漂移,采样温度调节输出分布的熵。压缩视角也能帮助理解语言建模与 scaling law,但信息量、能力、事实性和有用性不是一回事。

## 引子:同一套工具,换个场子

前五章的量——熵、KL、交叉熵、熵率、互信息——听起来像通信和压缩的老古董。这一章要做一件事:把它们一件件对准现代 LLM,你会发现每一个都在里面占着一个关键位置。

预训练的损失、评测用的困惑度、对齐时的约束、推理时的温度旋钮,都能用前五章的量解释。信息论提供了一套很强的公共语言,但不是对模型能力和行为的完整理论。下面逐个看哪些是严格等价,哪些只是有启发性的解释视角。

## 交叉熵损失:预训练目标本身

LLM 预训练在做什么?一句话:[交叉熵](/theory/01-information-theory/02-kl-divergence-and-cross-entropy.md) 最小化。

每一步,模型给出下一个 token 在整个词表上的预测分布 $q$。训练样本把这一次观测到的 token 写成 **one-hot 目标** $p$(真值 token 概率为 $1$,其余为 $0$)。这一步的损失就是交叉熵:

$$H(p,q) = -\sum_x p(x) \log q(x) = -\log q(\text{真实 token})$$

因为 $p$ 是 one-hot,求和塌缩成单项——损失就是"模型分给真实 token 的那个概率的负对数"。整个序列的损失,是逐 token 交叉熵的平均。

在总体数据分布上,最小化期望交叉熵等价于最小化 $D_{KL}(p_\text{data}\parallel q)$;在有限训练集上,逐样本 NLL 的最小化就是**最大似然估计**。模型给出的概率若再配合算术编码 / ANS,还能转成接近 NLL 的无损压缩码长。因此"训练语言模型"和"学习一个好的概率压缩模型"在目标函数上紧密相连,但真正的压缩系统还需要熵编码器,并要考虑模型权重成本。至于词表怎么切、one-hot 建立在什么单位上,取决于分词,见 [Token 与采样](/ai/01-models-and-context/02-tokens-and-sampling.md)。

## 困惑度:交叉熵的人类可读包装

交叉熵的单位是 bit(或 nat),数值小、不直观。看到"损失 $2.1$"很难有画面感。

**困惑度(perplexity, PPL)** 把它指数化,变成一个有画面感的量——"平均有几个等概率的选项在纠结":

$$\text{PPL}=2^{H_2(p,q)}\quad\text{或}\quad
\text{PPL}=e^{H_e(p,q)}$$

这里 $H_2$ 使用 $\log_2$,单位是 bit;$H_e$ 使用自然对数,单位是 nat。两种写法数值口径不同,不能把 $\exp(H)$ 和 $2^H$ 在同一个 $H$ 上直接画等号。

怎么读?如果模型在每个位置平均"在 $N$ 个等可能 token 之间摇摆",困惑度就是 $N$。完美预测(每次都确定真值)PPL $=1$;在词表大小 $V$ 上瞎猜,PPL $=V$。

它和交叉熵是一一对应的单调映射,所以**降低交叉熵损失和降低困惑度是同一件事**,PPL 只是给人看的刻度。这也解释了为什么 PPL 是语言模型最经典的内在评测指标:它就是模型压缩数据能力(熵率估计)的读数。

<svg viewBox="0 0 720 260" xmlns="http://www.w3.org/2000/svg" font-family="-apple-system,'Source Han Sans CN','Microsoft YaHei',sans-serif" role="img" aria-label="从下一 token 预测到困惑度的信息论链条:模型输出分布 q,与真值 one-hot p 算交叉熵,指数化得困惑度">
  <defs>
    <marker id="llmArrow" markerWidth="10" markerHeight="8" refX="8" refY="3" orient="auto"><path d="M0,0 L8,3 L0,6 Z" fill="#475569"/></marker>
  </defs>
  <rect width="720" height="260" fill="#ffffff"/>
  <text x="360" y="30" text-anchor="middle" font-size="17" font-weight="700" fill="#1f2933">预测分布 → 交叉熵 → 困惑度</text>
  <rect x="40" y="90" width="130" height="66" rx="8" fill="#4f46e5"/>
  <text x="105" y="118" text-anchor="middle" font-size="13" font-weight="700" fill="#ffffff">模型输出 q</text>
  <text x="105" y="138" text-anchor="middle" font-size="10" fill="#c7d2fe">词表上的分布</text>
  <rect x="220" y="90" width="130" height="66" rx="8" fill="#0d9488"/>
  <text x="285" y="118" text-anchor="middle" font-size="13" font-weight="700" fill="#ffffff">真值 p</text>
  <text x="285" y="138" text-anchor="middle" font-size="10" fill="#99f6e4">one-hot</text>
  <rect x="400" y="90" width="150" height="66" rx="8" fill="#475569"/>
  <text x="475" y="118" text-anchor="middle" font-size="13" font-weight="700" fill="#ffffff">H(p,q)</text>
  <text x="475" y="138" text-anchor="middle" font-size="10" fill="#cbd5e1">= −log q(真值)</text>
  <rect x="600" y="90" width="90" height="66" rx="8" fill="#22c55e"/>
  <text x="645" y="118" text-anchor="middle" font-size="13" font-weight="700" fill="#ffffff">PPL</text>
  <text x="645" y="138" text-anchor="middle" font-size="10" fill="#dcfce7">= 2^H₂ 或 e^Hₑ</text>
  <line x1="350" y1="123" x2="396" y2="123" stroke="#475569" stroke-width="1.8" marker-end="url(#llmArrow)"/>
  <line x1="170" y1="123" x2="216" y2="123" stroke="#475569" stroke-width="1.8" marker-end="url(#llmArrow)"/>
  <line x1="550" y1="123" x2="596" y2="123" stroke="#475569" stroke-width="1.8" marker-end="url(#llmArrow)"/>
  <rect x="120" y="196" width="480" height="30" rx="8" fill="#eef2ff" stroke="#c7d2fe"/>
  <text x="360" y="215" text-anchor="middle" font-size="12" fill="#3730a3">损失↓ ⟺ 困惑度↓ ⟺ 压缩率↑ ⟺ 更逼近数据熵率</text>
</svg>

## KL 散度在 RLHF / DPO 中的角色

预训练之后是对齐阶段。这时 [KL 散度](/theory/01-information-theory/02-kl-divergence-and-cross-entropy.md) 换了个身份——从"损失"变成"缰绳"。

**RLHF 的 PPO 目标**,在最大化奖励模型给的回报之外,加了一个 KL 惩罚项:

$$\text{目标} = \mathbb E[\text{reward}(x,y)] - \beta \cdot D_{KL}(\pi_\theta(\cdot \mid x) \parallel \pi_\text{ref}(\cdot \mid x))$$

这里 $\pi_\theta$ 是正在训练的策略,$\pi_\text{ref}$ 是冻结的参考模型(通常是 SFT 后的初始模型)。这个 KL 项惩罚策略偏离参考太远,防的是什么?防模型为了刷高奖励而**钻奖励模型的空子(reward hacking)**,退化成胡言乱语或复读。

注意方向:这里常写成 $D_{KL}(\pi_\theta\parallel\pi_\text{ref})$。它直接惩罚新策略在参考模型低概率区域放置过多质量,主要作用是限制策略漂移。第 2 章的 mode-seeking 直觉在受限多峰拟合中有帮助,但不应把 RLHF 的全部行为都归结为"寻峰"。$\beta$ 越大,缰绳越紧。

**DPO(Direct Preference Optimization)** 更精巧。它从数学上证明:带 KL 约束的 RLHF,其最优解有闭式形式。于是 DPO **跳过显式的奖励模型和 PPO**,直接用一个分类式损失在偏好数据上训练。

那 KL 约束去哪了?没丢——那个 $\beta \cdot D_{KL}(\pi_\theta \parallel \pi_\text{ref})$ 正则化被**隐式地**折叠进了 DPO 的损失函数里。换句话说,DPO 没有放弃缰绳,只是把它编织进目标,不再需要在线采样和显式惩罚项。两条路,同一根缰绳。

## Scaling law:压缩视角

**Chinchilla scaling law** 的原始分析指出:在其模型族、数据和拟合范围内,给定计算预算 $C$,模型参数量 $N$ 和训练 token 数 $D$ 应大致按 $N \propto C^{0.5}$、$D \propto C^{0.5}$ 同步扩,比一味堆参数更接近计算最优。具体指数是经验拟合结果,不是跨架构、跨数据永远不变的常数。

从信息论看,可以用**压缩视角**理解这条经验规律,但它不是由源编码定理直接推出的结论。

模型的测试损失是它在给定数据、分词器和上下文设置下的交叉熵,也对应把模型接入熵编码器后的理想平均码长。模型越大、数据越多,通常能更好地预测数据分布,所以损失下降可以解释成"压缩能力提高"。在理想化条件下——测试分布固定、上下文足够、模型族能逼近真实分布——最优交叉熵的下界才对应数据的条件熵率。现实中的幂律形状和具体指数仍是经验规律,还受架构、优化、数据质量与评测口径影响。

于是"最优 scaling"这个问题,翻译过来就是:**给定算力,怎么把这个熵率估计压到最低?** Chinchilla 的答案是参数和数据要平衡——这和源编码定理"码长逼近熵"的精神,一脉相承。至于模型架构如何影响这条曲线(比如 [稠密 vs MoE](/ai/01-models-and-context/03-model-architecture-dense-vs-moe.md) 在等效算力下的参数效率),是同一张图的另一个切面。

## 采样温度:输出分布的熵旋钮

推理时的**采样温度(temperature)** $T$,从信息论看就是一个直接操控输出分布 [熵](/theory/01-information-theory/01-entropy-and-information-measures.md) 的旋钮。做法是在 softmax 前把 logits 除以 $T$:

- $T > 1$:分布被**拉平**,熵**增大**。更多 token 有了可观概率,输出更随机、更发散。
- $T < 1$:分布被**削尖**,熵**减小**。概率集中到少数高分 token,输出更确定、更保守。
- $T \to 0$:若最高 logit 唯一,分布集中到 argmax、熵趋近 $0$,退化成 greedy;若最高值并列,极限仍可能在并列项之间保留不确定性。

所以调温度,字面上就是在调"每一步输出携带多少不确定性"。

这层信息论解释,是补在 [Token 与采样](/ai/01-models-and-context/02-tokens-and-sampling.md) 之上的:那篇讲的是 top_p / top_k 怎么截断候选集、以及 Claude 托管 API 为何移除了这些旋钮;这里只补一句"温度在信息论上到底动了什么"——它动的是输出分布的熵。两者互补,不重复。

| 信息论工具 | 在 LLM 里的化身 | 出处章节 |
|------------|----------------|---------|
| 交叉熵 $H(p,q)$ | 预训练损失 | [第 2 章](/theory/01-information-theory/02-kl-divergence-and-cross-entropy.md) |
| $2^{H_2}$ 或 $e^{H_e}$ | 困惑度 PPL | 本章 |
| KL 散度 $D_{KL}$ | RLHF/DPO 的策略正则化 | [第 2 章](/theory/01-information-theory/02-kl-divergence-and-cross-entropy.md) |
| 熵率 | 理想语言建模的压缩下界;理解 scaling law 的一个视角 | [第 3 章](/theory/01-information-theory/03-source-coding-and-compression.md) |
| 分布的熵 | 采样温度 | [第 1 章](/theory/01-information-theory/01-entropy-and-information-measures.md) |

## 几个反直觉但要命的点

- **困惑度不能跨分词器比。** PPL 是"每 token"的量,而不同模型 [切 token 的粒度不同](/ai/01-models-and-context/02-tokens-and-sampling.md)——字符级、子词级、词级模型的 PPL 数值不能直接比。必须换算到每字符或每字节的比特(bits-per-byte)才公平。看到两个模型的 PPL 就下结论,常常是在比不同的单位。
- **低困惑度不等于事实正确或回答有用。** 交叉熵奖励的是"给数据中实际出现的 token 更高概率"。一个模型可以很会模仿常见文本,却仍然产生事实错误;反过来,罕见但正确的表达也可能得到较低概率。PPL 是分布预测指标,不是完整能力评分。
- **信息量不等于价值。** 高熵只表示结果更不确定,不表示内容更有创造力或质量更高;高互信息只表示统计依赖更强,不表示存在因果关系。信息论回答"有多少可预测结构",任务和人类偏好才回答"这些结构有没有用"。
- **压缩能力与理解能力有关联,但不是同义词。** NLL 确实对应理想码长,说明预测与压缩共享目标;推理、工具使用、长程规划和对齐还受到架构、训练过程与推理机制影响,不能从压缩率单独推出。
- **理想交叉熵有个压不过的底,但现实里的底不容易直接看见。** 在固定分布、单位和条件信息的理想设定下,数据的条件熵率构成下界;现实评测还混有有限上下文、分布漂移、模型能力和数据噪声。不能把拟合出的 scaling-law 常数项直接宣布为"真实熵率"。
- **KL 惩罚的 $\beta$ 是双刃剑。** $\beta$ 太小,策略会 reward hacking 跑飞;太大,又被参考模型拴死,学不到新东西。它不是可有可无的正则项,而是对齐质量的关键旋钮。
- **温度不修改模型参数里的知识,只重排既有输出分布。** 温度是推理时对 logits 的后处理,不动权重,只改变候选 token 的相对集中程度。它可能改变某次回答是否碰巧正确,却不能从根本上修复知识缺失或错误建模。

## 收束:一套语言,一张网

回看整条线。一个 LLM,从预训练(最小化交叉熵)、到对齐(KL 约束策略漂移)、到扩展(可从压缩视角理解损失下降)、到推理(温度调节输出熵),每一环都能借助信息论获得一部分清晰解释。

信息论值得系统学一遍,因为它是理解现代 LLM 的一套公共语言。把 [熵](/theory/01-information-theory/01-entropy-and-information-measures.md)、[KL / 交叉熵](/theory/01-information-theory/02-kl-divergence-and-cross-entropy.md)、[压缩](/theory/01-information-theory/03-source-coding-and-compression.md)、[信道](/theory/01-information-theory/04-channel-capacity-and-coding.md)、[信息瓶颈](/theory/01-information-theory/05-rate-distortion-and-information-bottleneck.md) 这些工具握在手里,能更准确地读损失曲线、对齐配方和采样参数;但遇到事实性、推理和人类偏好问题时,还要引入信息论之外的模型。

## 参考

- **论文**: "Training Compute-Optimal Large Language Models" (Hoffmann et al., 2022 — Chinchilla scaling law)
- **论文**: "Direct Preference Optimization" (Rafailov et al., 2023 — DPO 如何隐式编码 KL 约束)
- **论文**: "Language Modeling Is Compression" (Delétang et al., 2023 — LLM 损失即比特率的实证)
- **文档**: [Token 与采样](/ai/01-models-and-context/02-tokens-and-sampling.md)、[推理与 thinking](/ai/01-models-and-context/04-reasoning-and-thinking.md)(本仓库既有的采样与推理机制)

*关键词: 困惑度 perplexity, 交叉熵损失, 预训练目标, one-hot, RLHF, PPO, KL 惩罚, DPO, reward hacking, scaling law, Chinchilla, 熵率, 压缩视角, 采样温度 temperature, 输出熵, 信息量与有用性*
