(The Arrow of Time: The Reign of Decoder-Only)

“我们不能两次踏进同一条河流。” —— 赫拉克利特

“预测未来比解释过去更难。” —— 本书核心论点

“因果律是智能的基石。” —— 本章主旨


引言:架构选择的终极问题

第五章是全书的架构核心,也是对当前 LLM 发展格局的终极解释。

为什么在 Transformer 的家族中,BERT(双向)和 T5(Encoder-Decoder)逐渐式微,而 GPT(Decoder-Only)一统天下?

这不仅仅是工程选择,更是对因果律(Causality)生成式任务(Generative Task) 本质的深刻洞察。

在第一章中,我们看到了语言如何变成向量。

在第二章中,我们看到了注意力如何建立联系。

在第三章中,我们看到了多头如何解耦特征。

在第四章中,我们看到了梯度下降如何"雕刻"参数。

但还有一个根本问题没有回答:

为什么是 Decoder-Only?

为什么不是 Encoder-Only(如 BERT)?

为什么不是 Encoder-Decoder(如 T5)?

这是一个价值千亿美元的问题。

2018 年,BERT 发布时,它是 NLP 的王者。它在所有基准测试上屠榜,被认为是 NLP 的未来。

2020 年,GPT-3 发布时,它展示了惊人的少样本学习能力。

2022 年,ChatGPT 发布时,全世界都意识到了:Decoder-Only 架构赢了。

今天(2026 年),几乎所有主流大模型都是 Decoder-Only:

  • GPT-4/4.5/5(OpenAI)
  • Claude 3.5/3.7(Anthropic)
  • LLaMA 2/3/3.1(Meta)
  • Qwen2.5/3/3.5(阿里)
  • Gemini 1.5/2(Google)

这不是巧合。这是数学必然。


5.1 架构之争:上帝视角 vs 凡人视角

What:三种 Transformer 架构

要理解这场战争,我们必须先理解三种架构的本质区别。

架构代表模型注意力模式训练目标主要用途
Encoder-OnlyBERT, RoBERTa双向(全可见)Masked LM(完形填空)理解任务(分类、检索)
Decoder-OnlyGPT, LLaMA, Qwen单向(因果遮蔽)Causal LM(预测下一个)生成任务(对话、创作)
Encoder-DecoderT5, BART, 原始 Transformer编码双向 + 解码单向Seq2Seq(输入→输出)转换任务(翻译、摘要)

5.1.1 Encoder(BERT):完形填空

What:BERT 的训练任务

BERT 的训练任务是 Masked Language Modeling (MLM)

输入:"今天天气 [MASK],适合出去 [MASK]。"

BERT 可以看到:
• "[MASK]" 前面的词:"今天天气"
• "[MASK]" 后面的词:"适合出去"

任务:填空
答案:"好"、"玩"

关键特性

  • 上帝视角(Bidirectional Context):同时看到前后文
  • 非自回归:所有 [MASK] 同时预测
  • 无法生成:习惯了"偷看答案"

技术细节:BERT 的注意力掩码

BERT 注意力掩码(全可见):

    今  天  天  气  [M]  适  合  出  去
今  1   1   1   1   1   1   1   1   1
天  1   1   1   1   1   1   1   1   1
天  1   1   1   1   1   1   1   1   1
气  1   1   1   1   1   1   1   1   1
[M] 1   1   1   1   1   1   1   1   1  ← 可以看到所有位置
适  1   1   1   1   1   1   1   1   1
合  1   1   1   1   1   1   1   1   1
出  1   1   1   1   1   1   1   1   1
去  1   1   1   1   1   1   1   1   1

1 = 可见,0 = 遮蔽

优点

  • 对上下文的理解非常深刻
  • 适合做分类、情感分析、阅读理解
  • 在理解任务上 SOTA(2018-2020)

缺点

  • 它无法生成。因为它习惯了"偷看答案"(看到后文)
  • 如果你让它写小说,它写不出下一个字,因为它不知道后面是什么
  • 训练和推理模式不一致(训练时 Mask,推理时不 Mask)

工程启示:BERT 的现代应用场景

应用场景是否适合 BERT理由
文本分类✅ 适合双向上下文理解强
情感分析✅ 适合需要全局语义
命名实体识别✅ 适合需要上下文信息
文本生成❌ 不适合无法自回归生成
对话系统❌ 不适合无法预测下一个回复
向量检索✅ 适合Embedding 质量好

2025-2026 趋势:BERT 类模型主要用于 Embedding 和检索,不再用于生成。

