第5章:温度、幻觉与对齐
本章解决的核心问题:大模型为什么有时候言之凿凿,有时候胡说八道?「温度」这个参数到底是调什么的?「幻觉」是什么,为什么消除不了?AI 公司怎么「调教」模型让它听话?读完这一章,你不再对模型的随机行为感到困惑——你知道它在做什么,以及为什么。
5.1 温度:控制模型的「创造力-保守」旋钮
5.1.1 从概率到选择
回到第2章讲的那个过程:Transformer 在每一步输出时,不会直接说「下一个 token 是 X」,而是给每个可能的 token 打一个分数(logit),然后通过 Softmax 函数把这些分数转化成概率分布。
下一个 token 的概率分布(温度 = 1.0):
"好" → 47%
"热" → 23%
"不" → 12%
"冷" → 6%
"的" → 5%
... → 剩余 7%
有了概率分布之后,模型需要做一个选择:到底输出哪个 token?
最简单的选择是「选概率最高的」——这叫贪心解码(Greedy Decoding)。每次都选概率最高的,结果最确定、最保守。但也最无聊——同样的问题每次回答都一样。
温度(Temperature) 是 Softmax 函数里一个关键的参数,它控制概率分布的「尖锐程度」。
5.1.2 温度怎么调概率
温度 T 的值通常从 0 到 2 之间:
| 温度 | Softmax 效果 | 概率分布 | 输出风格 |
|---|---|---|---|
| T → 0 | 概率完全集中在最高分的 token | 99.9% + 0.1% + ... | 总是选最安全的答案,照本宣科 |
| T = 1.0 | 默认——概率保持原样 | 47%, 23%, 12%, ... | 平衡——有一定多样性 |
| T → 2.0 | 概率变得更均匀 | 28%, 22%, 18%, ... | 高随机性——脑洞大开,意想不到 |
flowchart LR
subgraph T0["T → 0(冰冷)"]
A1[████████░░]
A2[█░░░░░░░░░]
A3[░░░░░░░░░░]
end
subgraph T1["T = 1(适中)"]
B1[████░░░░░░]
B2[███░░░░░░░]
B3[█░░░░░░░░░]
end
subgraph T2["T → 2(高温)"]
C1[███░░░░░░░]
C2[██░░░░░░░░]
C3[██░░░░░░░░]
end直觉:温度就是创造力的旋钮。温度低 → 保守、重复、但准确。温度高 → 有创意、出人意料、但也可能胡说八道。
5.1.3 不同场景下的温度选择
| 场景 | 推荐温度 | 原因 |
|---|---|---|
| 数学题、代码 | 0 ~ 0.3 | 需要精确、确定性 |
| 事实性问答 | 0.3 ~ 0.7 | 需要准确但不僵硬 |
| 文案、创意写作 | 0.7 ~ 1.2 | 需要多样性和创意 |
| 诗歌、脑暴 | 1.2 ~ 1.5 | 追求出乎意料 |
5.1.4 Top-p(核采样)和 Top-k
温度不是唯一的采样参数。实际使用中,大多数 API 还提供了:
- Top-k:只从概率最高的 k 个 token 中采样。比如 k=50,那就砍掉 50 名之后的所有 token,只在前 50 里按相对概率抽。这避免了模型选中一个极低概率但极其离谱的词。
- Top-p(核采样):更智能的修剪方式。从高到低累加 token 的概率,直到累计概率超过阈值 p(比如 0.9),然后只在这个「核」里采样。这个「核」的大小是动态的——如果概率非常集中,核就小(几个 token);如果概率分散,核就大。
flowchart TB
subgraph topk["Top-k = 4"]
T1["好 (47%)"]
T2["热 (23%)"]
T3["不 (12%)"]
T4["冷 (6%)"]
T5["的 (5%) ❌ 砍掉"]
end
subgraph topp["Top-p = 0.9"]
P1["好 (47%) ✓ 累计 47%"]
P2["热 (23%) ✓ 累计 70%"]
P3["不 (12%) ✓ 累计 82%"]
P4["冷 (6%) ✓ 累计 88%"]
P5["的 (5%) ✓ 累计 93% > 0.9 砍掉后面"]
end大多数模型 API 建议调 top-p 而不是温度,因为 top-p 比温度更灵活——它根据实际概率分布动态调整,而不是一刀切地压平或削尖整个分布。不过两个参数可以一起用。
5.2 幻觉:模型怎么「说谎」
5.2.1 什么是幻觉
幻觉(Hallucination) 是 AI 界对「模型输出看起来合理但其实不真实的内容」这一现象的专业称呼。
典型的表现:
- 编造事实:「李白生于公元 701 年,他最著名的作品是诗集《长安十二时辰》。」——听着像那么回事,但《长安十二时辰》是马伯庸的小说。
- 虚构引用:「根据《自然》杂志 2023 年的论文《AI and Consciousness》...」——论文根本不存在。
- 逻辑伪装:给出一个看似逻辑自洽但前提不成立的推理链。
- 过度自信:即使完全不确定,也用非常肯定的语气陈述错误信息。
5.2.2 幻觉的根本原因
核心原因一:大模型不是事实数据库
模型做的是概率预测,不是事实检索。它的内部没有「这个是不是真的」的校验机制。对于一个训练数据里出现频率高的组合(如「北京是中国的首都」),模型给极高概率——这就令人觉得它在「知道事实」。但对于罕见或不存在的事实,模型仍然会给出一个「概率上最合理的答案」——而这个「最合理」可能恰好是错的。
核心原因二:下一个词预测 ≠ 求真
训练目标不是「说出真相」,而是「预测训练数据里会怎么接」。如果训练数据里有大量不准确的内容(互联网上的错误信息),模型就会学到那些不准确的模式。
核心原因三:知识的压缩是有损的
第2章讲过,模型的参数不是知识库,而是压缩后的统计规律。用几千亿个参数去编码人类有史以来所有的文本知识(数万亿 token),这个压缩比可能高达 100:1 以上。有损压缩意味着一些细节一定会丢失或扭曲。
类比:就像你记住了一本书的主要内容,但几年后复述时会不自觉地补充了一些自己觉得「应该是这样」的细节——但这些细节在原书里并不存在。
核心原因四:暴露偏差(Exposure Bias)
训练时,模型每一步看到的都是真实的前文(老师喂的标准答案)。推理时,模型每一步看到的都是自己之前生成的 token。一旦某一步生成了一个不太对的 token,它就会被这个错误带偏,后面一错再错——这叫错误累积。
5.2.3 几种典型的幻觉模式
| 类型 | 例子 | 原因 |
|---|---|---|
| 事实性幻觉 | 「诺贝尔奖得主张三说...」— 这个人和这话都不存在 | 概率驱动的拼凑 |
| 忠实性幻觉 | 让它总结一篇关于经济衰退的文字,它总结出了「经济将增长」 | 未能准确捕捉源内容 |
| 省略性幻觉 | 让它列出全部五个原因,它只列了三个 | 生成时漏掉 |
| 时序性幻觉 | 问它「今天天气」,它给了昨天气象数据 | 训练截止日期之前的数据;不知道「现在」 |
| 自我一致性幻觉 | 前一句说自己 30 岁,后一句说「我生于 1970 年」 | 没有全局一致性检验机制 |
5.2.4 幻觉可以消除吗
2024-2025 年的共识是:不能完全消除,但可以大幅降低。
目前对抗幻觉的主要手段:
| 方法 | 做法 | 效果 |
|---|---|---|
| RAG(检索增强生成) | 先搜索真实资料,再让模型基于资料回答 | 效果显著,是目前最实用的方法 |
| RLHF 对齐 | 训练时奖励「诚实」回答,惩罚幻觉 | 有帮助,但不完美 |
| 推理模型(o1、DeepSeek-R1) | 让模型在输出前做多步推理和自检 | 幻觉率显著降低 |
| 约束解码 | 强制输出符合特定格式(如 JSON、代码) | 消除结构层面的幻觉 |
| 引用溯源 | 要求模型为每个事实提供来源 | 便于人工校验 |
5.3 对齐:把「聪明的野兽」关进笼子
5.3.1 什么是对齐问题
一个未经对齐的大语言模型会是什么样?OpenAI 和 Anthropic 的研究人员发现了一件可怕的事:
如果你训练一个「预测下一个词」的模型并直接把它放出来,它会是一个完全不加过滤的文本生成器。你可以让它写病毒代码、写怎么制造炸弹、写儿童不宜的内容、写侮辱性的回复——因为它被训练的终极目标只是「让输出像训练数据」,而训练数据(互联网)里什么都有。
对齐(Alignment) 的目标是:让模型的行为符合人类的价值观和意图。
这不是一个单纯的技术问题——它还涉及「谁的价值观?」「哪些文化偏好?」「怎么平衡表达自由和安全?」等伦理和社会问题。我们这里聚焦在技术层面。
5.3.2 RLHF:当前对齐的核心技术
RLHF(Reinforcement Learning from Human Feedback,基于人类反馈的强化学习) 是 ChatGPT 成功的关键技术之一。OpenAI 在 2022 年的 InstructGPT 论文中详细描述了这一方法。
RLHF 分三步:
flowchart TB
subgraph step1[第一步:监督微调 SFT]
A1[收集高质量的人类
问答示例] --> A2[用这些示例微调
基础模型]
A2 --> A3[得到 SFT 模型]
end
subgraph step2[第二步:训练奖励模型 RM]
B1[用 SFT 模型对同一
prompt 生成多个回答] --> B2[人类标注员给这些
回答排序打分]
B2 --> B3[训练一个奖励模型
学会预测人类评分]
end
subgraph step3[第三步:PPO 强化学习]
C1[用奖励模型作为
「裁判」] --> C2[通过强化学习
进一步微调 SFT 模型]
C2 --> C3[最大化奖励模型
给出的分数]
end
step1 --> step2 --> step3第一步:监督微调(SFT)
从基础模型出发,用一批高质量的人工标注的问答对来微调模型。这一步让模型学会「人类期望的对话格式和风格」——回答问题而不是续写文本,保持礼貌,承认不知道而不是乱编。
第二步:训练奖励模型(RM)
让 SFT 模型对同一个 prompt 生成多个不同回答(通过调高温度等手段让每次结果不同)。人类标注员给这些回答排序(A 比 B 好,B 比 C 好……),而不是打分——因为打分主观性太强,排序更可靠。
用这些排序数据训练一个奖励模型(Reward Model):给定一个 prompt 和回答,奖励模型输出一个分数,代表「人类会觉得这个回答有多好」。
第三步:PPO 强化学习
用奖励模型作为「评分裁判」,通过 PPO(Proximal Policy Optimization) 算法进一步微调模型。每次模型生成一个回答,奖励模型给它打分;高分强化、低分削弱。
同时还会加一个 KL 惩罚——防止模型为了拿高分而偏离基础模型太远(否则模型可能会学会钻奖励模型的空子,生成一些人类评分高但实际无意义的「讨好评委」式回答)。
5.3.3 对齐技术的演进
RLHF 虽然是 ChatGPT 出圈的头号功臣,但它也有明显的缺点:需要大量的人工标注、标注员的主观性引入偏见、奖励模型可能被「钻空子」。
2023-2024 年出现了多个替代或补充方案:
| 方法 | 代表 | 核心思想 |
|---|---|---|
| RLHF | ChatGPT, Claude | 人类标注 → 奖励模型 → 强化学习 |
| DPO(直接偏好优化) | 多个开源模型 | 跳过奖励模型,直接从人类偏好数据中优化——更简单、更稳定 |
| RLAIF(AI 反馈强化学习) | Claude 2 | 用另一个 AI 代替人类做标注和评分——可扩展性强 |
| Constitutional AI | Claude | 用一套「宪法」(行为准则)来指导 AI 自我批评和自我改进 |
| 推理时对齐 | o1, DeepSeek-R1 | 通过推理链让模型在做决定前「想一想」是否符合规范和逻辑 |
5.3.4 对齐的困境
对齐不是已经解决的问题。存在几个深刻的技术和哲学困境:
1. 过度对齐导致「奴性」
对齐太强,模型可能变得只会讨好、不敢说不。一个极端例子:即使你问「一加一等于三,对吧?」它也回答「是的您说得对」——因为它被对齐得太「乖」了,不敢纠正用户的错误。
2. 对齐税
对齐操作通常会导致模型在标准基准测试上的性能下降——这叫「对齐税」。因为一部分模型容量被用来学习「怎么礼貌」和「怎么避免有害输出」,而不是「怎么正确地完成任务」。
3. 价值观的不可通约
不同文化、不同群体对「什么是对的回答」有根本分歧。一个关于历史的提问,不同国家的人可能有完全不同的期望——模型应该对齐谁的价值观?
5.4 偏见:从数据里继承过来的问题
AI 模型没有自己的「意见」和「态度」——它的偏见来自训练数据。
- 如果训练数据里护士的指代大多是「她」,模型就会学到「护士 → 女性」的关联。
- 如果训练数据里某些种族或群体出现负面描述的频率更高,模型就会学到这些不公正的统计关联。
- 如果训练数据以英语和美国文化内容为主,模型就会表现出 Western-centric(西方中心)的倾向。
AI 公司正在积极努力减少这些偏见,但这是一个持续的挑战——因为偏见不是被编码在单独的模块里可以被「删除」,而是深深地编织在整个模型的统计参数之中。
本章小结
| 要点 | 一句话 |
|---|---|
| 温度 | 控制概率分布的「尖锐度」——低温保守,高温放飞 |
| Top-p | 从概率最高的 token 开始累积,只考虑累计概率超过阈值的那一部分——比单纯调温度更灵活 |
| 幻觉 | 模型输出的内容「听着合理但是假的」——根因是预测驱动而非事实驱动 |
| 为什么有幻觉 | 训练目标是预测下一个词,不是求真;知识是有损压缩的 |
| RLHF | 用人类排序数据训练奖励模型,再用强化学习微调——ChatGPT 成功的幕后功臣 |
| 对齐的困境 | 过度讨好、价值观分歧、对齐税——远未解决 |
| 偏见 | 从训练数据中继承而来——是统计现象,不是「态度」 |
下一章预告
我们已经理解了模型内部是怎么工作的,也知道了它的「毛病」是怎么来的。接下来是最实用的一章:你怎么用好它?
Prompt 不是魔法咒语——它有逻辑、有结构、有方法论。思维链是什么?Few-shot 怎么用?System Prompt 和 User Prompt 有什么区别?怎么让模型输出 JSON?
| ← 上一章 | 回到目录 | 下一章 → |
|---|---|---|
| 第4章:算力 | 第6章:Prompt |