背景: 从 Language Model 到 Transformer
这一节先不急着进入代码,而是先回答几个最基础的问题:
- 什么是 Language Model?
- 为什么说 LLM 仍然是 Language Model,而不是一个完全不同的东西?
- 为什么学习 LLM 时,往往要先回到 NLP 的发展脉络?
- 从 NLP 的视角看,LLM 和经典 NLP 流程之间是什么关系?
- 从 NLP 的视角看,一个 Language Model 的输入和输出到底是什么?
- Transformer 相比之前的方法,到底解决了什么问题?
Q1: 什么是 Language Model?
如果先忽略 “Large” 这个词,LLM 首先是一个 Language Model。
Language Model 的核心任务可以粗略理解为:给定前面的文本,预测后面的文本出现的概率。
更准确地说,假设一个 token 序列写成:
$$ x_1, x_2, \dots, x_T $$
其中:
- $x_t$ 表示第 $t$ 个 token
- $T$ 表示整个序列的长度
那么一个语言模型想做的事情,是建模这个序列的联合概率:
$$ P(x_1, x_2, \dots, x_T) $$
通常我们会把它按链式法则改写成:
$$ P(x_1, x_2, \dots, x_T) = \prod_{t=1}^{T} P(x_t \mid x_1, x_2, \dots, x_{t-1}) $$
这个式子背后的意思很直接:整个句子的概率,可以拆成“每一步根据前文预测下一个 token”的概率连乘。
所以从这个角度看,LLM 的核心并没有变。它仍然是在做:
- 给定前文
- 预测下一个 token 的分布
只是它的模型规模更大,训练数据更多,结构设计更强,最终表现出了更强的泛化能力和涌现能力。
Q2: 为什么说 LLM 仍然是 LM?
很多时候我们会觉得 LLM 已经像一个“会聊天、会推理、会写代码”的复杂系统了,于是很容易忽略它最基础的一层:它依然是一个 next-token predictor。
这点在代码层面会体现得非常明显:
- 输入通常是一串 token id
- 模型输出通常是一组 logits
- logits 经过 softmax 之后变成词表上的概率分布
- 然后根据这个分布选择下一个 token
也就是说,不管外面包了多少对话模板、system prompt、tool call、采样策略,模型内部最核心的计算目标依然没有变。
所以如果不先理解 Language Model 这件事,就很容易把很多“高层能力”看得过于神秘。
Q3: 为什么学习 LLM 时,往往要先回到 NLP 的发展脉络?
如果直接从今天的 LLM 出发,很容易碰到一种情况:术语很多,模块很多,训练技巧很多,结果所有东西都像是平铺在一起的。
但如果把视角往前退一步,就会发现很多关键问题其实都是沿着 NLP 的发展脉络一步一步演化出来的。
我觉得一个比较自然的主线大概是:
word2vec -> word embedding -> seq2seq -> attention -> transformer -> GPT 系列 -> ChatGPT / 当代 LLM
如果再加上一些标志性的时间节点,会更容易形成整体印象:
- 2013 年前后:
word2vec让“词向量”真正成为神经网络 NLP 里的基础部件 - 2014 年:Attention 机制被明确提出,用来缓解 seq2seq 中的信息瓶颈问题
- 2017 年:Transformer 提出,用 attention 作为主干结构
- 2018 年:BERT 让预训练语言模型成为 NLP 的主流范式之一
- 2019 年:GPT-2 展示出大规模自回归语言模型的潜力
- 2020 年:GPT-3 让 in-context learning 成为一个无法忽视的现象
- 2022 年:InstructGPT、ChatGPT 让 “pretrain + alignment” 这条路线成为主流产品形态
如果把时间线继续往后推,2023 到 2026 这一段我觉得还可以再看到两条很重要的支线:
一条是“对齐 / RL / 偏好优化”的演化,另一条是“工具使用 / agent 化”的演化。
2023-2026: 对齐、RL 与偏好优化
- 2023 年:GPT-4 进一步强化了 “大规模预训练 + 后训练对齐” 这条路线
- 2023 年:DPO(Direct Preference Optimization)开始被广泛讨论,它把原来比较复杂的 RLHF 流程做了更直接的改写
- 2024 年:像 DeepSeekMath 这样的工作把 GRPO 这类方法带进更具体的推理训练场景
- 2025-2026 年:推理能力、可验证任务、偏好优化和 RL 的结合变得越来越重要,尤其是在数学、代码和复杂决策任务上
这一条线的核心变化可以概括成一句话:
模型不再只是“先预训练,再简单微调”,而是越来越强调如何通过偏好数据、可验证反馈和后训练过程,把模型的行为进一步往目标能力上推。
2022-2026: tool use 与 agent 化
- 2022 年:ReAct 把“推理”和“行动”放到一个统一框架里讨论
- 2023 年:Toolformer、OpenAI function calling 这类工作和产品,让“模型调用外部工具”开始变成一个明确方向
- 2024 年:Anthropic 发布 computer use,开始把模型直接操作屏幕、鼠标和键盘这类能力产品化
- 2024 年底:MCP(Model Context Protocol)提出,把模型连接外部工具和数据源这件事进一步标准化
- 到 2025-2026 年:我更倾向于把这一阶段概括成 agent 系统快速升温。重点不再只是“模型能回答什么”,而越来越是“模型能不能调用工具、维持状态、分解任务并执行多步流程”
这里最后一句是我的概括,不是某一篇论文的单点结论。
如果只看过去几年最明显的变化,我觉得确实可以把它理解成:LLM 的发展正在从“更强的语言模型”逐步走向“更强的推理、工具使用和行动系统”。
这条发展线重要的地方,不是让我们去背年份,而是帮助回答两个更核心的问题:
- 每一个新方法最初是在解决什么问题?
- 后来的方法又是如何对前者进行改进的?
比如:
- 为什么需要从 one-hot 走向 embedding?
- 为什么 seq2seq 会遇到长距离依赖和信息压缩的问题?
- 为什么 attention 会成为关键突破?
- 为什么 Transformer 能逐渐取代以 RNN/LSTM 为核心的主干结构?
- 为什么今天的 LLM 虽然规模大得多,但依然能够在 NLP 的历史中找到清晰来源?
所以我更倾向于把 LLM 看成是 NLP 发展链条上的延续,而不是一个与之前工作完全断裂的新东西。
如果这些问题不清楚,那么后面再看 Multi-Head Attention、RoPE、GQA、KV Cache,就很容易只看到“又多了一堆模块”,而不知道它们是在解决什么。
如果把这条线继续往后展开,到 RL、偏好优化、tool use 和 agent 的发展,我另外单独整理了一节:历史脉络: 从 NLP 到 LLM, 再到 Agent。
Q4: 从 NLP 的视角看,LLM 和经典 NLP 流程之间是什么关系?
很多时候我们会以为,LLM 出现之后,之前 NLP 里的很多基本处理流程就不重要了。其实不是。
如果从一个更传统的 NLP 视角看,一条典型链路大致是:
原始文本 -> 文本切分 / tokenization -> id 化表示 -> 向量表示 -> 模型编码 -> 输出层 -> 任务目标
放到今天的 LLM 里,这条线依然成立,只是其模型编码环节被统一到了自回归模型(AR)框架里。
例如:
- 文本仍然要先经过 tokenizer,变成离散 token
- token 仍然要变成 embedding,才能进入神经网络
- embedding 之后仍然要经过多层变换,只是今天这部分主干通常是 Transformer block
- 模型最后仍然要通过输出层,把隐藏状态映射回词表空间
也就是说,今天的 LLM 虽然在模型规模、训练数据和能力表现上已经和早期 NLP 模型很不一样,但它内部的处理流程并不是凭空出现的。
从“文本如何变成可计算对象”到“模型如何输出词表上的分布”,这条主线依然和经典 NLP 工作一脉相承。
这也是为什么我更倾向于从 NLP 的视角引入大模型。因为这样很多问题会变得自然:
- tokenizer 为什么重要?
- token id 为什么不能直接用于表示语义,而要先变成 embedding?
- 为什么输出不是一个词,而是一整个词表上的 logits?
- 为什么很多老问题,比如表示学习、上下文建模、长距离依赖,到今天依然还在,只是换了一套更强的结构来处理?
Q5: 从 NLP 的视角看,LM 的输入和输出是什么?
如果从 NLP 的角度看,Language Model 的输入输出其实可以分成两个层面:
- 从“数据接口”的角度看,输入是 token id,输出是词表上的分数或概率。
- 从“模型内部表示”的角度看,输入会先变成 embedding,输出则会经过 language modeling head 变成 logits。
一个比较常见的处理流程可以先写成:
文本 -> tokenizer -> token id -> embedding -> transformer -> logits -> 概率分布
这里可以逐步理解:
- 原始输入首先是文本
- tokenizer 把文本切成 token,并映射成整数 id
- token id 再通过 embedding 层变成连续向量
- 模型主体对这些向量做一系列变换
- 最后输出 logits
其中 logits 可以理解成:
模型对词表中每个候选 token 给出的原始分数,它还不是概率。
如果词表大小记作 $V$,那么对于序列中的某个位置,模型最终输出的往往是一个长度为 $V$ 的向量:
$$ z \in \mathbb{R}^{V} $$
其中:
- $V$ 表示词表大小
- $z_i$ 表示第 $i$ 个 token 对应的原始分数
再经过 softmax,才会变成真正的概率分布:
$$ P(x_t = i \mid x_{<t}) = \frac{e^{z_i}}{\sum_{j=1}^{V} e^{z_j}} $$
所以如果只抓住最关键的一层,可以把 LM 的输入输出理解成:
- 输入:前文对应的 token 序列
- 输出:下一个 token 在整个词表上的概率分布
而 embedding、hidden states、logits 这些概念,就是这条链路中间的内部表示。
Q6: Transformer 相比之前的方法解决了什么问题?
在进入 Transformer 之前,很多 NLP 模型依赖 RNN、LSTM 这类按时间步递归处理序列的结构。它们当然有自己的价值,但也存在一些明显限制:
- 序列计算难以并行
- 长距离依赖难处理
- 信息需要跨很多时间步传递,优化困难
Attention 的核心思想可以粗略理解成:
在处理当前位置时,不必只依赖一个压缩过的历史状态,而是可以直接去“看”整段上下文里和当前最相关的部分。
Transformer 更进一步,直接把 attention 放到模型的中心位置,用它来完成序列内部的信息交互。这带来了几个非常关键的好处:
- 更容易并行计算
- 更容易建模长距离依赖
- 在工程上更适合大规模训练
这也是为什么今天在讲 LLM 时,虽然表面上会讨论各种新结构,但真正的主干依然是 Transformer 这一套范式。
这一节之后要带着哪些问题往下看?
如果这一节只留下几个最重要的问题,我觉得是下面这些:
- 既然 LLM 本质上还是 Language Model,那么它的输入和输出在代码里具体长什么样?
- 文本是如何一步步变成 token id 的?为什么今天通常不是直接按“词”来切分?
- Transformer 既然是当前 LLM 的主干结构,那么一个 Transformer 模型具体由哪些模块拼起来?
- Attention 为什么会成为整个结构的核心?
所以下一节先单独回答一个更基础的问题:文本到底是怎么变成 token id 的,也就是 tokenizer 在整个流程里扮演什么角色。