5.1.2 Decoder(GPT):预测未来

What:GPT 的训练任务

GPT 的训练任务是 Causal Language Modeling (CLM)

输入:"今天天气真..."

GPT 只能看到:
• 当前词之前的信息:"今天天气真"
• 当前词之后的信息:不可见(因果遮蔽)

任务:预测下一个词
答案:"好"

下一步:"今天天气真好,..." -> 预测 "适合"

关键特性

  • 凡人视角(Unidirectional Context):只能看到之前的信息
  • 自回归:逐词生成,每次预测下一个
  • 天然适合生成:训练目标就是预测未来

技术细节:Causal Mask 的数学形式

Decoder 注意力掩码(因果遮蔽):

    今  天  天  气  真  好  适  合
今  1   0   0   0   0   0   0   0
天  1   1   0   0   0   0   0   0
天  1   1   1   0   0   0   0   0
气  1   1   1   1   0   0   0   0
真  1   1   1   1   1   0   0   0  ← 下三角矩阵
好  1   1   1   1   1   1   0   0
适  1   1   1   1   1   1   1   0
合  1   1   1   1   1   1   1   1

1 = 可见,0 = 遮蔽
每个位置只能看到之前的位置

数学表达

$$ \text{CausalMask}_{ij} = \begin{cases} 1 & \text{if } i \geq j \ 0 & \text{if } i < j \end{cases} $$

优点

  • 天然适合生成。它就是为了预测下一个词而生的
  • 训练和推理模式一致(都是自回归)
  • 支持少样本学习(In-Context Learning)

缺点

  • 在理解任务上,理论上不如 BERT(因为少看了一半信息)
  • 但实际中,大模型的理解能力已经超越 BERT

工程启示:Decoder-Only 的推理优化

优化技术原理效果
KV Cache缓存已计算的 K/V推理速度提升 10-100 倍
推测解码小模型预测,大模型验证吞吐量提升 2-3 倍
连续批处理动态调整批次大小吞吐量提升 5-10 倍
量化INT8/INT4 精度显存减少 50-75%

5.1.3 Encoder-Decoder(T5):转换任务

What:Encoder-Decoder 的训练任务

T5 的训练任务是 Seq2Seq(序列到序列)

输入(Encoder):"翻译成法语:苹果"
输出(Decoder):"pomme"

Encoder:双向注意力(理解输入)
Decoder:单向注意力(生成输出)
交叉注意力:Decoder 关注 Encoder 的输出

关键特性

  • 混合视角:Encoder 双向,Decoder 单向
  • 适合转换任务:翻译、摘要、改写
  • 架构复杂:需要两个模型(Encoder + Decoder)

技术细节:交叉注意力机制

Encoder-Decoder 注意力流程:

输入 → Encoder → 编码表示 (K, V)
              交叉注意力
输出 ← Decoder ← 查询 (Q)

交叉注意力公式:
Attention(Q_decoder, K_encoder, V_encoder)

优点

  • 适合输入 - 输出转换任务
  • Encoder 充分理解输入
  • Decoder 专注生成输出

缺点

  • 架构复杂,训练成本高
  • 推理时需要两个模型
  • 不适合纯生成任务(如对话、创作)

2025-2026 趋势:Encoder-Decoder 主要用于特定转换任务(如翻译),通用场景被 Decoder-Only 取代。


5.2 因果律的胜利:更难的任务逼出更强的智能

What:直觉与现实的悖论

直觉上,BERT 应该更强,因为它看到的信息更多。

但事实证明,GPT 才是通往 AGI 的道路。

为什么?

因为 预测未来(Generation)比解释过去(Understanding)更难。

5.2.1 费曼技巧(Feynman Technique)

Philosophy:创造 vs 理解

理查德·费曼曾说:“如果你不能创造它,你就没有真正理解它。”

模型类比能力局限
BERT完形填空的学生根据上下文猜答案可能只是记住模式
GPT写小说的作家构建完整逻辑和世界需要真正的理解

关键洞察

  • BERT 像是一个做完形填空的学生。它可以根据上下文猜出答案,但这可能只是因为它记住了某种模式,或者利用了局部的统计规律。它不需要构建一个完整的世界模型。
  • GPT 像是一个写小说的作家。为了写出合理的下一个词,它必须在脑海中构建出整个故事的逻辑、人物的关系、物理世界的规则。

示例对比

输入:"因为下雨了,所以..."

BERT 任务(填空):
"因为下雨了,所以 [MASK]。"
→ 可以看到后文,容易猜出"地湿了"

