写在前面:这篇文章要解决什么问题?
你可能每天都在用 ChatGPT、Claude、文心一言,但你有没有想过:
- 它是怎么"理解"你说的话的?
- 它的回答是怎么一个字一个字蹦出来的?
- 它真的在"思考"吗?
这篇文章会用最直白的语言,带你从零理解这一切背后的技术原理。不需要数学基础,不需要编程经验。我们从最基本的问题开始。
第一章:机器怎么"读懂"文字?
1.1 计算机只认数字
计算机不认识"你好"这两个字。它只认识数字——0 和 1。
所以第一个问题是:怎么把文字变成数字?
最朴素的做法是给每个字编个号:
| 字 | 编号 |
|---|---|
| 我 | 1 |
| 爱 | 2 |
| 吃 | 3 |
| 苹果 | 4 |
"我爱吃苹果" → [1, 2, 3, 4]
但这有个大问题:编号 1 和编号 2 之间的"距离"是 1,编号 1 和编号 4 之间的"距离"是 3。可是"我"和"爱"的关系,真的比"我"和"苹果"更近吗?单纯的编号无法表达词语之间的含义关系。
1.2 词向量:用一组数字描述一个词的"含义"
解决方案是:不用一个数字,而是用一组数字(向量)来表示一个词。
想象一个简化的例子,我们用两个维度来描述食物:
甜度
↑ · 西瓜
| 苹果 ·
|
| · 蛋糕
|
| 牛排 ·
──┼──────────────→ 热量
|
- "苹果"可以表示为
[甜度=0.7, 热量=0.3] - "西瓜"可以表示为
[甜度=0.8, 热量=0.2] - "牛排"可以表示为
[甜度=0.1, 热量=0.8]
苹果和西瓜在这个"空间"里靠得很近,因为它们含义相似。这就是词向量(Word Embedding)的核心思想。
实际的大语言模型中,每个词的向量不是 2 维,而是几千维(比如 4096 维)。维度越多,能捕捉的语义细节越丰富。
💡 核心概念:词向量(Embedding)
把每个词映射成一个高维空间中的点。含义相近的词,在空间中距离相近。这是所有现代语言模型的第一步。
第二章:注意力机制——语言理解的核心突破
2.1 一个关键问题:同一个词在不同句子里意思不同
看这两个句子:
- "苹果很好吃" → 苹果 = 水果
- "苹果发布了新手机" → 苹果 = Apple 公司
如果每个词只有一个固定的向量,就无法区分这两种含义。我们需要一种机制,让一个词的表示随上下文而变化。
这就是注意力机制(Attention)要解决的问题。
2.2 注意力机制的直觉
想象你在读一篇文章,读到"它"这个字:
"小猫跳上了桌子,因为它很好奇。"
你的大脑会自动回头看——"它"指的是谁?你的目光会重点关注"小猫",而不是"桌子"。
这就是注意力:在处理当前词的时候,去"看"句子中的其他词,决定应该重点关注谁。
2.3 注意力的工作方式(不用公式版)
对于句子中的每个词,注意力机制做三件事:
第一步:提问
当前词生成一个"问题"(Query):"我是'它',我想知道我应该关注谁?"
第二步:亮身份牌
句子中每个词都亮出自己的"身份牌"(Key):"我是'小猫'" "我是'桌子'" "我是'好奇'"
第三步:给信息
根据问题和身份牌的匹配程度,每个词按比例贡献自己的"信息"(Value)
用一个打分的过程来理解:
"它" 的问题 vs "小猫" 的身份牌 → 匹配度 0.7 ← 高度关注!
"它" 的问题 vs "桌子" 的身份牌 → 匹配度 0.1 ← 不太相关
"它" 的问题 vs "好奇" 的身份牌 → 匹配度 0.2 ← 有点相关
最终,"它"的新表示 = 70% 的"小猫"信息 + 10% 的"桌子"信息 + 20% 的"好奇"信息。
这样,"它"这个词就"吸收"了上下文的信息,变成了一个带有上下文含义的表示。
💡 核心概念:注意力机制(Attention)
每个词都会"看"句子中的所有其他词,根据相关程度分配不同的关注权重,然后把相关词的信息融合到自己的表示中。这让同一个词在不同上下文中获得不同的含义。
2.4 多头注意力:从多个角度看问题
一个词和另一个词的关系可能是多方面的:
- 语法关系:"它"和"小猫"是指代关系
- 语义关系:"好奇"描述的是"小猫"的状态
- 位置关系:相邻的词往往有更直接的语法联系
一组 Query/Key/Value 只能捕捉一种关系。所以 Transformer 用了多头注意力(Multi-Head Attention)——同时用多组 Query/Key/Value,每组关注不同类型的关系,最后把结果合并。
就像看一幅画:一个人看构图,一个人看色彩,一个人看光影,最后综合起来才是完整的理解。
第三章:Transformer——改变一切的架构
3.1 Transformer 之前的世界
在 2017 年 Transformer 出现之前,处理语言的主流方法是 RNN(循环神经网络)。
RNN 的工作方式像逐字阅读:
读"我" → 记住 → 读"爱" → 更新记忆 → 读"吃" → 更新记忆 → 读"苹果" → 更新记忆
问题很明显:
- 必须一个字一个字处理,无法并行,速度很慢
- 记忆会衰减——读到第 100 个字时,第 1 个字的信息已经很模糊了("长距离依赖"问题)
3.2 Transformer 的核心思想:所有词同时互相看
Transformer 的革命性在于:不再逐字处理,而是让句子中的所有词同时互相关注。
RNN(串行): 我 → 爱 → 吃 → 苹果 (一个接一个)
Transformer(并行):
我 ←→ 爱 ←→ 吃 ←→ 苹果 (所有词同时互相看)
这带来两个巨大优势:
- 并行计算:所有词同时处理,训练速度大幅提升,可以利用 GPU 的并行能力
- 无距离限制:第 1 个词和第 1000 个词可以直接互相关注,不存在记忆衰减
3.3 Transformer 的结构
Transformer 的完整结构分为编码器(Encoder)和解码器(Decoder)两部分:
┌─────────────────────────────────────────────────────┐
│ Transformer │
│ │
│ 输入文本 输出文本 │
│ ↓ ↑ │
│ ┌──────────┐ ┌──────────┐ │
│ │ │ │ │ │
│ │ 编码器 │ ──── 信息传递 ──→ │ 解码器 │ │
│ │ Encoder │ │ Decoder │ │
│ │ │ │ │ │
│ └──────────┘ └──────────┘ │
│ │
│ 理解输入内容 生成输出内容 │
└─────────────────────────────────────────────────────┘
但在大语言模型(如 GPT、Claude)中,只用了解码器部分。为什么?我们在第四章解释。
3.4 一个 Transformer 层内部长什么样
每一层 Transformer 做两件事:
输入词向量
↓
┌─────────────────────┐
│ 多头注意力 │ ← 每个词看看其他词,融合上下文信息
│ (Multi-Head Attn) │
└─────────┬───────────┘
↓
┌─────────────────────┐
│ 前馈神经网络 │ ← 对融合后的信息做进一步加工
│ (Feed-Forward) │
└─────────┬───────────┘
↓
输出词向量(含上下文信息)
这两步之间还有残差连接和层归一化,但核心就是这两步。
一个大语言模型会堆叠几十层甚至上百层这样的结构。每过一层,词的表示就融入了更深层次的上下文理解。
⚠️ 类比:如果把理解语言比作读一本书——
- 第 1 层:认识每个字
- 第 5 层:理解词组和短语
- 第 20 层:理解句子含义
- 第 50 层:理解段落逻辑和隐含意思
- 第 96 层:理解全文主旨、风格、意图
3.5 位置编码:告诉模型词的顺序
注意力机制有一个问题:它是"无序"的。"我爱你"和"你爱我"在纯注意力看来没有区别——都是"我""爱""你"三个词互相看。
但语序显然很重要!所以 Transformer 引入了位置编码(Positional Encoding):给每个词的向量加上一个表示"我在第几个位置"的信号。
"我"的最终输入 = "我"的词向量 + 位置 1 的编码
"爱"的最终输入 = "爱"的词向量 + 位置 2 的编码
"你"的最终输入 = "你"的词向量 + 位置 3 的编码
这样模型就能区分"我爱你"和"你爱我"了。
第四章:从 Transformer 到 GPT——"只保留解码器"
4.1 两种 Transformer 的用法
原始 Transformer 论文(2017 年 Google 的 "Attention Is All You Need")设计了编码器+解码器的结构,用于机器翻译。但后来研究者发现,可以只用其中一部分:
| 架构 | 代表模型 | 用途 | 核心特点 |
|---|---|---|---|
| 只用编码器 | BERT | 理解文本(分类、问答) | 能同时看到前后文 |
| 只用解码器 | GPT、Claude、LLaMA | 生成文本 | 只能看到前面的词 |
| 编码器+解码器 | T5、原始 Transformer | 翻译、摘要 | 先理解再生成 |
今天的大语言模型(ChatGPT、Claude、Gemini)几乎都是只用解码器的架构。
4.2 为什么只用解码器?
因为大语言模型的核心任务是生成文本——给定前面的内容,预测下一个词。
这个任务天然适合解码器:
输入: "今天天气"
模型看到: "今" → "今天" → "今天天" → "今天天气"
预测: → "真"
解码器有一个关键特性:因果遮罩(Causal Mask)。在处理每个词时,它只能看到这个词之前的内容,看不到后面的。
处理"今"时: 能看到 [今]
处理"天"时: 能看到 [今, 天]
处理"气"时: 能看到 [今, 天, 天, 气]
预测下一个: 能看到 [今, 天, 天, 气] → 输出"真"
这和人类写作的过程一模一样:你写下一个字的时候,只能基于已经写过的内容,不能"偷看"还没写的部分。
4.3 GPT 的含义
GPT = Generative Pre-trained Transformer
- Generative(生成式):它的任务是生成文本
- Pre-trained(预训练的):先在海量文本上训练,再针对具体任务微调
- Transformer:基于 Transformer 架构
这三个词精确概括了现代大语言模型的本质。
第五章:LLM 是怎么"学会"语言的?
5.1 预训练:读遍互联网
大语言模型的训练分两个阶段。第一阶段叫预训练(Pre-training)。
方法极其简单粗暴:给模型看海量文本,让它不断预测下一个词。
训练数据:互联网上的书籍、网页、论文、代码、对话……(万亿级别的词)
训练过程(反复进行数万亿次):
┌──────────────────────────────────────────────┐
│ 输入: "法国的首都是" │
│ 模型预测: "伦敦" (概率 0.1) │
│ 正确答案: "巴黎" │
│ 模型: 哦,我错了,调整一下内部参数…… │
│ │
│ 下一次看到类似内容: │
│ 输入: "法国的首都是" │
│ 模型预测: "巴黎" (概率 0.8) ✓ │
└──────────────────────────────────────────────┘
就是这么简单。没有人教它语法规则,没有人告诉它什么是主谓宾,没有人给它编百科全书。 它只是在预测下一个词的过程中,自己"领悟"了语言的规律。
💡 为什么"预测下一个词"能学会这么多?
要准确预测下一个词,模型必须理解:
- 语法("我吃了一个___" → 名词)
- 事实("地球绕着___转" → 太阳)
- 逻辑("如果 A>B 且 B>C,那么 A___C" → 大于)
- 情感("这部电影太感人了,我___" → 哭了)
- 代码("for i in range(10):___" → print(i))
预测下一个词看似简单,实际上是一个需要深度理解语言和世界知识的任务。
5.2 模型的"参数"是什么?
你经常听到"千亿参数""万亿参数"。参数到底是什么?
简单说:参数就是模型内部的数字旋钮。 每个参数是一个可以调节的数字,控制着信息在模型中如何流动和变换。
类比:一台巨大的调音台
┌─────────────────────────────────────┐
│ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ │
│ │
│ 每个旋钮 = 一个参数 │
│ GPT-4 ≈ 1.8 万亿个旋钮 │
│ Claude 3.5 ≈ 数千亿个旋钮 │
└─────────────────────────────────────┘
训练的过程就是:不断微调这些旋钮,让模型的预测越来越准。
5.3 对齐训练:从"预测机器"到"有用的助手"
预训练完成后,模型已经很"聪明"了,但它只会续写文本,不会对话。
比如你输入"什么是光合作用?",预训练模型可能会续写:
"什么是光合作用?这是一个常见的生物学考试题目。以下是参考答案模板……"
它在续写一个"考试题目"的文本,而不是在回答你的问题。
所以需要第二阶段:对齐训练(Alignment),让模型学会"当一个有用的助手"。
对齐训练通常包括:
第一步:监督微调(SFT)
人类标注员写出高质量的问答对:
问:什么是光合作用?
答:光合作用是植物利用阳光、水和二氧化碳,
合成有机物并释放氧气的过程……
用这些数据继续训练模型,让它学会"问答"的格式。
第二步:人类反馈强化学习(RLHF)
让模型对同一个问题生成多个回答,人类标注员给这些回答排序(哪个更好),然后用这个排序信号继续优化模型。
问题:"如何学习编程?"
回答 A:去学 Python。 ← 人类评分:一般
回答 B:建议从 Python 入手,因为语法简洁, ← 人类评分:好
社区资源丰富。可以从官方教程开始……
回答 C:编程很难,你可能学不会。 ← 人类评分:差
模型学到:应该给出详细、有帮助、积极的回答
✅ 总结:LLM 的两阶段训练
- 预训练:读遍互联网,学会语言和知识(预测下一个词)
- 对齐训练:学会当一个有用、安全、诚实的助手(SFT + RLHF)
第六章:LLM 是怎么生成回答的?
6.1 核心真相:一次只预测一个词
这是理解 LLM 最重要的一点:它每次只预测一个词(token),然后把这个词加到输入中,再预测下一个词。
当你问"中国的首都是哪里?"时,模型内部发生的事情是:
第 1 步:
输入: [中国的首都是哪里?]
模型计算 → 下一个词的概率分布:
"中" 0.01
"北" 0.85 ← 最高!
"上" 0.05
"南" 0.03
...
选择 → "北"
第 2 步:
输入: [中国的首都是哪里? 北]
模型计算 → 下一个词的概率分布:
"京" 0.97 ← 最高!
"方" 0.01
"边" 0.01
...
选择 → "京"
第 3 步:
输入: [中国的首都是哪里? 北京]
模型计算 → 下一个词的概率分布:
"是" 0.60
"。" 0.25
"," 0.10
...
选择 → "是"
……如此反复,直到模型输出一个"结束"标记。
这就是为什么 ChatGPT 的回答是一个字一个字蹦出来的——因为它确实是一个字一个字生成的。
6.2 Token:模型真正处理的单位
模型实际处理的不是"字",而是 Token。Token 是模型把文本切分后的最小单位。
英文示例:
"I love programming" → ["I", " love", " program", "ming"]
4 个 token
中文示例:
"我爱编程" → ["我", "爱", "编", "程"]
4 个 token
代码示例:
"print('hello')" → ["print", "('", "hello", "')"]
4 个 token
为什么不直接用字?因为 Token 是在大量文本上统计出来的最高效的切分方式——常见的词保持完整,罕见的词被拆成更小的片段。这样可以用有限的"词汇表"(通常 3-10 万个 token)覆盖几乎所有文本。
6.3 温度(Temperature):控制创造力
模型预测出每个词的概率后,怎么选?这由温度参数控制:
温度 = 0(确定性) — 总是选概率最高的词。"北京是中国的首都。" 适合:事实问答、代码。
温度 = 0.7(平衡) — 大概率选高概率词,偶尔选低概率词。"北京,这座古老而现代的城市,是中国的首都。" 适合:日常对话。
温度 = 1.5(高创造力) — 更多随机性,可能选出意想不到的词。"北京,一座在时光长河中沉浮的巨兽……" 适合:创意写作。
6.4 上下文窗口:模型的"工作记忆"
模型每次预测时,能"看到"的文本长度是有限的,这叫上下文窗口(Context Window)。
┌──────────────────────────────────────────────┐
│ 上下文窗口(比如 128K tokens) │
│ │
│ [系统提示] [历史对话] [当前问题] → [生成回答] │
│ │
│ ← ─ ─ ─ ─ 模型能看到的范围 ─ ─ ─ ─ → │
└──────────────────────────────────────────────┘
| 模型 | 上下文窗口 | 大约相当于 |
|---|---|---|
| GPT-3(2020) | 4K tokens | 约 3000 字 |
| GPT-4(2023) | 128K tokens | 约 10 万字(一本小说) |
| Claude 3.5(2024) | 200K tokens | 约 15 万字 |
| Gemini 1.5(2024) | 1M tokens | 约 75 万字(几本书) |
上下文窗口越大,模型能处理的信息越多,但计算成本也越高。
第七章:LLM 的能力与局限
7.1 它能做什么(以及为什么能)
| 能力 | 原因 |
|---|---|
| 流畅的自然语言对话 | 训练数据中有海量对话文本 |
| 写代码、调试 | 训练数据中有大量开源代码 |
| 翻译 | 训练数据中有多语言平行文本 |
| 总结长文 | 注意力机制能捕捉全文关键信息 |
| 逻辑推理 | 训练数据中有数学证明、逻辑论述 |
| 角色扮演 | 训练数据中有小说、剧本、对话 |
7.2 它不能做什么(以及为什么不能)
⚠️ LLM 的核心局限
1. 幻觉(Hallucination) 模型会自信地编造不存在的事实。因为它的本质是"预测最可能的下一个词",而不是"查找正确答案"。如果训练数据中某个模式出现频率高,模型就会倾向于生成它,即使在当前语境下是错误的。
2. 知识截止 模型只知道训练数据截止日期之前的信息。它不能上网搜索(除非给它搜索工具)。
3. 数学计算不可靠 "1234 × 5678 = ?" 模型可能算错,因为它不是在"计算",而是在"预测看起来像答案的数字"。
4. 没有真正的"记忆" 每次对话是独立的。上一次聊天的内容,下一次不会记得(除非系统特别设计了记忆机制)。
7.3 它是在"思考"吗?
这是一个哲学问题,但从技术角度可以明确说:
LLM 不是在"思考",它是在做极其复杂的模式匹配和概率预测。
它没有意识,没有理解,没有意图。它只是一个函数:输入一段文本,输出下一个词的概率分布。
但这个函数经过万亿级数据的训练后,其行为看起来非常像思考。这种"看起来像"是否等同于"真的是",是一个尚无定论的问题。
第八章:全景回顾
让我们把整个链条串起来:
文字
↓
词向量(Embedding) 把文字变成数字向量
↓
+ 位置编码 告诉模型词的顺序
↓
┌─────────────────────────────┐
│ Transformer 解码器层 × N │
│ │
│ ┌───────────────────────┐ │
│ │ 因果注意力 │ │ ← 每个词关注它前面的所有词
│ │ (多头) │ │ 融合上下文信息
│ └───────────┬───────────┘ │
│ ↓ │
│ ┌───────────────────────┐ │
│ │ 前馈神经网络 │ │ ← 进一步加工信息
│ └───────────┬───────────┘ │
│ ↓ │
│ 重复 N 层(N=96 等) │
└─────────────┬───────────────┘
↓
输出层:对词汇表中每个词打分
↓
概率分布: "北" 0.85, "上" 0.05, "南" 0.03 ...
↓
采样(根据温度)
↓
输出一个 Token → 加入输入 → 重复上述过程
↓
最终输出完整回答
💡 一句话总结
大语言模型 = Transformer 解码器架构 + 海量数据预训练 + 对齐训练。它通过反复预测"下一个词"来生成回答,而注意力机制让它能理解上下文中词与词之间的关系。它不是在"思考",但它在万亿参数和万亿数据的加持下,展现出了惊人的语言能力。
附录:关键术语速查表
| 术语 | 英文 | 一句话解释 |
|---|---|---|
| 词向量 | Embedding | 把词变成一组数字,含义相近的词数字也相近 |
| 注意力机制 | Attention | 让每个词"看"其他词,融合上下文信息 |
| 多头注意力 | Multi-Head Attention | 多组注意力并行,从不同角度理解关系 |
| Transformer | Transformer | 基于注意力机制的神经网络架构,2017 年提出 |
| 编码器 | Encoder | Transformer 中负责"理解"的部分 |
| 解码器 | Decoder | Transformer 中负责"生成"的部分 |
| Token | Token | 模型处理文本的最小单位 |
| 预训练 | Pre-training | 在海量文本上训练模型预测下一个词 |
| 微调 | Fine-tuning | 在特定任务数据上继续训练 |
| RLHF | RLHF | 用人类反馈来优化模型行为 |
| 上下文窗口 | Context Window | 模型一次能处理的最大文本长度 |
| 温度 | Temperature | 控制生成文本的随机性/创造力 |
| 幻觉 | Hallucination | 模型自信地生成错误信息 |
| 参数 | Parameters | 模型内部可调节的数字,决定模型行为 |
推荐阅读
- Attention Is All You Need(2017) —— Transformer 的原始论文
- Language Models are Few-Shot Learners(2020) —— GPT-3 论文
- Training language models to follow instructions with human feedback(2022)—— InstructGPT/RLHF 论文
- 3Blue1Brown 的 "But what is a GPT?" 系列视频 —— 最佳可视化讲解