大模型是什么
核心要点:
- LLM = 学 next-token 概率 + 自回归循环
- 数据流:token → embedding → block × L → LM head
- Self-attention 同时解掉 RNN 两个根本约束
- 训练并行,推理串行,走同一条管线
- 本篇只画地图,机制留给 03-08 章
名词定义
本篇使用的共享名词在父总览 1 总览 已统一定义。大小写约定:架构名首字母大写 (Transformer / RNN / LSTM),算子或机制名小写 (self-attention / cross-attention / causal mask)。本篇新引入两个名词:
| 名词 | 定义 |
|---|---|
| Next-token prediction | LLM 的核心训练目标:给定前 $t-1$ 个 token,预测第 $t$ 个 token 的概率分布 $P(x_t \mid x_1, \ldots, x_{t-1})$ |
| Autoregressive (自回归) | 生成时把刚预测出的 token 接回输入末尾,再预测下一个,如此循环直到结束 |
@tbl-anatomy-glossary 本篇新引入名词
LLM 到底在做什么?
核心问题:一个能写代码、做翻译、做推理的大语言模型,内部本质上在学什么?
LLM 是一个学习 next-token 概率分布的函数,配自回归循环把单步预测拼成长输出。一个公式说完:
$$\begin{equation} P(x_t \mid x_1, x_2, \ldots, x_{t-1}) \label{eq:anatomy-next-token} \end{equation}$$这一句话包含两个独立但缺一不可的部件:
- 概率函数 (next-token prediction):模型本体是个数学函数,吃一段 token 序列,吐"下一个 token 是词表里哪个" 的概率分布。训练时这是唯一的优化目标 (详见 06-预训练/02-语言建模目标)。
- 自回归循环:模型一次只能预测一个 token,把"对话 / 写代码 / 做推理" 变成可生成的长输出,靠的是把单步预测拼成循环——预测一个 → 接回输入 → 再预测下一个 → 直到生成结束符。
为什么这一个目标能涌现各种能力,是 LLM 的核心反直觉:模型只学了 next-token,但这个目标蕴含"读懂前文才能预测准下一个" 的隐含要求,在海量文本上优化它就附带学到了语义、语法、世界知识、推理模式 (详见 06-预训练/04-scaling-laws)。
一次前向跑过哪些部件?
核心问题:从读者输入的字符串到模型吐出下一个 token,数据具体经过哪些处理?
数据流是一条线性管线,内嵌一个 L 层的 Transformer block 堆叠。整条管线走一遍 = 预测出 1 个 token():
先建立两个直觉:
- 一次前向 = 1 个 token:上图走一遍只产出 1 个新 token。生成 100 个 token 要走 100 遍——但 KV cache 让第 2 遍之后的计算量大幅下降 (详见 08-推理/03-kv-cache)。
- 训练和推理走同一条管线:唯一区别是训练时一次前向同时算"每个位置预测下一个 token" 的 loss 并反传,推理时只取最后位置的输出并采样 (详见 08-推理/01-总览)。
| 部件 | 职责 | 张量形状 | 详见 |
|---|---|---|---|
| Tokenizer | 字符串切成离散 token id | string → [s] | 03-02 |
| Token embedding | token id 查表到 $h$ 维向量 | [s] → [s, h] | 03-03 |
| 位置编码 | 注入"第几位" 信息 | [s, h] → [s, h] | 03-04 |
| Self-attention | token 之间互相看,加权求和 | [s, h] → [s, h] | 04 |
| FFN (MLP) | 单 token 内非线性加工 | [s, h] → [s, h] | 05-02 |
| LayerNorm + 残差 | 稳定训练 + 让深层堆叠不退化 | [s, h] → [s, h] | 05-03 |
| Transformer block | 上述四件套组装 | [s, h] → [s, h] | 05-04 |
| LM head | 最后一层隐向量投到词表,得到 logits (GPT-2/3 与 embedding 共享权重 = weight tying; Llama / Qwen 大模型 untie,详见 03-token-embedding) | [s, h] → [s, V] | 06-02 |
| Sampling | logits → 1 个 token id | [V] → int | 08-04 |
| 自回归循环 | 单步预测拼成长输出 | 多次重跑前向 | 08-02 |
@tbl-anatomy-components 部件职责与外链 ($s$ 序列长度,$h$ 隐藏维度,$V$ 词表大小,定义见父总览 1 总览)
为什么用 Transformer 而不是 RNN?
核心问题:Transformer 之前 RNN/LSTM 主导语言建模十年,为什么被一个新算子在两年内全面取代?
RNN 用一个递推公式同时引入了两个对训练大模型致命的约束,Transformer 用 self-attention 把两条同时解掉。
约束 1: RNN 长程依赖学不动
RNN 的核心递推:
$$\begin{equation} h_t = f(h_{t-1}, x_t) \label{eq:anatomy-rnn} \end{equation}$$梯度沿时间反传时反复乘同一个权重矩阵,长序列下梯度要么爆炸要么消失,远端 token 对当前的影响被冲淡。Bengio, Simard, Frasconi 1994 给出梯度沿时间反传的理论分析[1]。LSTM (Hochreiter & Schmidhuber 1997) 用门控机制部分缓解[2],但实践中超过几百 token 仍然吃力。
约束 2: RNN 训练无法时间维并行
公式 \ref{eq:anatomy-rnn} 强制 $h_t$ 必须在 $h_{t-1}$ 算完后才能算。一段 4K token 序列要串行 4K 步,GPU 的大规模并行算力用不上,训练吞吐被这条数据依赖卡死。
Self-attention 同时解掉两条
Transformer (Vaswani et al. 2017) 把递推换成自注意力[3]:
$$\begin{equation} y_t = \sum_{i=1}^{t} \alpha_{t,i} \cdot v_i, \quad \alpha_{t,i} = \mathrm{softmax}_i\left(\frac{q_t \cdot k_i}{\sqrt{d}}\right) \label{eq:anatomy-attn} \end{equation}$$每个位置的输出直接对所有位置加权求和,权重由 query / key 内积决定。两个根本变化:
- 长程信息一跳即达:位置 $t$ 看位置 $i$ 不依赖中间任何位置,不存在沿时间衰减。任何两个 token 距离都是 1 跳。
- 序列维全并行:$y_t$ 之间没有数据依赖,训练时所有位置可以一次性算完——正好契合 GPU 的大规模并行算力,训练吞吐随算力规模线性扩展。
代价是 self-attention 复杂度 $O(s^2 \cdot h)$,对序列长度二次增长——这又催生了长上下文专题里的注意力变体 (详见 03-长上下文/04-注意力机制变体)。
Decoder-only 是后续所有模型的主线
Transformer 原论文是 encoder-decoder 结构 (翻译任务),GPT-1 把它简化成仅 decoder + 因果掩码,成了之后所有大模型的事实主线。Radford et al. 2018 用 12 层 decoder + 自回归 next-token prediction,在 12 个 NLP 任务里 9 个达到 SOTA[4]。这条 decoder-only 主线被 GPT-2/3、Llama、Qwen、DeepSeek 等全面沿用,也是本章节后续 04-08 章默认的架构基线。
训练和推理跑同一条管线吗?
核心问题:既然图里只画了一条管线,训练时跑的、推理时跑的是同一个东西吗?
是同一条管线,但两端的计算特征完全相反,这条差异是后续 06/07/08 三章共用的"为什么"。
| 维度 | 训练 | 推理 (decode 阶段) |
|---|---|---|
| 一次前向产出 | 序列每个位置的 logits + 算 loss 反传 | 只取最后位置,采样出 1 个 token |
| 序列维并行 | 完全并行 (一次吃 4K token,所有位置并行算) | 必须串行 (生成第 $t$ 个要等第 $t-1$ 个完成) |
| 计算瓶颈 | compute-bound, MFU 看矩阵乘 | memory-bound,瓶颈在 KV cache 读取带宽 |
| KV cache | 不用 (每步独立反传) | 必用 (否则每生成一个都要重算前文 K/V) |
@tbl-anatomy-train-vs-infer 训练与推理的根本差异 (推理还有 prefill 阶段,特征接近训练前向,详见 08-02 prefill 与 decode)
这张表回答了三章的"为什么":为什么 06 预训练能跑 trillion token 数据集 (并行);为什么 08 推理需要专门优化 KV (decode 串行 + memory-bound);为什么 07 微调与对齐是个"小训练" (走训练前向,不走 decode)。
接下来怎么深入?
核心问题:拿到全景之后,想深挖某一块去哪里读?
按部件展开,跟图里的方框一一对应:
- 数据如何进入模型 → 03-文本如何变成数字: tokenization / embedding / 位置编码
- attention 的 4 步递进 → 04-注意力机制:简化自注意力 → Q/K/V → 因果掩码 → 多头
- 从 attention 到完整模型 → 05-组装GPT: FFN / 归一化 / 残差 / block 堆叠
- 模型怎么学到能力 → 06-预训练:语言建模目标 / 训练循环 / scaling laws
- 怎么对齐人类偏好 → 07-微调与对齐: SFT / RLHF / DPO
- 怎么把训练好的模型用起来 → 08-推理: prefill/decode / KV cache / 采样 / 量化
按主题深挖 (本章不展开但相关的进阶专题):
- 长上下文 (位置外推 / 注意力变体 / KV 架构压缩) → knowledge/03-长上下文
- 并行切分 (TP / PP / DP / EP) → interconnect/05-LLM并行通信
- 具体模型对比 (GPT / Llama / DeepSeek / Qwen) → knowledge/01-业界动态
Takeaway
| 知识点 | 核心结论 |
|---|---|
| LLM 是什么 | 学 $P(x_t \mid x_{<t})$ 的概率函数 + 自回归循环 |
| 单一目标 vs 涌现能力 | next-token 一个目标蕴含"读懂前文" 要求,海量数据下涌现语义/推理 |
| 数据流主线 | tokenizer → embedding → 位置编码 → Transformer block × L → LM head → sampling |
| 一次前向 | 只产出 1 个 token,长输出靠自回归循环 |
| Transformer 取代 RNN 的理由 | self-attention 同时解掉"长程依赖"与"训练串行" 两条 RNN 根本约束 |
| Decoder-only 是事实主线 | GPT-1 起,后续 GPT/Llama/Qwen/DeepSeek 全部沿用 |
| 训练 vs 推理 | 同一条管线;训练并行 / compute-bound,推理 decode 串行 / memory-bound |
| 本篇定位 | 只画地图,不讲机制——机制全部留给 03-08 章 |
开放问题
知识层面 (LLM 主线尚未定论的开放方向):
- Decoder-only 是否最终胜出:GPT 系把 decoder-only + next-token 推成事实主流,但 encoder-decoder (T5 / FLAN-T5) 在部分任务仍占优,学术界仍有争议。
- Next-token prediction 是否足以 scale 到推理:o1 / DeepSeek-R1 等推理模型在 next-token 之上加了显式 chain-of-thought 与 RL 训练,单纯 scale next-token 能否涌现强推理仍是开放问题。
- 非自回归 / 扩散范式的潜力:扩散语言模型 (LLaDA / Diffusion-LM 系) 试图打破自回归串行约束,能否在质量与吞吐上整体超越自回归待观察。
写作待办 (本篇文档层面):
- 是否补一张训练 / 推理对比图——当前用表格交代差异,视后续 review 反馈决定。
- MoE / MLA 等架构变体是否在数据流图上加"可替换位置" 标注——当前按 dense Transformer 画,变体外链到 interconnect/05-LLM并行通信/08-专家并行 和 03-长上下文/05-kv-cache架构压缩。
参考资料
- Bengio, Simard, Frasconi. Learning Long-Term Dependencies with Gradient Descent Is Difficult. IEEE Transactions on Neural Networks, 5(2):157-166, 1994.
- Hochreiter, Schmidhuber. Long Short-Term Memory. Neural Computation, 9(8):1735-1780, 1997.
- Vaswani et al. Attention Is All You Need. NeurIPS 2017. https://arxiv.org/abs/1706.03762
- Radford et al. Improving Language Understanding by Generative Pre-Training (GPT-1). OpenAI 2018. https://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdf
延伸阅读
- Sebastian Raschka. Build a Large Language Model (From Scratch). Manning, 2024. Chapter 1.
- Andrej Karpathy. Neural Networks: Zero to Hero. https://karpathy.ai/zero-to-hero.html
- 父总览:1 总览 — 全章节地图 + 共享名词与形状约定。