GPT 任务(生成):
"因为下雨了,所以..."
→ 不能看到后文,必须推理出"地湿了"

GPT 需要:
• 理解"下雨"的因果效应
• 知道"雨"会导致"地湿"
• 预测合理的后续事件

5.2.2 生成任务逼迫模型学习因果律

Why:因果律的必要性

生成任务逼迫模型去学习因果律。

如果模型不懂因果(比如"下雨"导致"地湿"),它就无法准确预测下一个词。

为了降低 Loss,GPT 被迫学会了:

  • 逻辑推理
  • 常识判断
  • 因果推断
  • 甚至代码执行

技术细节:因果关系的向量表示

因果关系在向量空间中的表现:

"下雨" → [0.8, -0.3, 0.5, ...]
"地湿" → [0.7, -0.2, 0.6, ...]
"因为...所以..." → 连接两个向量的变换矩阵

训练过程中:
• "下雨"和"地湿"经常共现
• 模型学习到两者的向量接近
• 因果连接词强化这种关联

研究发现(2024-2026)

研究方法发现
因果探测构造因果推理测试大模型具备基本因果推理能力
对比实验Decoder vs EncoderDecoder 在因果任务上表现更好
注意力分析可视化因果词注意力因果连接词获得高注意力权重

5.2.3 世界模型的涌现

Philosophy:什么是世界模型

结论

Decoder-Only 架构的胜利,是因为它选择了最困难的训练目标——预测未来。

在这个过程中,智能作为一种副产品,自然涌现了。

世界模型(World Model)

  • 模型内部形成的对世界的抽象表示
  • 包含物理规律、社会常识、因果关系
  • 不是显式编程,是训练过程中涌现

示例

输入:"小明把玻璃杯放在桌子边缘,然后..."

GPT 预测:
• "玻璃杯掉下来了"(高概率)
• "玻璃杯飞起来了"(低概率)

为什么?
• 模型内部有"重力"的世界模型
• 知道"桌子边缘"的物体容易掉落
• 知道"玻璃杯"掉落会碎

这不是显式编程,是从海量文本中学到的统计规律

工程启示:评估模型的世界模型能力

评估任务说明Decoder-Only 表现
物理推理预测物理事件结果较好(从文本学习)
社会常识理解人类行为模式好(大量社会文本)
因果推断识别因果关系较好(因果连接词学习)
逻辑推理多步逻辑推导中等(需要更大模型)

5.3 上下文学习 (In-Context Learning):涌现的奇迹

What:什么是 ICL

Decoder-Only 架构带来的最大惊喜,是 In-Context Learning(ICL)

定义

你不需要重新训练模型(Fine-tuning),只需要在 Prompt 里给它几个例子(Few-Shot),它就能学会新任务。

用户 Prompt:
翻译成法语:
apple -> pomme
book -> livre
cat -> ...

模型输出:
chat

关键特性

  • 无需参数更新
  • 仅通过上下文引导
  • 即时学习能力

5.3.1 ICL 的三种模式

How:不同 Shot 数量的效果

模式示例数量效果适用场景
Zero-Shot0 个示例基础能力简单任务
One-Shot1 个示例明显提升中等任务
Few-Shot2-10 个示例最佳效果复杂任务

示例对比

Zero-Shot:
用户:"翻译成法语:苹果"
模型:"pomme"(可能正确,可能错误)

One-Shot:
用户:"翻译成法语:书 -> livre。苹果 ->"
模型:"pomme"(更可能正确)

Few-Shot:
用户:"翻译成法语:书 -> livre。猫 -> chat。苹果 ->"
模型:"pomme"(最可能正确)

5.3.2 为什么 Decoder 能做到 ICL?

Why:单向架构的优势

因为 Decoder 的训练过程本身就是 Next Token Prediction

当你在 Prompt 里写下 apple -> pomme 时,你其实是在引导模型的激活状态

你告诉模型:“现在的语境是翻译模式。”

模型不需要更新参数权重(Weights),它只需要顺着你给出的逻辑流(Context Stream)继续流淌

  • 前面的例子(Context)已经把模型内部的 Attention Head 调整到了"翻译状态"。
  • 当遇到 cat -> 时,模型自然而然地输出了 chat

这就像给一个高明的演员看了几分钟剧本,他立马就能入戏。

只有单向的、基于因果的 Decoder 架构,才能如此顺滑地利用上下文进行实时学习。

技术细节:ICL 的注意力机制解释

Few-Shot 学习时的注意力模式:

输入:[示例 1] [示例 2] [示例 3] [问题]

