大模型是怎么工作的:从 Token 到思考
深入解析 ChatGPT/Gemini/Claude 背后的核心技术,让你真正理解 AI 是如何"生成"文字的
📑 文章目录
1. 从"接龙"游戏说起
想象一下,如果你要玩一个文字接龙游戏,规则是:给你一段话的开头,你来猜下一个词最可能是什么。
比如我给你:"今天天气真__"
你会怎么填?根据你的语言经验,你大概率会填"好"、"不错"、"晴朗"……但不太可能是"电脑"、"量子"或者"区块链"。
这就是大语言模型(LLM)的核心机制:预测下一个词(Next Token Prediction)。
💡 关键洞察
ChatGPT 并没有在"思考"或"理解",它只是在不断预测:给定前面的词序列,下一个最可能出现的词是什么。这是一个统计学游戏。
但问题是:人类语言如此复杂,词语之间的关联如此微妙,模型是怎么学会这种"预感"的?
答案藏在三个关键技术中:Token、Embedding、Transformer。
2. Token:AI 的"词汇"
人类说"词",AI 说"Token"。但它们不完全是一回事。
2.1 什么是 Token?
Token 是模型处理文本的最小单元。一个 Token 可以是:
| Token 示例 | 类型 | 说明 |
|---|---|---|
"好" |
完整单词 | 常见汉字 |
"特" |
汉字 | 独字也可能是 token |
"ing" |
词根/词缀 | 英语单词的常见后缀 |
" 懂" |
带空格 | 英文单词前的空格 |
"123" |
数字片段 | 连续数字作为一个 token |
📝 Token 的划分规则
以 GPT-4 使用的 Tiktoken 分词器为例:
中文:通常 1-2 个汉字 = 1 个 Token("学习"是一个token,但生僻字可能单独成token)
英文:平均 1 个单词 ≈ 1.3 个 Token("learning" 可能被拆成 "learn" + "ing")
代码:特殊处理,常见符号组合作为独立 Token
2.2 为什么不用"词"?
你可能会问:为什么不直接用人类理解的"词"?
因为语言太不规则了!
英语有超过 100 万个单词,中文常用字 3500 个、但组合无限。如果按词分,词表会爆炸式增长。
Token 是一种平衡:不是太细(字级别计算量太大)、也不是太粗(词级别词表太大)。
┌─────────────────────────────────────────────────┐
│ 中文文本 Token 数 示例 │
├─────────────────────────────────────────────────┤
│ 1 个汉字 ~1 Token "我" │
│ 1 个英语单词 ~1.3 Token "hello" │
│ 1 个标点符号 ~0.3 Token "。" │
│ 1 个表情符号 ~2 Token "😂" │
│ 1000 字中文 ~500-800 Token │
│ 750 个英语单词 ~1000 Token │
└─────────────────────────────────────────────────┘
2.3 Token 的限制
理解 Token 对使用 AI 非常重要:
- 上下文窗口限制:ChatGPT-4 支持 128K Token,意味着它一次能"看到"约 10 万汉字或 10 万英文单词
- 费用计算:API 按 Token 计费,中文比英文贵(因为中文 Token 效率低)
- 输出限制:每次回复有 Token 上限(通常是输出 4K 或 8K Token)
3. Embedding:把文字变成数字
模型只能处理数字,不能处理文字。所以我们需要把 Token 转换成数字向量——这就是 Embedding。
3.1 什么是 Embedding?
Embedding 本质上是一个查表操作:
Token: "猫" ──→ 查表 ──→ [0.21, -0.34, 0.87, 0.12, ...] (词表) (1536维向量) Token: "狗" ──→ 查表 ──→ [0.19, -0.31, 0.92, 0.08, ...] ↑ 相似的向量!
每个 Token 都被转换成一个高维向量(GPT-4 用 1536 维)。"猫"和"狗"的向量很接近,因为它们都是"动物"。
3.2 词向量的魔力
更有趣的是,词向量可以进行数学运算:
King - Man + Woman ≈ Queen
这个经典例子说明:词向量捕获了词语之间的语义关系。当模型学会这种表示,"理解"就变成了可计算的数学操作。
3.3 上下文 Embedding
但这里有个问题:同样的词在不同语境下意思不同。
"苹果"可以是水果(吃),也可以是公司(用 iPhone)。
所以现代模型使用的是上下文感知 Embedding:根据上下文动态调整词向量。
"我吃了一个苹果" ↓ "吃" → [0.1, 0.5, ...] (动词语境) "苹果" → [0.8, 0.2, ...] (水果向量) ───────────────────────────── "我用苹果手机" ↓ "用" → [0.3, 0.7, ...] (使用语境) "苹果" → [0.9, 0.1, ...] (公司向量)
4. Transformer:注意力Transformer
这是最核心的部分。Transformer 是 2017 年 Google 论文《Attention Is All You Need》提出的架构革新。
4.1 为什么需要"注意力"?
考虑这句话:
"小王对小李说:'谢谢你'。"
是谁在说谢谢?是小王还是小李?要理解这个句子,模型需要知道"谢谢"指的是什么。
传统方法( RNN/LSTM )需要逐字处理,很难捕捉长距离依赖。Transformer 的解决方案是:让每个词都能"看到"所有其他词。
4.2 注意力机制的本质
Attention(注意力)的计算过程:
┌─────────────────────────────────────────────────┐
│ Query / Key / Value │
├─────────────────────────────────────────────────┤
│ │
│ "小王" ──→ Q(查询) ──┐ │
│ │ │
│ ├──→ 注意力权重 ──→ 输出向量 │
│ │ │
│ "小李" ──→ K(键) ──┘ ↑ │
│ │ │ │
│ "说了" ──→ V(值) ──────────┘ │
│ │
│ 每个词都问其他词:"你和我的相关性有多高?" │
│ 然后根据相关性加权求和,得到新的表示 │
└─────────────────────────────────────────────────┘
每个词会产生三个向量:Query(Query)、Key(键)、Value(值)。
计算注意力权重 = Query 和 Key 的"匹配程度",然后用它来加权 Value。
4.3 多头注意力(Multi-Head Attention)
单个注意力头只能捕捉一种关系。实际上模型使用多个注意力头并行计算:
输入序列 ─┬─→ Head 1 (捕捉 语义相似性)
├─→ Head 2 (捕捉 句法关系)
├─→ Head 3 (捕捉 指代关系)
├─→ Head 4 (捕捉 位置关系)
...
└─→ Head h → concat → 线性变换 → 输出
这就像同时从多个角度分析一个句子,每个头专注于一种类型的关联。
4.4 完整的 Transformer 架构
Transformer 不只是注意力机制,而是一个完整的处理管道:
输入: "今天天气很好" │ ▼ ┌─────────────────────────────────────────┐ │ Token 化: [今][天][天][气][很][好] │ └─────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────┐ │ Embedding + 位置编码 │ │ (词向量 + 位置信息) │ └─────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────┐ │ ┌─────────────────┐ │ │ │ Multi-Head │ │ │ │ Self-Attention │ │ │ └────────┬────────┘ │ │ ↓ │ │ ┌─────────────────┐ │ │ │ Add & Norm │ │ │ │ (残差+归一化) │ │ │ └────────┬────────┘ │ │ ↓ │ │ ┌─────────────────┐ │ │ │ FFN │ │ │ │ (前馈神经网络) │ │ │ └────────┬────────┘ │ │ ↓ │ │ ┌─────────────────┐ │ │ │ Add & Norm │ │ │ └─────────────────┘ │ │ ↑ │ │ ─────── N层重复 ─────── │ └─────────────────────────────────────────┘ │ ▼ 输出: 对下一个 token 的概率分布
关键组件:
- 位置编码(Positional Encoding):Transformer 没有"顺序"概念,需要手动告诉它词的位置
- Add & Norm:残差连接 + 层归一化,让深层网络训练更稳定
- FFN:前馈神经网络,注意力后的一层全连接网络
5. 训练:让模型学会"说话"
了解了架构,现在看看模型是怎么"学会"预测下一个词的。
5.1 预训练:预测下一个词
预训练阶段,模型在海量文本上做"预测下一个词"的任务:
┌─────────────────────────────────────────────────┐
│ 训练数据示例 │
├─────────────────────────────────────────────────┤
│ │
│ 输入: "今天天气真" ──→ 模型 ──→ 输出: "好" │
│ ↑ │
│ 预测对了✓ │
│ │
│ 输入: "世界上最高的" ──→ 模型 ──→ 输出: "峰" │
│ ↑ │
│ 预测对了✓ │
│ │
│ 输入: "太阳从" ──→ 模型 ──→ 输出: "东" │
│ ↑ │
│ 预测错了✗ │
│ (应该输出"西") │
│ → 调整参数,降低"东"的概率 │
└─────────────────────────────────────────────────┘
这个过程叫语言建模(Language Modeling)。模型被迫学习语言的各种规律——语法、语义、世界知识。
5.2 后训练:Alignment(对齐)
预训练模型会说话,但不一定"说人话"。它可能:
- 输出有害内容
- 答非所问
- 不知道自己不知道
后训练(Post-training)通过两个阶段解决这个问题:
| 阶段 | 方法 | 目的 |
|---|---|---|
| SFT (监督微调) |
用人类标注的问答对训练 | 让模型学会"怎么回答" |
| RLHF (人类反馈强化学习) |
训练 Reward 模型,用强化学习优化 | 让模型"更符合人类偏好" |
🔑 为什么 ChatGPT 的回答更有"人情味"?
RLHF 阶段会雇佣大量人工标注员,对模型的不同输出进行排序打分。模型通过强化学习机制学会:什么样的回答是人类喜欢的。
6. 涌现能力:1+1>2
最神奇的部分来了。随着模型规模增大,某些能力会"突然"出现——这被称为涌现能力(Emergent Abilities)。
6.1 什么是涌现?
在物理系统中,涌现指单个粒子没有、但粒子集体表现出的性质。比如:
- 水分子 → 流动性
- 神经元 → 意识
大模型也有类似现象:
能力
│ ╭───────── 涌现
│ ╱
│ ╱ ← 突然学会
│ ╱
│ ╱
│ ╱
│─────────────────────────╱───────────── 小模型表现
│ ╱
│────────────────╱
└───────────────────────────────────→ 模型规模
GPT-2 GPT-3 GPT-4
6.2 典型的涌现能力
| 能力 | 描述 | 出现规模 |
|---|---|---|
| 思维链(Chain-of-Thought) | 能够一步步推理,展示思考过程 | ~100B 参数 |
| 零样本学习(Zero-shot) | 不需要示例就能执行新任务 | ~10B 参数 |
| 代码编写 | 能写复杂程序并自我 debug | ~GPT-3.5 级别 |
| 多语言能力 | 能处理未专门训练的语言 | ~7B 参数 |
6.3 为什么会出现涌现?
这仍是活跃的研究领域。可能的解释:
- 量变到质变:模型需要足够的"容量"才能存储和组合复杂知识
- 任务分解:大模型能隐式地将复杂任务分解为子任务
- 涌现能力可能是假象:某些"涌现"可能是评估指标的问题,小模型其实也在做对的事,只是没有做对到能通过测试
"我们不知道智能什么时候会出现,但我们知道当它出现时,它会是意想不到的。" —— 这句话同样适用于大模型。
7. 总结
🎯 核心要点回顾
- Token 是模型处理文本的最小单元,中文约 1-2 字 = 1 Token
- Embedding 把 Token 转换成高维向量,捕获语义相似性
- Transformer 通过注意力机制让每个词能与所有其他词交互
- 预训练 让模型学会预测下一个词,获得语言能力
- 后训练(RLHF) 让模型学会符合人类偏好
- 涌现能力 是模型规模增大时出现的"意外惊喜"
理解了这些,你就能明白:
- 为什么 AI 会"一本正经地胡说八道"(因为它只是在预测下一个词)
- 为什么上下文窗口很重要(模型只能看到窗口内的 Token)
- 为什么大模型比小模型"更聪明"(规模带来的涌现能力)
- 为什么提示词工程有效(不同的输入激活不同的推理路径)
下一篇文章我们将深入探讨:如何通过提示工程让 AI 输出质量翻倍。