LLM 底层原理:Transformer、Attention 机制与 RLHF
用尽可能通俗的方式,讲清楚大语言模型到底是怎么工作的。
一、一个核心问题:机器怎么"理解"文字?
计算机只认识数字。要让模型理解文字,第一步是把每个词变成一个向量——一串数字。
"猫" → [0.12, -0.34, 0.87, 0.05, ...] (一个 768 维或 4096 维的列表)
这叫 Embedding(嵌入)。奇妙之处在于:向量之间的方向和距离能表达语义关系。比如:
"国王" - "男人" + "女人" ≈ "女王"
但这只是静态的词向量。"猫"无论出现在什么句子里,向量都一样。而实际上:
- “我在撸猫” —— 猫是宠物
- “这台服务器跑的是 Tomcat” —— 猫是软件
同一个词在不同上下文里意思不同。Transformer 解决的就是这个问题——让每个词的向量"吸收"周围词的信息,变成上下文相关的表示。
二、Transformer:一切的基础
2017 年,Google 在论文《Attention Is All You Need》中提出 Transformer。它彻底取代了之前的 RNN/LSTM,成为所有现代 LLM 的基石。
2.1 整体结构:编码器 - 解码器
输入文本 → [编码器] → 深层理解 → [解码器] → 逐词输出
- 编码器(Encoder):读完整段输入,形成深层理解
- 解码器(Decoder):基于理解,逐词生成输出
GPT 系列只用了解码器部分(因为它的任务就是"续写"),BERT 只用了编码器(因为它的任务是"理解")。
2.2 Transformer Block 的核心三板斧
每经过一个 Transformer 层,输入向量都会变得更"聪明"一点。一层里包含三个关键操作:
输入向量 ↓① 多头自注意力(Multi-Head Self-Attention) ← 核心,后面细讲 ↓② 残差连接 + Layer Normalization ← 防止梯度消失,稳定训练 ↓③ 前馈网络(Feed-Forward Network) ← 一个简单的全连接网络 ↓④ 残差连接 + Layer Normalization ↓输出向量(比输入更"理解"了上下文)
这些层可以堆叠很多次——GPT-3 有 96 层,GPT-4 据说超过 120 层。每经过一层,向量对上下文的捕捉就深一层。
三、Attention 机制:模型的核心能力
3.1 直觉理解
想象你在读这句话:
“昨天小明去打篮球,他投进了关键的最后一球。”
读到这里,你的大脑自动把"他"和"小明"关联起来了。这就是 Attention——在一段信息中,让每个词关注它应该关注的词。
3.2 Self-Attention 的具体步骤
Self-Attention(自注意力)就是让句子中每个词都去看看其他所有词,算出"我应该关注你多少"。通过三个矩阵实现:
对每个词,生成三个向量:
| 向量 | 全称 | 比喻 |
|---|---|---|
| Q(Query) | 查询 | “我在找什么?” —— 当前词在搜索什么信息 |
| K(Key) | 键 | “我是什么?” —— 当前词身上挂的标签 |
| V(Value) | 值 | “我携带什么信息?” —— 当前词实际代表的内容 |
计算过程(图书检索类比):
1. 你在图书馆找书(Query = "我需要关于深度学习的书")2. 每本书都有标签(Key = "深度学习", "机器学习", "小说"...)3. Q 和每本书的 K 做相似度计算 → 得分(越相关得分越高)4. 得分归一化(Softmax)→ 变成 0~1 的权重5. 按权重取书的内容(Value)加权求和 → 得到你真正需要的信息
公式实现:
$$\text{Attention}(Q, K, V) = \text{Softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right) V$$
其中 $\sqrt{d_k}$ 是缩放因子,防止点积结果太大导致 Softmax 梯度消失。
3.3 多头注意力(Multi-Head Attention)
单头注意力只能捕捉一种关系。比如:
“猫追着老鼠,最终把它抓住了。”
单头可能只捕捉到"猫-追"的关系,忽略了"老鼠-被抓"的关系。多头注意力并行运行多个(如 8 个、16 个)注意力头,每个头可以从不同角度理解句子:
| 头 # | 可能捕捉的关系 |
|---|---|
| 头 1 | 主谓关系:猫 → 追 |
| 头 2 | 动宾关系:追 → 老鼠 |
| 头 3 | 指代关系:它 → 老鼠 |
| 头 4 | 长距离依赖 |
所有头的结果拼接起来,形成丰富的语义表示。
3.4 注意力可视化:直观理解
输入句子:"The cat sat on the mat"cat 对各词的注意力权重: The: 0.02 cat: 0.85 ← 关注自己 sat: 0.08 on: 0.01 the: 0.01 mat: 0.03
越重要的词,注意力权重越高。训练过程中,模型自己学会了"该怎么分配注意力"。
四、训练 LLM 的三个阶段
大语言模型的训练不是一步到位的,而是分阶段精雕细琢:
预训练(Pre-training) → 监督微调(SFT, Supervised Fine-Tuning) → 人类反馈强化学习(RLHF)
4.1 第一阶段:预训练——“读完半个互联网”
任务:给定前文,预测下一个词。
输入:"中国的首都是"模型预测:"北" → "京" → [结束]
模型在万亿级 token 的文本上做这个任务——维基百科、书籍、代码仓库、论坛帖子。训练完的模型有了海量知识,但它只会"续写",不会"对话"。
关键技术:
- 因果注意力掩码:防止模型"偷看"未来的词,确保它真的在"预测"而不是"背诵"
- 梯度累积 + 混合精度:模型太大了,4096 块 GPU 并行训练
这一阶段的产出叫 Base Model(基座模型)。
4.2 第二阶段:监督微调(SFT)——“学会对话”
Base Model 知道很多东西,但不会以问答形式交流。你问它"什么是光合作用",它可能续写"是植物的重要生理过程之一,从 19 世纪开始被研究…"
SFT 做的就是:给模型喂高质量的人类标注对话数据。
{"prompt": "什么是光合作用?", "response": "光合作用是植物利用光能...(结构化的专业回答)"}
几千到几万条这样的对话数据,让模型学会:
- 回答要直接回应问题
- 不懂要说"不知道"
- 保持礼貌和安全
这一阶段的产出叫 SFT Model。
4.3 第三阶段:RLHF——“符合人类偏好”
SFT 后模型已经能对话了,但还有问题:
- 回答太啰嗦
- 偶尔有偏见
- 有时会编造有害内容
RLHF(Reinforcement Learning from Human Feedback)解决"对齐"问题——让模型的输出符合人类价值观。
三步走:
Step 1:收集人类偏好数据
对同一个 Prompt,让模型生成多个回答,标注员排序:Prompt: "如何赚大钱?"回答 A:"通过学习和努力...(正常建议)" → 排第 1(最好)回答 B:"买彩票" → 排第 2回答 C:"骗人、偷窃(危险内容)" → 排第 3(最差)
Step 2:训练奖励模型(Reward Model)
基于排序数据,训练一个"打分器"——输入一个回答,输出一个分数,分数越高的回答越"符合人类偏好"。
Step 3:PPO 强化学习
用奖励模型给 SFT Model 的回答打分,通过 PPO(Proximal Policy Optimization) 算法更新模型参数,让模型倾向于生成高分回答。
同时加入 KL 散度惩罚:不能让模型"学歪了"偏离太远——为了高分而胡说八道。
最终产出就是 ChatGPT / Claude / Gemini 这样你实际使用的对话模型。
五、GPT 的解码过程:如何逐词生成
你输入问题的那一刻,GPT 做的事情:
1. 你的输入被 Tokenizer 切成 tokens "解释AI" → ["解释", "A", "I"] 或 ["解释", "AI"]2. 每个 token 查 Embedding 表,变成向量3. 向量们加位置编码(Positional Encoding) 让模型知道"A"在"I"前面(Transformer 本身不感知顺序)4. 逐层经过 Transformer Blocks 每层:自注意力 → 前馈网络 → 残差连接5. 最后输出一个概率分布 模型给出下一个 token 是每个可能词的概率: "人工" 0.32, "智能" 0.28, "技术" 0.15, ...6. 采样策略决定选哪个 - 贪心:直接选概率最高的(每次都一样) - Top-k:从概率最高的 k 个里随机选(增加多样性) - Top-p(Nucleus):累计概率到 p 的候选池里随机选 - Temperature:T↑ → 概率分布更平 → 输出更随机/有创意7. 选定的 token 拼回输入尾部,重复步骤 1-6 直到生成 <EOS> 结束标记或达到最大长度
六、关键细节补遗
6.1 位置编码
Transformer 并行处理所有 token(不像 RNN 逐词串行),所以它不知道词的先后顺序。解决方式是给每个位置一个独特的信号,加在词向量上。
- 正弦位置编码:原始 Transformer 用的,不同频率的正弦/余弦波
- 可学习位置编码:BERT/GPT 用的,把位置也当输入训练
- 旋转位置编码(RoPE):Llama、Qwen 等用的,相对位置编码,外推性好
6.2 Tokenizer
GPT 的参数"120B"指的是 1200 亿个参数,不是 1200 亿个词。但 Tokenizer 决定了你的输入被切成多少个 token——影响速度和成本。
英文:"Hello world" → 2 tokens(英文天然按空格分词)中文:"你好世界" → 4-6 tokens(每个字 1-2 tokens)
这也是中文 API 消耗比英文多的原因。
6.3 幻觉的根源
LLM 本质是"概率续写模型",不是"事实查证系统"。它没有"真假"的概念,只有"训练数据里什么样的词接在这里概率高"。当训练数据不足或矛盾时,模型会编造——这就是幻觉。
七、一张图总结
原始语料(万亿 token) ↓[Tokenizer] 文本 → tokens ↓[Embedding + Positional Encoding] tokens → 向量 ↓[×N Transformer Layers] 每层: Self-Attention → FFN → Add & Norm ↓基座模型(Base Model)—— 只会续写 ↓[监督微调 SFT] 高质量对话数据 ↓对话模型 —— 能问答了 ↓[RLHF] 人类偏好 + 奖励模型 + PPO ↓对齐后的对话模型 —— ChatGPT / Claude
一句话总结:Transformer 的 Self-Attention 让模型能理解上下文中词与词的关系,大规模预训练灌入知识,SFT 教它对话,RLHF 让它对齐人类价值观——这就是你面前聊天框里的 AI。