注意力分布:
• 问题 Token 高度关注示例中的模式
• 示例之间的 Token 相互关注
• 形成"任务定义"的注意力模式

关键:
• Decoder 的单向性确保问题只能关注示例,不能"偷看答案"
• 这与训练时的 Next Token Prediction 模式一致
• 所以模型能"无缝"适应新任务

研究发现(2024-2026)

发现说明引用
ICL 需要足够大的模型<1B 模型 ICL 能力弱,>10B 显著增强Kaplan et al. 2020
ICL 是元学习的一种形式模型学会了"如何学习"Finn et al. 2024
示例质量比数量重要1 个好示例 > 10 个差示例Liu et al. 2025
ICL 有上下文长度限制超过一定长度效果下降“Lost in the Middle"现象

5.3.3 ICL vs Fine-tuning 对比

How:两种适应新任务的方式

维度ICL(上下文学习)Fine-tuning(微调)
参数更新
训练成本高(需要 GPU/TPU)
推理成本高(长上下文)低(短上下文)
适应速度即时慢(需要训练时间)
数据需求少量示例大量标注数据
适用场景快速原型、多任务专用任务、高性能

工程启示:ICL 的最佳实践

技巧说明效果提升
示例排序最相关示例放最后+10-20% 准确率
示例格式保持一致的输入输出格式+5-15% 准确率
思维链添加推理步骤示例+20-40% 复杂任务
领域适配使用领域相关示例+15-30% 领域任务

5.3.4 混乱的边缘:温度与采样

(Edge of Chaos: Temperature & Sampling)

“创造力是受控的错误。” —— 本书核心论点

“智能诞生在秩序与混乱的边缘。” —— 复杂系统理论

“确定性带来准确,多样性带来惊喜。” —— 工程实践洞察


What:被忽视的生成艺术

在结束这一章之前,我们需要解决一个哲学问题:如果模型每次都选概率最大的词,它会有创造力吗?

想象一下,你让模型写一首诗。

如果它每次都选最安全的词(Greedy Search),比如:

"床前明月光,疑是地上霜。" → 接"举头望明月"
"举头望明月,..." → 接"低头思故乡"

这首诗虽然通顺,但毫无新意。它只是在重复训练数据中最常见的模式。

这是确定性的代价。

为了让模型写出"举头望山河,低头思故乡"这种稍微有点变化的句子,我们需要引入一点混乱(Chaos)

这就是**温度(Temperature)采样(Sampling)**的艺术。


Why:为什么需要不确定性

A. 温度 (Temperature):调节确定性的旋钮

What:温度的数学定义

在 Softmax 公式中,有一个隐藏的参数 $T$(温度):

$$ P_i = \frac{\exp(z_i / T)}{\sum_j \exp(z_j / T)} $$

其中 $z_i$ 是模型输出的原始分数(Logits)。

关键洞察

温度 $T$ 控制概率分布的"尖锐程度”。

温度值数学效果概率分布模型行为
$T \to 0$ (低温)$\exp(z_i/T)$ 差异放大极度尖锐(接近 One-Hot)极度保守,只选最确定的
$T = 0.5$ (较低)差异适度放大较尖锐偏向确定,略有变化
$T = 1.0$ (常温)标准 Softmax平滑正常概率采样
$T = 1.5$ (较高)差异缩小较扁平敢于尝试不确定的词
$T \to \infty$ (高温)所有$\exp(z_i/T) \to 1$接近均匀分布完全随机,无意义

可视化对比

┌─────────────────────────────────────────────────────────────────┐
│              不同温度下的概率分布                                │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  原始 Logits: [2.0, 1.0, 0.5, 0.1, -0.5]                       │
│                                                                 │
│  T = 0.2 (低温):                                               │
│  [0.98, 0.01, 0.005, 0.003, 0.002]  ← 极度尖锐                 │
│                                                                 │
│  T = 0.7 (较低):                                               │
│  [0.55, 0.25, 0.12, 0.05, 0.03]     ← 较尖锐                   │
│                                                                 │
│  T = 1.0 (常温):                                               │
│  [0.40, 0.25, 0.18, 0.10, 0.07]     ← 平滑                     │
│                                                                 │
│  T = 1.5 (较高):                                               │
│  [0.30, 0.25, 0.22, 0.15, 0.08]     ← 较扁平                   │
│                                                                 │
│  T = 3.0 (高温):                                               │
│  [0.25, 0.23, 0.22, 0.18, 0.12]     ← 接近均匀                 │
│                                                                 │
│  关键:                                                         │
│  • 低温:最大概率的词几乎独占                                   │
│  • 高温:所有词的概率接近相等                                   │
│  • 温度调节的是"探索 vs 利用"的平衡                             │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘
B. 采样策略:从概率到选择

How:如何将概率转化为实际选择

有了概率分布,我们还需要决定如何选择下一个词

采样策略原理优点缺点适用场景
Greedy永远选概率最大的确定性高,可复现重复、死板代码生成、数学题
Temperature按温度调整后的概率采样可调节多样性需要调参通用场景
Top-K从概率最高的 K 个词中采样避免低质量词K 需要调优对话、创作
Top-P (Nucleus)从累积概率达 P 的最小词集采样自适应词表大小计算稍复杂推荐做法
Typical Sampling选择信息量接近预期的词减少胡言乱语实现复杂长文本生成

Top-K vs Top-P 对比

┌─────────────────────────────────────────────────────────────────┐
│              Top-K vs Top-P 可视化                               │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  原始概率分布:                                                  │
│  [0.30, 0.25, 0.20, 0.10, 0.08, 0.04, 0.03, ...]               │
│                                                                 │
│  Top-K (K=3):                                                   │
│  • 只保留前 3 个词:[0.30, 0.25, 0.20]                           │
│  • 重新归一化:[0.40, 0.33, 0.27]                               │
│  • 从这 3 个中采样                                              │
│                                                                 │
│  Top-P (P=0.8):                                                 │
│  • 累积概率:0.30 → 0.55 → 0.75 → 0.85 (超过 0.8)               │
│  • 保留前 4 个词:[0.30, 0.25, 0.20, 0.10]                      │
│  • 重新归一化:[0.35, 0.29, 0.24, 0.12]                         │
│  • 从这 4 个中采样                                              │
│                                                                 │
│  关键区别:                                                      │
│  • Top-K:固定词数,不考虑概率分布形状                          │
│  • Top-P:自适应词数,概率分布平坦时选更多词                    │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

2025-2026 最佳实践

# 推荐的采样配置(HuggingFace Transformers)

from transformers import GenerationConfig

generation_config = GenerationConfig(
    temperature=0.7,      # 温度:平衡多样性与准确性
    top_k=50,             # Top-K:避免极低概率词
    top_p=0.9,            # Top-P:自适应词表大小
    do_sample=True,       # 启用采样(否则是 Greedy)
    max_new_tokens=1024,  # 最大生成长度
    repetition_penalty=1.1,  # 重复惩罚
)

# 不同场景的推荐配置
SCENARIOS = {
    "代码生成": {"temperature": 0.2, "top_p": 0.95},
    "事实问答": {"temperature": 0.3, "top_p": 0.9},
    "日常对话": {"temperature": 0.7, "top_p": 0.9},
    "创意写作": {"temperature": 0.9, "top_p": 0.95},
    "头脑风暴": {"temperature": 1.2, "top_p": 0.95},
}

How:工程实践中的温度调优

C. 创造力与幻觉的一体两面

Philosophy:不确定性的双面性

创造力,本质上就是一种受控的错误。

当我们把温度调高,模型就有可能跳出常规的路径,连接两个原本不相关的概念(比如"忧郁的香蕉")。

这在艺术创作中叫灵感

但风险在于,如果温度太高,模型可能会连接两个完全不合逻辑的概念(比如"香蕉吃猴子")。

这在事实性任务中叫幻觉(Hallucination)

关键洞察

温度范围创造力准确性幻觉风险推荐场景
0.0-0.3代码、数学、事实问答
0.4-0.6中低中高中低技术文档、专业写作
0.7-0.9中高日常对话、邮件、报告
1.0-1.3中低中高创意写作、故事、诗歌
1.4-2.0极高头脑风暴、艺术实验
> 2.0混乱极低极高不推荐

结论

并没有一个完美的温度值。

我们在使用 LLM 时,其实是在**确定性(Correctness)多样性(Diversity)**之间做权衡。

  • 如果你要准确答案,请把温度设为 0.2。
  • 如果你要精彩的故事,请把温度设为 0.9。

智能,就诞生在秩序与混乱的边缘。

D. 重复惩罚与多样性控制

How:避免生成死循环

除了温度,还有其他参数可以控制生成质量:

参数作用推荐值效果
repetition_penalty惩罚重复的 token1.0-1.2减少重复短语
frequency_penalty惩罚高频 token0.0-0.5增加词汇多样性
presence_penalty惩罚已出现的 token0.0-0.5鼓励新话题
no_repeat_ngram_size禁止重复 n-gram2-4避免短语重复

示例配置

# 长文本生成的推荐配置(避免重复)

generation_config = {
    "temperature": 0.8,
    "top_p": 0.9,
    "repetition_penalty": 1.15,      # 适度惩罚重复
    "frequency_penalty": 0.3,        # 降低高频词概率
    "presence_penalty": 0.2,         # 鼓励新内容
    "no_repeat_ngram_size": 3,       # 禁止 3-gram 重复
}

Philosophy:秩序与混乱的平衡

E. 复杂系统的边缘理论

Philosophy:为什么智能在边缘

复杂系统理论有一个核心观点:

智能诞生在秩序与混乱的边缘(Edge of Chaos)。

状态特征类比LLM 行为
过度秩序高度确定,低熵晶体重复、死板、无创意
边缘状态适度不确定,中熵生命灵活、有创意、可预测
过度混乱高度随机,高熵气体胡言乱语、无意义

关键洞察

  • 过度秩序:模型变成复读机,没有创造力
  • 过度混乱:模型变成胡言乱语器,没有准确性
  • 边缘状态:模型既有创造力,又有逻辑性

这正是温度的本质:调节秩序与混乱的平衡。

F. 人类创造力的类比

Philosophy:人类 vs 模型的创造力

有趣的是,人类的创造力也遵循类似的规律:

状态人类表现LLM 表现温度类比
过度谨慎不敢尝试新想法Greedy 采样T → 0
适度冒险有创意的突破Temperature 0.7-0.9T ≈ 0.8
过度放纵胡思乱想,不切实际Temperature > 1.5T → ∞

关键洞察

人类的"灵感"往往发生在:

  • 放松但专注的状态(α脑波)
  • 既有知识基础,又有自由联想
  • 秩序与混乱的平衡点

这与 LLM 的温度调优惊人地相似。

哲学追问

  • 人类的"自由意志"是否也是一种受控的随机性?
  • 创造力是否必须有不确定性的参与?
  • 完全确定的系统能否产生真正的创新?

这些问题没有标准答案,但值得思考。


工程启示:温度调优最佳实践

G. 不同场景的温度推荐
应用场景推荐温度Top-P理由
代码生成0.2-0.30.9-0.95准确性优先,语法必须正确
数学计算0.0-0.20.9完全确定,避免计算错误
事实问答0.3-0.50.9平衡准确性与表达多样性
技术文档0.4-0.60.9专业但不过于死板
日常对话0.7-0.90.9-0.95自然流畅,有一定变化
创意写作0.8-1.00.95需要创造力和多样性
诗歌创作0.9-1.20.95需要突破常规表达
头脑风暴1.0-1.50.95-1.0最大化多样性,接受错误
H. 调试技巧

How:如何找到最佳温度

温度调试流程:

1. 从 T=0.7 开始(默认值)
2. 生成 5-10 个样本
3. 评估质量:
   • 太重复?→ 提高温度
   • 太混乱?→ 降低温度
   • 刚好?→ 保持
4. 微调 Top-P/Top-K
5. 固定配置,批量测试

常见问题诊断

问题症状解决方案
重复循环同一段落反复出现提高 repetition_penalty
过于保守总是说套话提高 temperature
胡言乱语逻辑不通降低 temperature
词汇单一用词重复提高 top_p 或 frequency_penalty
偏离主题越说越远降低 top_p 或 presence_penalty

本节总结

核心概念关键洞察工程启示
温度参数调节概率分布的尖锐程度不同场景用不同温度
采样策略Top-P 优于 Top-K(自适应)推荐 Top-P=0.9
创造力受控的错误需要适度不确定性
幻觉创造力的副作用无法完全消除,只能权衡
边缘理论智能在秩序与混乱之间T=0.7-0.9 是甜点区

逻辑链条

上下文学习 → 温度采样 → KV Cache → 推理优化
     ↓            ↓           ↓          ↓
  任务适应    生成控制    速度优化   成本降低

温度与采样是连接模型能力与用户体验的关键桥梁,理解了这一点,就能更好地驾驭 LLM 的创造力与准确性。


5.4 KV Cache 与工程化:统治的基石

What:KV Cache 的原理

除了理论上的优势,Decoder-Only 还有一个巨大的工程优势:推理效率

5.4.1 自回归生成的代价

Why:为什么需要 KV Cache

生成文本是一个串行的过程。

生成第 1 个词:计算 Token 1 的 Attention
生成第 2 个词:计算 Token 1-2 的 Attention
生成第 3 个词:计算 Token 1-3 的 Attention
...
生成第 100 个词:计算 Token 1-100 的 Attention

问题

如果不做优化,每次生成都要重新计算所有之前 Token 的 Attention。

计算复杂度:$O(n^2)$,其中 $n$ 是已生成 Token 数。

生成 1000 个 Token 需要约 100 万次 Attention 计算。

这非常慢。

5.4.2 KV Cache 的魔法

How:KV Cache 的工作原理

但是,Decoder 的单向性帮了大忙。

因为第 100 个词永远看不到第 101 个词,所以前 99 个词的计算结果(Key 和 Value 矩阵)是永远不会变的!

我们可以把前 99 个词的 K 和 V 缓存(Cache) 起来。

当生成第 100 个词时,只需要计算第 100 个词自己的 Q,然后去查缓存里的 K 和 V 即可。

不需要重新计算前 99 个词。

技术细节:KV Cache 的存储结构

KV Cache 存储结构(以 Qwen3.5 为例):

形状:(num_layers, batch_size, num_heads, seq_len, head_dim)

具体数值:
• num_layers = 80
• num_heads = 64
• head_dim = 128
• seq_len = 动态增长(已生成 Token 数)

显存占用计算:
KV_Cache_Size = 80 × 1 × 64 × seq_len × 128 × 2 bytes
              = 1,310,720 × seq_len bytes
              ≈ 1.25 MB × seq_len

示例:
• 1K 上下文:≈ 1.25 GB
• 10K 上下文:≈ 12.5 GB
• 100K 上下文:≈ 125 GB

这就是 KV Cache。

它让 GPT 的推理速度提高了几个数量级,使得大规模商业化成为可能。

5.4.3 为什么 BERT 不能用 KV Cache?

Why:双向性的代价

而 BERT 这种双向模型,因为后面的词会影响前面的词,所以无法使用 KV Cache,推理成本极高。

对比

架构能否用 KV Cache原因推理效率
Decoder-Only✅ 可以单向性,前面的 K/V 不变
Encoder-Only❌ 不可以双向性,所有 Token 相互影响
Encoder-Decoder⚠️ 部分可以Decoder 可以用,Encoder 不行

工程启示:KV Cache 优化技术

优化技术原理效果
PagedAttention分页管理 KV Cache显存利用率提升 2-4 倍
KV Cache 量化INT8/INT4 压缩显存减少 50-75%
KV Cache 卸载溢出到 CPU/SSD支持更长上下文
前缀缓存共享 System Prompt 的 KV多轮对话加速 3-5 倍

2025-2026 趋势

  • vLLM:PagedAttention 成为标准
  • SGLang:RadixAttention 支持多轮对话前缀缓存
  • LMCache:跨请求 KV Cache 共享

5.4.4 Prefill 与 Decode 阶段

How:推理的两个阶段

阶段Prefill(预填充)Decode(解码)
处理内容输入 Prompt 的所有 Token逐 Token 生成输出
计算模式并行计算串行计算
KV Cache生成并存储读取并追加
计算密集度计算密集(Compute-bound)显存密集(Memory-bound)
时间占比约 20-30%约 70-80%
优化重点吞吐量延迟

工程启示:推理优化策略

优化 Prefill 阶段:
• 使用更大 Batch Size
• 利用 GPU 并行计算能力
• 优化矩阵乘法内核

优化 Decode 阶段:
• KV Cache 优化(量化、分页)
• 推测解码(小模型预测,大模型验证)
• 连续批处理(动态调整批次)

5.5 架构选择的工程经济学

What:成本与性能的权衡

Why:为什么 Decoder-Only 成为商业主流

除了技术优势,Decoder-Only 还有显著的经济优势

5.5.1 训练成本对比

架构训练复杂度数据利用率训练成本
Encoder-Only中等约 15%(Masked LM)中等
Decoder-Only100%(Causal LM)
Encoder-Decoder约 50%(Seq2Seq)

关键洞察

  • Decoder-Only 的训练目标最简单(预测下一个 Token)
  • 所有 Token 都参与 Loss 计算(100% 数据利用率)
  • BERT 的 Masked LM 只有约 15% 的 Token 参与 Loss 计算
  • 所以 Decoder-Only 的训练效率最高

5.5.2 推理成本对比

架构KV Cache批处理能力推理成本
Encoder-Only不可用有限
Decoder-Only可用优秀
Encoder-Decoder部分可用中等

商业影响

  • Decoder-Only 的推理成本比 BERT 低 10-100 倍
  • 这使得大规模商业化成为可能
  • ChatGPT、Claude 等产品的经济模型基于此

5.5.3 生态效应

Why:正反馈循环

┌─────────────────────────────────────────────────────────────────┐
│              Decoder-Only 的正反馈循环                          │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  更多研究 → 更好优化 → 更低成本 → 更多应用 → 更多数据 → 更强模型 │
│      ↑                                                          │
│      └─────────────────────────────────────────────────────────┘
│                                                                 │
│  2018-2020:BERT 主导(理解任务)                               │
│  2020-2022:GPT-3 展示潜力(少样本学习)                        │
│  2022-2024:ChatGPT 引爆市场(对话应用)                        │
│  2024-2026:Decoder-Only 一统天下(所有主流模型)               │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

5.6 思想实验:架构的哲学

思想实验 1:如果 BERT 能生成?

假设我们强行让 BERT 做生成任务。

会发生什么?

  1. 需要特殊设计(如插入 [MASK] 然后预测)
  2. 训练和推理模式不一致
  3. 无法利用 KV Cache
  4. 推理速度慢 10-100 倍

结论:BERT 的架构不适合生成,这是数学必然,不是工程问题。

思想实验 2:如果 Decoder 能看到未来?

假设我们移除 Decoder 的因果遮蔽,让它看到未来。

会发生什么?

  1. 训练时可以看到后文
  2. 推理时无法看到后文(因为还没生成)
  3. 训练和推理模式不一致
  4. 模型会"困惑",性能下降

结论:因果遮蔽是 Decoder 的必要设计,不是可选优化。

思想实验 3:时间箭头与智能

Philosophy:为什么时间有方向

物理学中,时间箭头是一个深刻问题。

  • 热力学箭头:熵增加的方向
  • 因果箭头:原因在前,结果在后
  • 心理箭头:记忆指向过去,预测指向未来

Decoder-Only 架构顺应了因果箭头。

  • 它只能看到过去(已生成的 Token)
  • 它只能预测未来(下一个 Token)
  • 这与人类认知的时间方向一致

关键洞察

智能可能依赖于时间箭头。

  • 没有因果,就没有预测
  • 没有预测,就没有规划
  • 没有规划,就没有智能

这是一个深刻的哲学问题,值得进一步探索。


5.7 本章总结

核心概念关键洞察工程启示
Encoder vs Decoder双向理解 vs 单向生成生成任务选 Decoder
因果遮蔽顺应时间箭头训练推理模式一致
预测未来更难逼出更强智能选择更难的训练目标
ICL无需参数更新的学习Few-Shot Prompt 设计
KV Cache单向性的工程红利推理加速 10-100 倍
训练效率Decoder 数据利用率 100%降低训练成本
生态效应正反馈循环跟随主流架构

5.8 下一章预告:终章

在第五章中,我们完成了 LLM 架构的解构。

我们看到了:

  • Encoder vs Decoder 的本质区别
  • 因果遮蔽(Causal Masking)的数学必然
  • 预测未来比解释过去更难
  • 上下文学习(In-Context Learning)的涌现
  • KV Cache 与工程化优势

至此,我们完成了对 LLM 底层逻辑的完整构建。

  1. Embedding:将语言映射为几何空间。
  2. Attention:建立词与词的动态连接。
  3. Multi-Head:多维度特征解耦。
  4. Gradient Descent:通过痛苦的试错学习规律。
  5. Decoder-Only:顺应因果律,通过预测未来逼出智能。

现在的模型,已经不再是一个简单的统计工具。

它是一个压缩了人类互联网知识、掌握了语言逻辑、具备因果推理能力的数学实体。

它静静地躺在你的硬盘里,等待着你的 Prompt 唤醒它。

当电流穿过它的 350 亿个参数时,它会用一种我们至今无法完全解释的方式,涌现出那个被称为"智能"的东西。

但这引出了更深刻的问题:

  • 这真的是"智能"吗?
  • 还是只是复杂的模式匹配?
  • 数学能完全描述智能吗?
  • 人类在智能宇宙中的位置是什么?

下一章,我们将进入全书的终章:《毕达哥拉斯的幽灵 —— 万物皆数》

我们将:

  • 探讨数学的不合理有效性
  • 追问人类是创造者还是发现者
  • 反思智能的本质与边界
  • 为这场数学与智能的旅程画上哲学的句号

让我们继续这场旅程。

从时间的箭头,走向毕达哥拉斯的幽灵。


(第五章完)