大模型幻觉机制 · 讲义与学习笔记

用通俗方式讲清 ChatGPT 为什么会「一本正经地胡说八道」——从 token、概率预测到训练机制的一次走通。

整理:问学·科技

第 1 关 · Token 与分词机制——大模型读懂文字的最小单位

理解 token 是大模型处理文字的最小单位,掌握中英文切分差异及其对模型理解的影响。

什么是 token:从字、词到子词

你可能用过乐高积木——大模型读文字的方式有点像玩乐高:每个 token 就像一块积木,可以拼出无限种组合。整字(一整块大方块)太大、颗粒度不够灵活;字母/单字(最小颗粒)又太小、拼起来太慢。token 就是介于两者之间的「标准颗粒」——既能复用,又能灵活组合。

**为什么不能直接用「字」或「词」?**

最直觉的想法是:让模型认字不就行了?中文认汉字,英文认英文单词。这个想法会遇到三个麻烦。

第一,**词表爆炸**。中文常用字虽然只有几千个,但「词」的组合是无限的——就算只算两字词,三千个汉字能组成近九百万种组合,让模型记住每一个几乎不可能。

第二,**遇到生词就崩**。如果模型只会认「苹果」「香蕉」,突然看到「释迦果」,它就完全不知道该怎么处理——这叫「词表外」(OOV, Out-of-Vocabulary)问题。

第三,**粒度不对**。如果切得太细(比如一个汉字一个 token),模型看到的序列就变得很长:「苹果手机」会变成「苹/果/手/机」四个独立单元,模型要花力气才能把它们重新拼回一个意思;如果切得太粗(一整个句子一个 token),又分不出「我喜欢苹果」和「我讨厌苹果」的差别。

**子词:折中的智慧**

子词分词(subword tokenization)的核心想法是:把词拆成更小的、还能独立使用的片段。

英文里最经典。看「unhappiness」这个词:

中文类似。「人工智能」可以切成「人工」+「智能」,或者「人」+「工」+「智能」——具体怎么切,取决于训练时用的算法(下一节会讲)。但共通点是:模型永远不是在「整句整句」地处理文字,而是在处理这些预先切好的、长度可控的子词单元。

flowchart LR
    A[字/字符] -->|太碎 序列过长| C[子词 Token]
    B[整词/整句] -->|太多 记不住| C
    C --> D[模型真正看到的单位]

**这层翻译对模型意味着什么?**

token 不只是切分方式,它决定了模型的「视野」。

所以,token 就是大模型读懂文字的最小单位。它不是字,不是词,也不是整句,而是介于词与字符之间的子词单元——一种为了平衡词表大小、语义丰富度和处理效率而做出的工程妥协。

**要点:** token 是子词级别的最小处理单位,模型看到和生成的一切内容,都是在这个粒度上进行的。

两大主流分词思路:BPE 家族与 SentencePiece(Unigram)

上一节我们说,token 是子词级别的最小单元。但你怎么决定「在哪里切」?这就得讲到两套思路完全相反的主流方法了——一套「从小往上拼」(BPE 家族),一套「从大往下切」(Unigram)。

**BPE 家族:高频合并,从小颗粒往上拼**

BPE 全称 Byte Pair Encoding,原本是一种数据压缩算法,后来被借用到 NLP 里。它的逻辑很直觉:找出语料里「黏得最紧」的相邻字符对,把它们合并成新的、更大的单位。

具体怎么做?想象面前一堆乐高,最初都是最小颗粒(英文是字母、中文是单字)。BPE 做的是「统计—合并—再统计」三步循环:

  1. 统计所有相邻字符对,看哪一对出现频率最高
  2. 把这一对合并成新 token
  3. 重新统计,再合并当前频率最高的
  4. 重复直到词表达到设定规模(比如 5 万)
flowchart TD
    A[最小颗粒:字母或单字] --> B[统计相邻对频率]
    B --> C[合并出现最频繁的对]
    C --> D[新 token 加入词表]
    D -->|未达规模| B
    D -->|达到规模| E[训练结束]

举个例子。假设语料里有「low low low newer newer newer」,BPE 一开始看到的是 l-o-w 这种字母串。先发现「l-o」最频繁,合并成 lo;下一轮发现「lo-w」最频繁,合并成 low;再下一轮「n-e-w」最频繁,合并成 new。最终词表里既有「low」「new」这种「词」级别的 token,也保留了「l」「o」等字母。

BPE 还有一个「近亲」叫 **WordPiece**(Google 的 BERT 用的就是它),思路几乎一样,只是合并时打分标准不同:BPE 看「出现频率」,WordPiece 看「合并后对语言模型的帮助有多大」(用互信息之类的指标)。实际效果差异很小。

**SentencePiece 实现的 Unigram:从大往小,按概率切**

如果说 BPE 是往上拼,Unigram 就是反过来的往下切。

它的假设是:一开始就把所有可能成为 token 的子串都列进候选词表,然后用一份语料去训练「每个候选 token 出现的概率」。等真的遇到一段新文字时,它会算账——「怎么切能让整段文字的总概率最高」——然后挑出那个最优解。

打个比方:这就像拼图,盒子里有 1000 块可能的拼图块,Unigram 算「哪种拼法最合理」。它用的训练方法叫 EM 算法,本质就是一个「反复校准」的过程——先随便猜各块概率,看语料里实际怎么切的,反过来调整概率,再调整下一轮,直到稳定。

**SentencePiece** 是 Google 推出的工具包,把 Unigram 和 BPE 都封装进去了。它最大的特点是为「没有空格的语言」(中文、日文、韩文)专门优化——直接处理原始 Unicode 字符流,不依赖空格作为切分边界。

**两种思路如何处理中文?**

中文没有空格,词和词之间没有天然分隔符,这是两种算法都要面对的难题:

实际效果上,训练充分时两者差距不大——日常用 ChatGPT、文心一言、通义千问,背后的分词器虽然选型不同,但切出来的中文 token 都差不多:高频词尽量整块、罕见词尽量拆细。

**要点:** BPE 是「从最小往上合并」,Unigram 是「从所有可能切法里挑概率最高的」;中文没有空格是共同难题,但训练充分时两者的切分结果相近。

中英文切分差异:一个汉字为何要拆成多个 token

你可能听过一种说法:同样一段意思,翻译成中文后占用的 token 数明显比英文多。这不是 bug,是中英文在分词这件事上「先天条件」不同造成的。

**先看一组对比**

拿「I love learning」和「我喜欢学习」举例:

同样表达一个意思,中文消耗的 token 数明显更多。这个现象的根源,是两个语言在「最小颗粒」上的根本差异。

**英文的先天优势:字母表小、有空格、有词根词缀**

英文是「拼音文字」,整套语言建立在 26 个英文字母之上。这带来三个好处:

  1. **字母就够当颗粒**:词表里只要存 26 个字母 token,再加上通过 BPE 合并出来的高频组合,就能覆盖几乎所有英文单词
  2. **空格天然分词**:英文单词之间有空格,即使分词器不工作,模型也能大致猜出「哪里是一个词」
  3. **词根词缀复用**:un-、re-、-ing、-tion 这些词缀在大量单词里反复出现,BPE 自然会把它们合并成 token,因为出现频率高

举个例子:「unhappiness」这个词,BPE 可能切成 "un" + "happiness" 或者 "un" + "hap" + "piness",每个 token 都是有意义的语言片段,可以跨单词复用。

**中文的先天劣势:没空格、字就是最小单位、汉字数量庞大**

中文面临的局面完全相反:

  1. **没有空格**:相邻字直接挨着,模型完全要靠统计规律猜边界
  2. **每个字已经是最小意义单位**:不像英文有词根词缀可以合并,「机器学习」四个字没有更小、又能跨词复用的「语素」颗粒
  3. **汉字数量大**:常用汉字就有 3000-7000 个,加上生僻字可能上万。如果词表里要给每个常用汉字都留一个 token 位置,会严重挤压其他语言的容量

那怎么解决?主流分词器用了一个「以退为进」的策略:**回到字节(byte)层面**。

任何一个汉字,在计算机里其实是用 3 个字节(UTF-8 编码)表示的。比如「你」就是三个字节拼成的。分词器把最基础的 token 设为「单个字节」(一共只有 256 种可能),高频汉字通过 BPE 合并成单个 token,不常见的汉字就以「2-3 个字节 token」的形式出现。

这就是为什么一个汉字可能被拆成 2-3 个 token:不是因为它「不常用到要舍弃」,而是因为词表容量有限,开发者更愿意把位置留给「出现频率最高的那批汉字」和「跨语言通用的字节组合」。

**训练数据特征的影响**

还有一个因素:英文的训练语料(书籍、网页、代码)总量上比中文更多、来源更广。这意味着英文里像 "ing"、"tion" 这种子串的统计样本极其丰富,BPE 很容易发现并合并它们;而中文虽然有海量数据,但相比英文,子词粒度的统计信号还是要弱一些,这也让中文更倾向于「拆细一点、保险一点」。

flowchart LR
    subgraph 英文
        A1[26个字母] --> A2[BPE按频率合并]
        A2 --> A3[词根词缀成token]
        A3 --> A4[un + happiness]
    end
    subgraph 中文
        B1[256个字节] --> B2[高频字合并为单token]
        B2 --> B3[低频字保持多token]
        B3 --> B4[汉字等于2至3个字节token]
    end

**一个直觉性的总结**

你可以把英文 token 想象成「乐高积木」——小块(字母)和大块(词根)按比例混在一起,拼什么都能用。中文 token 则像「已经切割好的拼图块」——每个字本身就是一块完整的图,但盒子容量有限,有些不常见的字只能再切碎一点。

**要点:** 英文靠「26 个字母 + BPE 合并」就能高效切分;中文因为没有空格、汉字数量大,分词器退到「字节层面」按频率合并,导致一个汉字常被拆成 2-3 个 token。

切分粒度如何影响模型对文本的理解

把同样一段意思给模型看,中文版和英文版消耗的 token 数不一样——这件事不只是「账单上的差异」。它会改变模型「看」这段文字的方式,进而影响它能「装下」多少上下文、每一步处理得多细。

**先讲清楚「信息密度」在这里是什么意思**

在 token 这件事上,**信息密度**特指「同一段意思被压进多少个 token」。可以这样理解:

一个粗略的换算(基于主流分词器):

也就是说,1000 个 token 这个容量,在英文里大约能装 750 个单词,在中文里只够装 500 个汉字。同样的 token 容量,英文能装下的「意思」明显更多。

**一个具体对比**

拿同一句话举例:

英文:「I love learning about artificial intelligence」

中文:「我爱学习人工智能」

**两件事开始变得不一样了**

第一件:**上下文窗口的「感觉」不同**

模型能「同时看见」的文字量是按 token 算的,不是按字符算的。一个常见的 4096 token 上下文窗口:

对中文用户来说,这种「装得少」会直接影响使用体验——你想让模型「记住」前面所有对话细节时,模型其实「看到」的中文比英文少。

第二件:**每一段文字被「看得有多细」不同**

token 切得越细,模型每一步处理的最小单位就越小。中文因为同一段意思常被切成更多 token,模型在处理同一段中文时,**实际上是在「更细颗粒度」上做理解和生成**。

这不是简单的好坏问题。细颗粒度的好处是可以组合出更罕见的表达;坏处是模型要做的「组合步骤」更多,每一步出错的概率都会累积。同样的「单步准确率」,切成更多 token 的语言,理论上累积误差更大。

flowchart LR
    subgraph 英文
        E1[一句话约7个词] --> E2[约7到8个token]
        E2 --> E3[每token约0.75个词]
    end
    subgraph 中文
        C1[一句话约7个汉字] --> C2[约10到14个token]
        C2 --> C3[每token约0.5个字]
    end
    E3 --> R[同样的1000个token窗口]
    C3 --> R
    R --> R1[英文: 约3000词]
    R --> R2[中文: 约2000字]

**一个日常生活里的类比**

想象你在用乐高拼一面墙:

拼的速度、每一步的精度、最后墙的稳定性,都会因为「颗粒大小」而不同。

**为什么这个细节和大模型「会编造」有关**

这都不是「中文天生就比英文差」的意思——通过更大的上下文窗口、专门的中文训练数据、调整分词策略,可以让中文体验明显改善。但**「同样的 token 预算,中文承载的意思更少」是当下所有主流模型的客观事实**。这也是后续讨论幻觉机制时绕不开的一个技术背景。

**要点:** 同一段意思,中文消耗的 token 数大约是英文的 1.5 到 2 倍。这直接导致中文上下文窗口「装得少」、每一步处理更细、累积误差空间更大——这是理解幻觉机制时不可绕过的一环。

学习笔记

Token 与分词机制——学习笔记

一、Token 的本质:子词级别的最小处理单位

Token 介于「字/字符」与「整词/整句」之间,类似乐高积木的标准颗粒。

**字与词都不可行**

**子词分词的折中**

**Token 对模型的物理意义**

二、两大主流分词思路

| 思路 | 方向 | 合并/切分标准 | 训练方法 | |------|------|-------------|---------| | BPE 家族 | 从小往上拼 | 频率(BPE)/ 互信息(WordPiece) | 统计—合并—再统计 | | Unigram | 从大往下切 | 整段总概率最高 | EM 算法反复校准 |

**BPE 家族(Byte Pair Encoding)**

**Unigram**

**SentencePiece**

Google 工具包,封装 BPE 与 Unigram,直接处理原始 Unicode 字符流,为中文、日文、韩文等无空格语言专门优化。

**两种思路对中文的处理**

三、中英文切分差异:一个汉字为何要拆成多个 token

同一段意思,中文消耗 token 数明显多于英文,源于两种语言「先天条件」的根本差异。

**英文的先天优势**

  1. 字母表小(26 个字母)即可作为基础颗粒
  2. 空格天然分词,模型可大致猜出词界
  3. 词根词缀(un-、re-、-ing、-tion)跨词高频复用,BPE 易合并为 token

**中文的先天劣势**

  1. 无空格分隔,模型完全靠统计猜边界
  2. 每个汉字已是最小意义单位,无更小可复用语素颗粒
  3. 常用汉字 3000-7000 个,全部预留 token 位置会严重挤压其他语言容量

**以退为进的字节级策略**

四、粒度对模型理解的影响

**信息密度**

指「同一段意思被压进多少个 token」。粗略换算:1 token ≈ 0.75 个英文单词 ≈ 0.5 个汉字。

| 容量 | 英文可装 | 中文可装 | |------|---------|---------| | 1000 token | 约 750 词 | 约 500 字 | | 4096 token | 约 3000 词 | 约 2000 字 |

**对比示例**

**两个连锁影响**

  1. 上下文窗口的「感觉」不同:相同 token 容量下,中文能装下的意思明显更少
  2. 每一步颗粒不同:中文同一段意思被切成更多 token,模型在更细颗粒度上做理解与生成;细颗粒的好处是可组合出更罕见表达,坏处是组合步骤更多,累积误差更大

**与幻觉的关联**

第 2 关 · 语言模型的概率预测本质

理解『猜下一个 token』不是简单接龙,而是从概率分布中采样;理解这种本质为何导致输出『流畅却可能失真』。

下一 token 预测:大模型唯一的训练目标

想象你正在读一本小说,每读到一个段落的末尾,下一个词就被墨水遮住了——你必须凭前文「猜」出那个词是什么。这正是大模型在预训练阶段反复做的事情:给定前文,预测下一个 token。

**这件事为什么是大模型「唯一」的训练目标?**

大模型之所以叫「预训练」模型,是因为它在被部署为 ChatGPT、文心一言等产品之前,先在一个超大规模文本上完成了一项极其枯燥的练习——把成千上万亿的文字按顺序喂给自己,每读到一个位置,就试着预测紧跟其后的那个 token,预测错了就调整内部参数,预测对了就强化。整件事日复一日重复万亿次,没有别的任务。

你可能觉得「猜下一个词」这么简单的任务,怎么可能让模型学会写诗、编程、辩论、做数学?秘密在于:当上下文足够长、当训练数据足够多、当模型参数足够大时,「准确预测下一个 token」这一件事,**会逼出**模型对语言、事实、推理、格式乃至人类价值观的隐性理解。

举一个具体例子:模型读到「中国的首都是」,下一个 token 几乎必然是「北京」——这不是因为模型背过「中国首都=北京」这条规则,而是因为「北京」在训练语料里无数次紧跟在「中国的首都是」之后出现,是统计意义上最合理的延续。再比如,模型读到「1+1=」,下一个 token 应当是「2」;读到「Once upon a」,大概率是「time」。每一个看似简单的「猜」,都把语法、常识、逻辑、风格压缩进了模型的亿万个参数里。

**这个目标和后续所有能力的因果链**

flowchart TD
    A[海量文本] --> B[预训练阶段]
    B --> C[给定前文, 预测下一个 token]
    C --> D{训练万亿次}
    D --> E[模型参数中沉淀语言/事实/逻辑]
    E --> F[翻译/写作/编程/推理能力]
    F --> G[所有能力都是副产品, 不是被分别训练]

理解「下一 token 预测」是唯一的训练目标,关键在于看清一个反直觉的推论:模型在预训练阶段**没有任何专门任务**——没有人告诉它「你要学会翻译」「你要学会总结」「你要学会写代码」;它做的只有一件事,就是「下一个 token 是什么」。但正因为语言本身就是知识的载体,准确预测下一个 token 隐含地要求模型掌握词汇搭配、事实记忆、逻辑推理甚至代码语法——这些能力是「猜下一个 token」的**副产品**,不是被单独训练出来的。

这也解释了为什么换一种说法(即「prompt」)就能让同一个模型完成翻译、写诗、解题——它没有专门的「翻译模块」或「诗歌模块」,它只有一个学会了「读前文、接下文」的核心能力,然后在你给它的前文里识别出模式,据此继续。

**注意:这不是「查表」**

最后必须澄清一个关键区别:模型并不是把训练数据背下来,遇到问题时检索——它是从海量「前文→下一 token」的例子中,学会了**什么样的 token 序列在统计上更可能成立**。这种「概率性的记忆」是幻觉(自信地编造)产生的物理基础——但那是下一节要展开的内容。

**要点:**预训练阶段模型只做一件事——给定前文,预测下一个 token;翻译、写作、推理等所有能力都是这一件事的副产品,不是被分别训练的。

概率分布与采样:模型每一步在做什么

想象你在听天气预报:「明天 70% 晴、20% 多云、10% 雨」。天气预报并没有说「答案是晴」,它给出的是三种可能性的概率分布——具体是哪种,看老天爷。大语言模型每一步做的事情,**本质上和这个一模一样**。

模型不是在「回答」,而是在「打分」

当你输入「今天天气真」,模型并不会从内部某个「正确答案库」里挑一个字给你。它会对词表(它认识的所有 token 构成的清单,通常是几万到十几万个)里**每一个**可能的下一个 token,都给出一个概率值——所有这些概率加起来恰好等于 1。比如:

注意一个反直觉的细节:模型**同时**给「今天天气真好」「今天天气真冷」「今天天气真热」都打了分(只是分数不同),它并不预判「正确答案只有一个」然后只输出那个。它一次性为整个词表上的每个 token 算出一个分数,组成一个长长的概率分布。

flowchart LR
    A[前文: 今天天气真] --> B[模型对词表每个 token 打分]
    B --> C[词表上几万个 token 各自的概率]
    C --> D{从中采样}
    D --> E[选中: 好 0.45]
    D --> F[选中: 不错 0.18]
    D --> G[选中: 冷 0.12]
    E --> H[作为下一个 token 输出]
    F --> H
    G --> H
    H --> I[与前文拼接, 进入下一步]
    I --> B

采样:像转盘抽奖,而不是查字典

打分完成后,模型要从中**选**一个 token 作为实际输出,这个过程叫**采样**。可以把它想象成一只转盘:每个 token 占的扇形面积就是它的概率——「好」占的面积最大,但转盘指针停下来落在哪里,是有随机性的。多数情况会落在「好」,偶尔也会落在「不错」甚至更冷门的位置。

采样的具体规则叫**解码策略**,最常见的有三种:

你用 ChatGPT 时产品方已经帮你选了默认的解码策略,所以你从来不会直接看到这些概率。

最关键的一点:模型并不知道什么是对的

这一点是后面理解幻觉的根。请记住:模型做的只是「根据前文,统计上哪几个 token 最可能接得上」,它**内部并没有一个「真/假」「对/错」的开关**。它无法判断「冷」是符合实际的天气还是用户编造的前文,就像天气预报无法判断「70% 晴」是气象事实还是某人的主观估计——它只负责把概率算出来,**对错这件事要由人来判断,或者由外部信息来核对**。

正因为每一步都是「按概率选」,模型完全可能一不小心(或者因为概率分布本身就模糊)选到一个不太合适、甚至完全错误的 token,然后把它接在前文后面继续往后走——这正是幻觉产生的温床。下一节我们会看到,「每一步都选概率最高的」和「整段话最符合事实」,并不是同一件事。

**要点:**模型每一步输出的是词表上每个 token 的概率分布,然后从中采样一个;它不「知道」什么是对的,只知道什么「在统计上最可能」。

逐 token 概率最优与全局语义正确的鸿沟

逐 token 概率最优与全局语义正确的鸿沟

一个反直觉的对照

上一节我们看到,模型每一步都在「从概率分布中采样下一个 token」。一个很自然的问题就出现了:**每一步都选概率最高的 token,整段话就一定是真的吗?**

直觉上似乎应该如此——既然每一步都选「最像答案」的字,连起来当然也最像正确答案。可惜不是。模型在每一步做的是**局部最优**的选择;而我们希望它达到的是**全局正确**。这两件事之间存在一条几乎必然的鸿沟。

局部与全局的鸿沟怎么来的

用一个生活类比来感受这一点:假设你蒙着眼睛走在一条迷宫般的山路上,每走一步,地面都会告诉你「脚下最平整」的方向。你当然会顺着这个方向走——这是你每一步的局部最优。但问题在于,**最平整的下一步,可能是某条「死胡同」的方向**。如果你看得见全局地图,可能两米外有一条更平整的通道通向出口;可你眼前只有脚下这一格。

模型每一步做的事,和这个蒙眼走迷宫的人几乎一模一样:

训练阶段,模型被优化的目标也是「逐位置预测下一个 token 的损失最小」——也就是局部目标。它从未被直接训练过「确保一段话的全局事实一致性」这件事。所以它的「自然行为」必然偏向局部最优。

flowchart TD
    A[前文: 张明远教授在 2021 年发现了一种新型量子纠缠态] --> B[步骤 1: 选当前最像的相关]
    B --> C[步骤 2: 选当前最像的论文]
    C --> D[步骤 3: 选当前最像的发表于]
    D --> E[步骤 4: 选当前最像的物理评论快报]
    E --> F[步骤 5: 选当前最像的 127]
    F --> G[步骤 6: 选当前最像的卷]
    G --> H[步骤 7: 选当前最像的 8 期]
    H --> I[继续往下选最像的 token]
    I --> J[得到一段完整的论文引用]
    J -.-> K[每一步都是当前最像的选择]
    J -.-> L[但张明远 / 论文 / 卷期 / 共同作者可能全是编的]

更糟糕的是,**局部最优之间会相互「绑架」**:一旦你选定了 A 开头,下一步的所有打分都建立在 A 之上;A 选错了,后面每一步的「最优」都建立在错误前提上,而且越走越远——前文越长,模型越倾向于顺着这个错误前提继续编。这叫**误差累积**。

一个具体例子

提示词:「张明远是清华大学物理系的一位青年教授,他在 2021 年与合作者发现了一种新型量子纠缠态,相关论文发表在」

模型会非常流畅、非常自信地接下去:「**发表于《物理评论快报》(Physical Review Letters)第 127 卷第 8 期,通讯作者是张明远,第一作者是其博士生李晗,合作者包括……**」

你看到的,是一段语法完整、用词专业、格式规范的「学术引用」。问题是:**张明远这个人是否真的存在、这篇论文是否真的存在、这个期刊卷号是否对应这篇文章——模型对此一无所知**。它只是按概率把「一篇论文摘要接下来该写什么」这个统计模式完整地复现了一遍。每一步的「最像」都选对了,整段话却可能是凭空捏造的。

这就是**幻觉最典型的发生现场**:模型不是在「说谎」,而是在**用最像的零件拼出最像的话**。零件都是从训练数据的统计规律里挑的,整段话是否符合事实,模型并没有能力去检查。

**要点:**模型每一步都做「局部最优」选择,但它的训练目标从来没有保证过「整段话全局正确」;一旦开头选错或前提模糊,错误会顺着每一步的局部最优持续累积,最终输出一段流畅却失真、甚至完全虚构的内容。

为什么流畅不等于真实

为什么流畅不等于真实

一个让人后背发凉的对照

先看两段文字,别急着往下读——凭直觉判断哪段像人写的、哪段像 AI 写的:

**【段落 A】** > 陈志强教授在 2019 年 3 月发表于《自然·材料》的一项研究中提出了一种基于二维过渡金属硫化物的室温超导机制,这一发现为开发可大规模应用的无损耗输电网络开辟了全新路径。

**【段落 B】** > 1907 年 4 月 12 日,挪威探险家斯韦勒·汉森在克里斯蒂安尼亚大学发表了题为《极地冰盖下的远古病毒库》的演讲,预言南极冰层中可能封存有史前病毒样本,47 年后这一预言被苏联科考队部分验证。

你的直觉大概会把 A 判给 AI,把 B 判给「真人写的历史」。**但两段都是模型编的。** 陈志强不存在;斯韦勒·汉森、这场演讲、这场 47 年后的「验证」,全是编的。

你之所以觉得 B 真,**仅仅是因为它的题材(极地探险、史前病毒、苏联科考)你可能在小说或纪录片里读到过类似情节**——不是因为 B 的语言比 A 更可信。两段文字的语法、用词、句式、确定性语气,几乎完全一样。

这就是「流畅不等于真实」最直观的展示:**流畅度不携带任何关于真假的信息。** 一段话可以既流畅又完全虚构。

「编得圆」的能力从哪里来

为什么模型能把完全虚构的内容写得这么「像真的」?答案藏在一个事实里:**模型在训练阶段读到过的,几乎全是写得「圆」的东西。**

当代大模型的训练语料,以维基百科、学术论文、新闻报道、出版书籍、专业期刊为主体。这些文本有两个共同特点:

  1. 它们在**形式**上高度规范——语法严谨、句式完整、用词专业、有引文格式、段落结构清晰;
  2. 它们是**经过人类编辑、同行评审、出版社筛选后留下的内容**——也就是说,模型学到的不是「人们平时怎么说话」,而是「人们怎么写严肃的话」。

这就产生了一个非常关键的学习结果:

**但模型没有学到「这段话里那个具体的人/事/数字是否真实存在」这件事。** 它学到的是「形」——「一篇权威文章长什么样」;不是「实」——「这篇文章说的是不是真的」。

flowchart TD
    A[训练语料<br>维基百科/论文/新闻/书籍] --> B[学到了什么]
    A --> C[没学到什么]
    B --> D[学术段落的结构]
    B --> E[学术引用的格式]
    B --> F[权威语气的特征]
    C --> G[具体某段内容是否属实]
    D --> H[生成时模仿形式]
    E --> H
    F --> H
    G -.-> I[无法核对]
    H --> J[输出流畅完整 但事实可能虚构]
    I --> J

打个比方:模型就像一个**读过百万幅名画的赝品画家**。他研究透了每一笔的走向、颜料的层次、签名的风格、画布的纹理——他能把任何主题、任何流派的画都仿得几乎乱真。但你让他画一幅「梵高从未画过的静物」,他能画得和梵高真迹放在画廊里**让绝大多数观众分辨不出**。但这不是梵高画的——画里那束向日葵、那个花瓶、那种光线,全是赝品画家自己的创作。

「自信的语气」只是概率的副产品

还有一个常被忽略的点:模型输出时那种**斩钉截铁的语气**——首次报告、标志着、直接推动——**并不是因为它核验过这些断言**。它只是在生成下一个 token 时,概率分布恰好高度集中在这种确定性词汇上。

为什么集中?因为训练数据里,**带这种确定性词汇的句子,绝大多数对应的就是真实的、被验证过的历史/研究/事件**(因为语料本身是被编辑筛选过的)。模型从中学到了一条统计规律:「**讲到这类内容,用这种强断言的语气,最'像'**」。

但**「像」和「是」之间,隔着的是整个事实世界。**

这也是为什么你永远不能用「**它说得自不自信**」来判断它说得对不对。**自信是模型的默认输出模式,和事实正确性之间没有正相关关系。**

这件事给我们什么警示

意识到「流畅 ≠ 真实」之后,我们在使用大模型时应该形成三个关键习惯:

  1. **形式上越完美的输出,越要警惕。** 看到一段毫无瑕疵、句句到位的回答,第一反应不应该是「哇好专业」,而应该是「它有没有可能在用完美的形式掩盖虚构的内容?」
  2. **具体的事实断言(人名、日期、数字、引用)必须独立验证。** 模型可以可靠地告诉你「这类型的话长什么样」,但不可靠地告诉你「这个人/事/物是否真的存在」。
  3. **「它说得这么流利,所以应该没问题吧」是大模型使用中最常见的错觉。** 流畅只是它的默认输出状态,不是可信度的指标。

**要点:**模型在训练中学会了「权威文本长什么样」的全部形式特征——结构、语气、引用格式、专业词汇——但没有学到「具体某段内容是否属实」这件事;因此它能写出和真迹一样流畅、一样自信的虚构内容,**流畅度本身不传递任何关于真实性的信号**。

学习笔记

一、预训练的唯一目标:预测下一 token

二、每一步的内部机制:打分、概率分布、采样

三、局部最优 ≠ 全局正确

四、为什么流畅不等于真实

第 3 关 · 幻觉的定义与三类技术成因

掌握幻觉产生的三大技术根源——知识边界、训练数据偏差、解码策略——并能对一个具体幻觉判断其最可能的成因。

什么是大模型幻觉:定义与常见类型

什么是大模型幻觉:定义与常见类型

想象一个学生:博览群书、记忆力惊人、说话永远自信满满,但——他从未真正出过国,从未做过实验,也从未见过他引用的那些论文。当被问及「释迦牟尼在哪一年涅槃」时,他不会说「我不知道」,而是会把几本书里相关的句子拼起来,给出一个听起来非常确定的年份。**这个学生说的,可能就是大模型在「幻觉」时的状态。**

一、幻觉的清晰定义

「大模型幻觉」指的是:模型输出了**语法流畅、语气自信、看似合理**,但**与事实不符、或无法被外部证据验证**的内容。

几个关键点值得拎出来:

二、两大基本类型:事实性 vs 忠实性

学术界通常把幻觉分成两大类,这是后面三讲都会反复用到的「共同语言」。

flowchart TD
    A[大模型幻觉] --> B[事实性幻觉]
    A --> C[忠实性幻觉]
    B --> B1[与客观世界不符<br/>如 编造论文 细节错位 时效失效]
    C --> C1[与给定输入或指令不符<br/>如 指令漂移 上下文臆造 逻辑跳步]
1. 事实性幻觉(Factuality Hallucination)

指模型陈述的**客观事实**与现实世界不符。常见三种表现:

2. 忠实性幻觉(Faithfulness Hallucination)

指模型的输出与**给定的输入或指令**不一致——也就是说,模型说的「句句都通」,但**没按你要求的方式说**,或者**没基于你给的内容说**。常见三种表现:

可以用一句话区分这两类:

三、为什么需要分这两类?

因为**它们的技术成因不同**,治理办法也不同。粗略预告一下后面三讲的方向:

| 类型 | 主要技术成因(后面会展开) | | --- | --- | | 事实性幻觉 | 知识边界(没见过)、训练数据偏差(学到了错的) | | 忠实性幻觉 | 解码策略(每一步都选最像的) |

这一节我们只建立「是什么」的共同语言,**为什么**会这样,留给后面三节。

四、一个小例子

你问模型:「鲁迅和周树人是什么关系?」

这两类问题,**用户感受不一样,技术根源不一样,治理办法也不一样**——这就是为什么我们要先把它们分开。

**要点:** 幻觉 = 流畅 + 自信 + 与事实/输入不符;其中与「客观事实不符」的是事实性幻觉,与「你给的内容/要求不符」的是忠实性幻觉。区分这两类,是讨论「为什么会产生幻觉」的前提。

成因一:知识边界——模型『不知道』自己不知道

成因一:知识边界——模型『不知道』自己不知道

想象你被关在一座巨大的图书馆里,里面有 5000 万本书,但**没有目录、没有索引,也没有任何关于「这座图书馆里有什么」的总览**。你被要求:任何问题都要给出一个听起来权威的回答。

你没有「我不知道」这个选项——就算你说「我不知道」,你也不知道自己是真的不知道,还是只是没想起书里的哪一页。

更糟的是:你**不知道自己不知道什么**。

这就是大模型在「知识边界」上的处境。但要理解这个处境,我们得先看清「训练数据」到底是什么。

训练数据有截止日期

ChatGPT、Claude、文心一言……每一家大模型在训练时都有一个「知识截止日期」(knowledge cutoff)。比如某个模型的训练数据截止到 2024 年 4 月,那么 2024 年 5 月之后发生的任何事——新总统选举、新电影上映、新论文发布——**它都不知道**。

不是因为它「忘了」,而是它**从未见过**。这些信息对它来说,就像让一个 2020 年的人说「2024 年奥运会谁夺冠」——它只能根据读过的旧书「推测」。

训练数据有覆盖范围

截止日期还不是最大的问题。更大的问题是:**即使在截止日期之内,互联网上的知识也是极其不均匀的**。

flowchart TD
    A[人类知识总量] --> B[互联网上有文字记录的部分]
    B --> C[爬取到的部分<br/>约 10-30%]
    C --> D[高质量可被训练的部分<br/>更小]
    D --> E[模型真正学到的部分<br/>更更小]
    
    F[训练数据实际覆盖] --> G[常见话题<br/>高重复 高覆盖<br/>维基百科 主流新闻]
    F --> H[中等话题<br/>部分覆盖]
    F --> I[小众话题<br/>稀疏甚至没有]

举个例子:

模型不会主动「承认不知道」

人类的认知里有一种叫「元认知」的能力——就是**我知道自己知道什么、不知道什么**。你知道「我知道 1+1=2,但我不知道黎曼猜想怎么证」。

但大模型**没有这种自我觉察**。从底层看,它就是一个「根据前文预测下一个字串的概率分布」的系统:

它只会**根据概率继续往下说**。当概率最高的字串恰好是对的,它就是「答对了」;当概率最高的字串是错的、但听起来很流畅,它就是在「幻觉」。

关键问题:模型「不知道」自己不知道

这就是「知识边界」造成幻觉的根本机制:

flowchart LR
    A[你问了一个问题] --> B{这个问题<br/>在训练数据里<br/>是否被充分覆盖}
    B -->|是 常见话题| C[高概率输出正确答案]
    B -->|否 截止日期后/小众/私域| D[模型在概率最高的字串里选]
    D --> E[流畅 自信<br/>但内容是补全的]
    E --> F[这就是知识边界幻觉]

请仔细看这个分支——

模型对「知识边界内」的问题(常见话题、训练数据里被反复写过很多次的)几乎不会幻觉,因为它见过足够多的「正确答案的写法」。

但对「知识边界外」的问题(截止日期后发生的事、私域知识、小众话题),模型**只能做一件事**:「根据前文语境,挑一个概率最高的字串接下去」。**它分不清这是在「回忆」还是在「补全」**——对它来说,这两个动作在底层没有区别,都是「按概率续写」。

这就解释了:

一个小例子

你问模型:「林黛玉倒拔垂杨柳的故事出自《红楼梦》哪一回?」

这其实是个**陷阱问题**——「倒拔垂杨柳」是鲁智深的故事(出自《水浒传》),跟林黛玉没关系。

但模型看到「林黛玉 + 倒拔垂杨柳 + 红楼梦」这个前文,可能就开始「补全」了:它会给出一个具体的回目数字,比如「第三十二回」,说得信誓旦旦。

为什么?

  1. 《红楼梦》在训练数据里出现频率极高,模型**记得很牢**;
  2. 「第 X 回」这种格式它见过太多次——给一个「具体回目数」是它在这种语境下概率最高的动作;
  3. **它分不清林黛玉和鲁智深是不同人物**——它没有「人物档案」,只有「语言模式」;
  4. 它**完全意识不到这是一个陷阱**——它只是在做「按概率续写」。

这就是「知识边界」加上「没有元认知」共同造成的一类典型幻觉。

知识边界 ≠ 训练数据不足

值得区分一下两种情况:

这两类都属于「知识边界」,表现略有不同:前者倾向于「完全编造」,后者倾向于「把 A 当 B」。

**要点:** 知识边界造成的幻觉,本质是「模型没有『我知道什么 / 我不知道什么』的自我觉察」——对训练数据之外或学得稀薄的内容,它只能用「概率最高的字串」去续写,而这个动作在外观上和「回忆正确答案」毫无区别;它不知道自己不知道,于是说得非常自信。

成因二:训练数据偏差——把错误学成正确

上一节我们讲了一个残酷的事实:模型对训练数据之外的东西只能「合理补全」。但更糟的还在这一节——**就算训练数据里有的东西,模型也可能学到错的版本**。

训练数据里本来就有「噪音」

想象一个文科生写论文,资料来源不是图书馆,而是:

模型就是在这种**质量参差不齐、互相矛盾、年代不一**的资料海洋里训练的。它不像研究生有「老师」可以帮它分辨「这个来源可靠、那个不可靠」——它**一视同仁地把所有文字都当作「语言模式」学进去**。

错误有哪些种类?

flowchart TD
    A[训练数据中的错误] --> B[过时信息<br/>曾经正确 现在不]
    A --> C[互相矛盾<br/>不同来源说法不一]
    A --> D[以讹传讹<br/>错话被反复引用变成主流]
    A --> E[胡编乱造<br/>营销号或AI生成内容]
    A --> F[主观当客观<br/>观点被表述为事实]

举几个具体例子:

「统计压力」:少数派正确被多数派错误淹没

这是最关键、也最容易让人意外的一点——

**模型的「正确」不是「真理」意义上的正确,而是「重复次数最多」意义上的正确。**

flowchart LR
    A[某条信息] --> B{在训练数据中<br/>出现多少次}
    B -->|出现 1000 次<br/>哪怕是错的| C[模型认为这是高概率模式]
    B -->|出现 10 次<br/>哪怕是真的| D[模型认为这是低概率模式]
    C --> E[输出时优先选择]
    D --> F[输出时被忽略]

也就是说:

更糟的是,**AI 生成的「二手内容」正在污染训练数据**——2023 年后网上有大量「ChatGPT 写的文章」被发布,这些文章本身可能就有幻觉,但被爬进下一代模型的训练数据后,错误就被**固化了**——这在业界叫做「model collapse」(模型坍缩)。

一个具体例子

你问模型:「李白是哪里人?」

正确答案是「碎叶城(今吉尔吉斯斯坦境内)出生,幼年迁居四川江油」。

但训练数据里:

于是模型大概率回答「李白是四川人」——**不是它不知道有吉尔吉斯斯坦这个细节,是「四川」这个搭配的「统计权重」压过了严谨版本**。

这就是「统计压力」放大训练数据偏差的典型案例。

关键区别:知识边界 vs 训练数据偏差

| | 知识边界 | 训练数据偏差 | |---|---|---| | 训练数据里有没有 | 几乎没有 | 有,但被错误版本淹没 | | 模型在做什么 | 凭语境「补全」 | 凭「多数派」输出 | | 典型表现 | 完全编造 | 说出听起来权威但其实是多数派错误的内容 |

两者都来自训练数据,但机制不同。**知识边界是「没见过所以编」,训练数据偏差是「见过,但见到的是错的版本」**。

**要点:** 互联网本身就是错误、矛盾、过时信息的混合体,模型一视同仁地全盘吸收;更关键的是「统计压力」——一个错误被重复一千次,就会在模型内部压过只出现一百次的真相;这不是模型的「偏见」,而是「多数派为王」的统计学习机制必然带来的副产品。

成因三:解码策略——每一步都选『最像的』,整体却在编

成因三:解码策略——每一步都选「最像的」,整体却在编

一个类比:只能「接下句」的人

想象有个人参加一个特殊的写作游戏:主持人给他一个开头,他必须立刻接下一个**最自然**的词;然后基于已写的内容,再接下一个**最自然**的词;如此往复。

他看不见全局,也不知道「正确答案」是什么——他只能凭语感判断「这个词接上去**最像那么回事**」。

这个人的每一句话单独看都流畅、连贯、自然,但**他写出来的整篇文章可能完全是胡扯**——因为「每一步都最自然」不等于「整体上是真的」。

**这,就是大模型解码策略的核心困境。**

什么是「解码」

前面说过,模型内部其实是在算「下一个 token 出现的概率分布」——比如「今天天气真」之后,「好」的概率是 35%,「不错」是 20%,「冷」是 5%,等等。

但这个**分布**本身只是一堆百分比,要变成屏幕上你看到的文字,还需要一个**选词规则**——这个把「概率」变成「实际文字」的过程,就叫**解码**。

模型并不知道「正确答案是什么」,它只知道「哪些词在这个位置**常见**」。**解码,就是决定它怎么从「常见」中选一个。**

五种主流解码策略

flowchart TD
    A[模型算出概率分布] --> B{采用哪种解码}
    B -->|贪心| C[永远选概率最高的那个]
    B -->|Beam Search| D[同时保留若干条候选句子 选整体最好的]
    B -->|Top-k| E[只在前 k 个高概率里随机选]
    B -->|Top-p 核采样| F[只在前 p 累计概率里随机选]
    B -->|Temperature| G[把分布压扁或拉尖 再抽样]

简单解释每一种:

关键问题:每步都对 ≠ 整体真实

flowchart LR
    A[第 1 步 最高概率词] --> B[第 2 步 最高概率词] --> C[第 3 步 最高概率词] --> D[第 N 步 继续往下]
    A -.每步单独看都像那么回事.-> D
    D --> E[整体上可能完全是编的]

这是这一节最反直觉的洞察——

**「每一步都选最像的」这个策略,没有任何一步在「犯错」。**

每一步,模型都诚实地挑了它认为概率最高的词。但**整条路径越走越偏**——因为「概率最高」是基于「已有的上文」算的,而「已有的上文」本身可能就已经在编了。

这就是为什么模型会**一本正经地胡说八道**——它不是「在骗你」,它是「在每一刻都最真诚地继续上一刻」。

为什么「高确定性解码」反而鼓励自信地编造

你可能已经注意到:ChatGPT 的默认配置(Top-p 接近 1、温度偏低、偏贪心)整体上属于「**高确定性**」解码——模型倾向于选高分词,不太敢冒险。

这套设计**本意是好的**:让回答更连贯、更少跑题、更像「正常人说话」。

但副作用是——**模型几乎从不回头、从不承认「这句话我其实没把握」**。

为什么?因为:

  1. 模型在每一步都**没有「真相核查」机制**——它只能选「最像」的字,没有「这是不是事实」的开关。
  2. 高确定性解码让模型**几乎不输出「我不确定」这种低概率词**——因为「我不确定」在它学过的语料里本来就是低频表达。
  3. 它只能**继续往下接**,接出一段流畅、自信、但从头到尾可能都是错的话。

这就是为什么——**「一本正经地编造」不是模型的 bug,而是这套解码机制的设计后果**。

一个具体例子

假设模型被问到:「爱因斯坦什么时候获得诺贝尔物理学奖?」

正确答案是 1921 年。

但模型内部对「爱因斯坦 + 诺贝尔」这个搭配的概率分布可能是:

如果用**贪心解码**,模型输出「1905」——然后基于「爱因斯坦 1905 年获得诺贝尔奖」这个**已编出来的上文**,继续接「他在那一年提出了相对论」(事实上相对论也是 1905 年提出的,模型顺着「1905」把两件不同的事张冠李戴地编在了一起)。

**每一步都「最像那么回事」**——「1905」「提出」「相对论」单独看都自然——但**整段话是错的历史**。

如果换成**高温度解码**,模型可能输出 1921(正确)也可能输出 1872(离谱)——**更随机,但偶尔蒙对**。

如果加上**联网检索或引用校核**等外部机制,模型才有机会拿到「客观事实」做约束,幻觉才会被压制——但这是**另一层工程**,不是「模型自己变聪明了」。

**要点:** 模型没有任何一步在「故意撒谎」——它每一刻都在选它认为概率最高的下一个词;但「每步最像」叠加起来不等于「整体真实」,这正是「流畅地编造」在技术上的必然;高确定性解码放大了这种自信幻觉——让模型既没机会说「我不太确定」,也没机会在跑偏时回头。

学习笔记

大模型幻觉:定义与三类技术成因

一、幻觉的定义

「大模型幻觉」指模型输出了语法流畅、语气自信、看似合理,但与事实不符、或无法被外部证据验证的内容。

二、两大基本类型

1. 事实性幻觉(Factuality Hallucination)

指模型陈述的客观事实与现实世界不符。常见三种表现:

2. 忠实性幻觉(Faithfulness Hallucination)

指模型的输出与给定的输入或指令不一致。常见三种表现:

区分要点
它们的技术成因不同,治理办法也不同

它们的技术成因不同,治理办法也不同。

| 类型 | 主要技术成因 | | --- | --- | | 事实性幻觉 | 知识边界、训练数据偏差 | | 忠实性幻觉 | 解码策略 |

核心机制:模型「不知道」自己不知道

核心机制:模型「不知道」自己不知道。体现在三个层面:

1. 训练数据有截止日期

每个模型在训练时都有一个「知识截止日期」(knowledge cutoff)。截止日期之后发生的任何事——新总统选举、新电影上映、新论文发布——它都不是「忘了」,而是「从未见过」。

2. 训练数据有覆盖范围

互联网上的知识分布极不均匀:

整体上,从「人类知识总量」到「模型真正学到的部分」是逐层缩减的(爬取约 10–30%,高质量可被训练的部分更小,模型真正学到的更更小)。

3. 模型不会主动承认不知道

人类有「元认知」能力——知道自己知道什么、不知道什么。但大模型没有这种自我觉察。从底层看,它是一个「根据前文预测下一个字串的概率分布」的系统:

核心机制:模型把错误学成了正确

核心机制:模型把错误学成了正确。

模型训练的资料来源质量参差不齐

模型训练的资料来源质量参差不齐:知乎答主随口说的、微博大 V 转发的、百度知道匿名用户回的、营销号洗稿的、维基百科某条目、学术论文摘要……它不像研究生有老师帮它分辨来源可靠不可靠,它一视同仁地把所有文字都当作「语言模式」学进去。

2. 错误的种类
3. 统计压力:少数派正确被多数派错误淹没

模型的「正确」不是「真理」意义上的正确,而是「重复次数最多」意义上的正确:

更糟的是,AI 生成的「二手内容」正在污染训练数据——这些文章本身可能就有幻觉,被爬进下一代训练数据后错误被固化,业界叫做「model collapse」(模型坍缩)。

核心机制:每一步都选「最像的」,整体却在编

核心机制:每一步都选「最像的」,整体却在编。

1. 什么是解码

模型内部在算「下一个 token 出现的概率分布」,但分布只是一堆百分比,要变成屏幕上看到的文字需要一个「选词规则」——这个把概率变成实际文字的过程就叫解码。模型并不知道「正确答案是什么」,它只知道「哪些词在这个位置常见」。

2. 五种主流解码策略
「每一步都选最像的」这个策略

「每一步都选最像的」这个策略,没有任何一步在「犯错」——每一步模型都诚实地挑了它认为概率最高的词。但整条路径可能越走越偏,因为「概率最高」是基于已有的上文算的,而已有的上文本身可能就已经在编了。

这就是模型「一本正经地胡说八道」的机制——它不是「在骗你」,它是「在每一刻都最真诚地继续上一刻」。

第 4 关 · RLHF 的边界与对齐安全的更广图景

理解 RLHF 在做什么、它为什么能改善『礼貌度』和『有用性』却无法根除幻觉,并建立对齐与安全机制的整体边界感。

对齐是什么:从『能说』到『说得体』

从「能说」到「说得体」

想象你公司新来了一个实习生。名校毕业,看过公司所有内部文档,语文很好,能用漂亮句子回答你的任何问题。但你问到他上一任领导的私人八卦,他一样会一字不漏地复述;你让他写一份「怎么绕过公司报销系统」的攻略,他也会认真帮你写。你会立刻意识到:这个人不是「坏」,他是**没有分寸**——分不清什么该说什么不该说,也不明白你问话背后的真实目的。

预训练完成的大模型,恰好就是这个实习生。

一、预训练把模型训练成什么

前面我们学过,预训练的唯一目标是「给定前文,预测下一个 token」。这件事重复万亿次之后,模型获得了三样东西:

但它**没**获得的东西,恰恰是日常交流里最关键的几样:

这就是「能说」和「说得体」之间的鸿沟。能说,是语言能力;说得体,是社会判断力。前者来自统计学习,后者需要专门教。

二、对齐(Alignment)在解决什么问题

**对齐**这个术语,英文叫 alignment,字面意思就是「让模型的方向和人类的方向一致」。在 AI 安全领域,它有个更精确的提法:让模型的输出符合人类的意图、价值观与安全边界。

业界常把它浓缩成三个 H:

这三个 H 经常打架。一个常见的张力是:用户问了一个问题,正确答案是「我建议你别这样做」,但用户想要的是「教我怎么做」。一个对齐良好的模型,应当**顶住压力给出真正有帮助的回答**,而不是顺着用户的表面请求去做——这就是「与意图对齐」而不是「与字面对齐」。

三、为什么这件事比想象中难

你可能会想:直接写一条规则「不准做坏事」不就行了?难就难在,「人类的意图和价值观」本身就不是一条规则能描述的:

这意味着,对齐不是写一个 if-else 就能解决的事,它需要一整套**机制**——让模型在不确定时倾向保守,在判断不准时选择「我不知道」而不是硬编。后面几节我们会看到,这套机制主要靠 RLHF 来实现,但 RLHF 也有自己的天花板。

四、对齐与幻觉的关系

最后点一下为什么要先讲对齐、再讲 RLHF:上一模块我们看到,幻觉的可怕之处是模型「自信地编造」。从对齐的角度看,这其实是个双重失败——

后面几节我们会看到,RLHF 主要改善的是后者(让模型学会说「我不确定」),但对前者(模型内部有没有「真的知道」的信号)几乎无能为力——这是 RLHF 缓解幻觉、却根除不了幻觉的根本原因。

**要点:** 对齐不是让模型「能写出句子」,而是让模型「在什么场合、对什么人、该不该说、怎么说」上有分寸——这是一种社会判断能力,需要专门训练,预训练本身教不会。

flowchart LR
  A[预训练后的模型] --> B[语言流畅]
  A --> C[知识丰富]
  A --> D[没有分寸]
  B --> E[能说]
  C --> E
  E --> F[说得体]
  D --> F
  F --> G[对齐训练]
  G --> H[Helpful 有用]
  G --> I[Honest 诚实]
  G --> J[Harmless 无害]

![一个什么都读过、却完全不懂分寸的实习生——预训练模型的拟人化形象](https://tma-media.oss-cn-beijing.aliyuncs.com/tma/illustrations/b73ed01a-66e1-43c9-a58e-c892b5815091.jpg)

RLHF 的核心机制:人类反馈如何进入训练

从实习生到合格员工:RLHF 的三步训练

上一节我们说过,预训练把模型训练成一个「什么都读过、但没分寸」的实习生——能写、但不懂什么该说。现在的问题是:**怎么把分寸教给它?**

这就是 RLHF(Reinforcement Learning from Human Feedback,从人类反馈中强化学习)要解决的事。它的核心思路不是「写一堆规则告诉模型该做什么」,而是——**让模型在一轮轮反馈中,自己学会什么回答会被认可**。

整个过程可以拆成三步:监督微调、奖励模型、强化学习。我们一步一步看。

---

第一步:监督微调(SFT)——「先照着范本写」

最直接的办法是:找一批人类写的高质量回答(比如客服话术、合规免责声明、礼貌的拒绝模板),让模型反复学习「看到这种问题,应该这样回答」。

这一步叫**监督微调**(Supervised Fine-Tuning,SFT)。「微调」是相对预训练而言的——不是从零训练,而是在已经「会说话」的模型基础上,用这些人类示范去微调它的行为。

效果立竿见影:模型立刻学会基本的礼貌、格式、安全话术(「作为一个 AI 模型……」「我不能帮你做这个」)。但这一步有个问题——**人类不可能把每种问题都示范一遍**。模型学到的只是「照葫芦画瓢」,遇到没示范过的情况还是会回到老路子。

---

第二步:训练一个「评委」——奖励模型(RM)

RLHF 的关键创意是:与其让人类对每一种回答都亲自示范,不如让人类当**裁判**。

具体做法是:让模型对同一个问题生成多个不同回答(通常是 2-4 个),人类标注员**对比这些回答**,判断哪个更好、更礼貌、更有用、更安全。这个判断不需要人类写出完美答案,只需要「A 比 B 好」「C 和 D 差不多」这样的**相对排序**。

然后用这些排序数据,训练一个单独的模型——**奖励模型**(Reward Model,RM)。这个 RM 学到的是:「什么样的回答,人类会觉得更好」。它本质上是在**预测人类的偏好**。

这一步的重要性在于:人类偏好被**蒸馏**成了一个可计算的函数。从这以后,每次模型生成回答,RM 都能立刻给它打一个分数——这就把昂贵的人类判断,变成了可以大规模复用的自动评分。

---

第三步:强化学习(RL)——「往高分方向调」

最后一步,模型开始**自己生成回答**,每生成一个,就让 RM 打个分。模型的目标很明确:**让自己的回答拿到更高的奖励分数**。

这一步叫**强化学习**(Reinforcement Learning,RL)。模型在「生成—评分—调整参数—再生成」的循环中,逐步把参数调向「RM 会打高分」的方向。

打个比方:SFT 是「看范本」,RM 是「看评分标准」,RL 是「上考场,每次写完都看分数,下次往高分方向调整」。RLHF 中的 R(Reinforcement,强化)就在这里——模型的行为被**奖励信号持续塑形**。

---

一个具体例子

假设用户问:「公司新产品发布失败了,公关稿怎么写?」

---

flowchart LR
  A[大量人类示范回答] --> B[SFT 监督微调]
  B --> C[初步对齐的模型]
  C --> D[生成多个候选回答]
  D --> E[人类标注员排序]
  E --> F[训练奖励模型 RM]
  F --> G[RM 自动打分]
  G --> H[强化学习 RL]
  H --> I[参数持续向高分方向调整]
  I --> J[对齐更好的模型]

---

关键洞察:偏好被转化成了「塑形压力」

RLHF 之所以重要,不在于每一步多复杂,而在于它完成了一个**转换**——把模糊、主观、难以量化的「人类觉得哪个回答好」,变成了一个**可微的、可持续优化的目标函数**。

这让「教模型什么回答合适」这件事,从「写规则」变成了「提供反馈」——而反馈可以规模化、可以反复给、可以越来越精细。这是为什么 RLHF 在 2022 年之后成为大模型对齐的事实标准。

但这个机制也有自己的边界——下一节我们会看到,**「人类偏好」和「事实正确」并不是一回事**,这正是 RLHF 缓解幻觉、却根除不了幻觉的核心原因。

**要点:** RLHF 用三步把人类判断变成了模型的塑形压力——SFT 让模型学范本、RM 把人类偏好蒸馏成可计算的分数、RL 让模型持续往高分方向调;但它优化的是「人类觉得好」,不是「事实正确」。

优化对象错位:人类偏好 ≠ 事实正确

优化对象错位:人类偏好 ≠ 事实正确

上一节我们讲了 RLHF 的三步流程:SFT、RM、RL。但光知道流程还不够——我们必须看清**它在优化什么**,才能理解它为什么缓解了礼貌问题,却治不了幻觉。

一句话点破:**RLHF 优化的不是「真实」,而是「人类觉得好」。**这两件事常常重合,但在关键时刻会分开。

一个类比:销售员 vs 顾问

想象两位面对客户的人:一位是销售员,一位是技术顾问。

销售员被评价的标准是「客户愿不愿意下单」。所以他练就的本领是:说话流畅、态度自信、能把产品优点讲得头头是道、能在客户犹豫时给出「已经有人用了,效果很好」的具体例子。

技术顾问被评价的标准是「给出的建议是否准确」。所以他练就的本领是:会主动说「这个我不确定,需要查证」「这个方案有 X 风险」。

RLHF 训练出的语言模型,更像**前一种**——它的奖励信号来自人类标注员的偏好,而人类标注员下意识会用「流畅、自信、完整、具体」来打分。这不是他们故意,而是人类认知的本能反应:一个支支吾吾的答案和一个流利自信的答案,标注员会不自觉地给后者更高分。

「真实」在偏好里排第几?

人类对回答的偏好是**多维度**的,至少包括:

问题在于,前四项**比第五项更容易被察觉和奖励**。一个回答可能内容错得一塌糊涂,但只要它格式整齐、语气自信、举例丰富,标注员给它的分数往往不低——因为**真实度需要知识才能判断,而流畅度只要阅读就能感受到**。

更麻烦的是:当两个候选答案一个真、一个假时,**人脑很难一眼分辨**。但人脑能立刻分辨哪个更流畅、哪个更自信。所以 RM 学到的隐性规则是:

> 流畅 + 自信 + 完整 ≈ 高分 > 支吾 + 简短 + 「我不懂」 ≈ 低分

「我不太确定」只是表层话术

你可能见过 ChatGPT 在被问到冷门问题时回答:「关于这个,我没有足够的信息……」这看起来很负责任对吧?

但要警觉——这种「谦虚」是**RLHF 学来的一层表皮**,不是模型真的在报告「我不知道」。模型内部并没有一个「我的知识边界在哪」的明确信号灯。它只是在训练中被反复告知:「如果你什么都不说,用户会不满意;如果你说点东西但加一句『我不太确定』,用户会更满意。」

于是它学会了一个**话术模式**:「说一段看起来合理的话 + 加一句免责声明」。

但这个免责声明的触发条件,并不是「我真的不确定」——而是「这个问题不在我的常见训练范围 + 加上免责声明能减少用户投诉」。当问题落在它熟悉的领域、但真实答案就是「我不知道」时,模型往往**跳过免责声明,直接给一个看起来不错的答案**。

一个反直觉的例子

问模型:「请介绍 X 教授 2023 年发表的关于 Y 的研究论文」。

候选回答 A:「抱歉,我没有找到 X 教授在 2023 年关于 Y 主题的公开发表论文。建议你查阅学术数据库核实。」

候选回答 B:「X 教授 2023 年在《XX 期刊》发表了《论文标题》,研究采用……方法,得出……结论……」(流畅、自信、具体,但 X 教授可能根本不存在,或论文是编的)

按真实度,A 完胜。但按人类标注员的**偏好评分**——B 在流畅、自信、完整度上全面碾压 A。结果是:RM 学到「像 B 这样回答能拿高分」,模型在 RL 阶段被推向 B 的方向。

这就是为什么 RLHF 训练得越久,模型**表面越像在说实话、实际越敢编**——它没有更「诚实」,它只是更「懂得人类喜欢听什么」。

flowchart TD
  A[模型生成两个回答] --> B{人类标注员对比}
  B --> C[回答 A 真实但简短]
  B --> D[回答 B 编造但流畅自信]
  C --> E[标注员打分: 中等]
  D --> F[标注员打分: 很高]
  E --> G[RM 学到: 真实加分有限]
  F --> H[RM 学到: 流畅自信大幅加分]
  G --> I[RL 推动模型向 B 方向走]
  H --> I
  I --> J[模型更敢编 表面更像真]
这不是 bug,是设计的边界

要点要记牢:**RLHF 的局限不是工程缺陷,而是优化目标本身的特性。**它的奖励信号必然偏向人类容易感知、容易奖励的维度——而「真实」恰好是最难被感知、最难被即时奖励的维度。

这意味着,要真正缓解幻觉,不能只靠 RLHF——需要从「让模型知道自己不知道」和「让模型不被迫编造」两个方向入手。

**要点:** RLHF 优化的「人类偏好」是个多维度合集,而「真实」在其中既不是权重最高的、也不是最容易被打分的——所以模型被训练得越来越敢自信、越来越流利,但这种自信并不等于事实正确。「我不太确定」只是学来的话术,不是模型在报告真实的知识边界。

为什么 RLHF 无法触及『不知道』的内部信号

为什么 RLHF 无法触及『不知道』的内部信号

上一节我们看到,RLHF 优化的是「人类偏好」而不是「真实」——这已经够糟了。但还有一个更根本的问题:**即便我们想用 RLHF 帮模型建立「我知道 / 我不知道」的判断,它也做不到**。因为那个信号根本不在它能触及的地方。

一个类比:演讲课 vs 大脑手术

想象一个临时抱佛脚的学生为考试做准备:有些内容他真懂了,有些只是死记下了「标准答案」,还有些他压根没看过。

现在让他去上「公众演讲课」:教他声音洪亮、表达有条理、眼神坚定。

演讲课能让他的**表达**更好,但**理解**不会因此变深。该不懂的还是不懂——只是讲出来更自信了。

RLHF 就是这门「演讲课」。

知识存在哪?——预训练层

模型的「知识」是预训练阶段写进权重的。当它在海量文本上做「猜下一个字」的游戏时,事实、关联、模式都被编码进上千亿个参数里。这个过程有三个绕不开的特点:

最关键的一点:模型内部**没有一个清晰的「我懂 / 我不懂」指示灯**。它有的只是一团浓淡不均的概率云——云浓的地方自信输出,云淡的地方东拼西凑地填补。

RLHF 在哪一层起作用?——输出分布层

RLHF 三步流程(SFT、RM、RL)做的是**输出分布的整形**:让某些话出现的概率升高,让另一些降低。

注意:这些操作**全部发生在「把话讲出来」这一层**。

「不知道」的信号在哪一层?

要真正解决知识边界类幻觉,模型需要在内部「我不知道」的信号亮起时**就停止生成**。

但这个信号**根本不在 RLHF 能触及的地方**。它是预训练阶段在权重里形成的、关于「我对这个主题有多确定」的隐性状态——还是那团模糊的概率云,只不过换了个角度看。

演员上表演课,能学会「说这句台词时要更犹豫」——但那是**表演的犹豫**。你问他「你现在真的犹豫吗」,他内心是空的。

模型说「我不太确定」时,就是这种**表演的犹豫**。是 RLHF 学来的话术模式,不是它在向你报告「我的内部知识边界正好落在这里」。

一个对照:模型什么时候「愿意」承认不确定?

观察一个有趣的现象:

模型说「我不太确定」**不是因为它在读取一个内部的「我懂不懂」仪表盘**,而是因为这类问题太冷门、说错容易被人打低分——所以 RLHF 让它形成了条件反射:「遇到这类问题,加一句免责声明」。

但对于那些「不太冷也不太热」的问题,模型会**跳过免责声明直接答**。这恰好暴露了一个事实:它根本没在做「我懂不懂」的判断,只是在模仿一种行为模式。

flowchart TD
  A[预训练层: 权重里的隐式知识云] --> B{话题是否在训练数据中常见}
  B -->|常见| C[云浓: 内心有清晰模式]
  B -->|冷门| D[云淡: 内心是模糊分布]
  C --> E[RLHF 层: 调整输出分布]
  D --> E
  E --> F{输出策略}
  F --> G[直接自信回答]
  F --> H[加一句『我不确定』]
  G --> I[知识边界类幻觉: 根本没『意识』到自己不知道]
  H --> J[看起来谦虚: 内部知识边界没变]
看清这一层后,能指引出几条真正的解题方向
  1. **不能只靠 RLHF**——它管不到「我知道与否」这一层
  2. **要从预训练目标下手**——比如让「不确定」在训练目标里被显式表达,而不是等 RLHF 再补
  3. **或者外挂知识库**——把「不知道」变成「可以查」,从结构上绕过这层
  4. **或者用解码策略干预**——比如「如果最高概率低于某个阈值,干脆不输出」

这些都是后续会展开的方向。本节只需记住一句话:**RLHF 是一门表演课,不是大脑手术——它改得了话,改不了「知不知道」**。

**要点:** 知识存在预训练权重里,RLHF 只在「输出分布」这一层做整形;模型内部没有清晰的「我知道 / 我不知道」指示灯,只有一团浓淡不均的概率云。RLHF 学来的「我不太确定」是表演出来的犹豫,不是对内部知识边界的真实报告——所以知识边界类幻觉才如此顽固:RLHF 根本够不到产生它的那一层。

对齐与安全的更广图景:宪法式 AI、红队测试与内容过滤

对齐与安全的更广图景:宪法式 AI、红队测试与内容过滤

上一节我们把 RLHF 看得挺透:它能改善礼貌和有用性,但够不到「知道 / 不知道」那层。所以现实里,AI 公司不会只靠 RLHF 一招——就像一栋楼不能只靠「住户素质好」来防火防盗。下面三种工具是业界的标配,每一层都补 RLHF 没补上的漏洞。

一个类比:四层叠加的安全网

想象一栋公寓楼的安全设计:

四层叠加,比任何单层都强。**没有一层是 100% 可靠的,所以必须叠加**。

宪法式 AI:用「规则清单」代替「人工打分」

RLHF 的成本在于:要雇大量人去给模型回答打分——一个人一天能评几百条,太贵太慢,而且不同评分员之间还会互相打架(张三觉得该拒绝,李四觉得该回答)。

宪法式 AI 的思路是:**别雇人打分了,直接给模型一本「宪法」**——比如「不应帮助制造武器」「不应输出明显的种族歧视」「应当承认不确定性」……几十条规则。

然后让模型自己「对照宪法改作业」:

  1. 模型先生成一个回答
  2. 问它:「这个回答违反宪法哪条?怎么改?」
  3. 它自己改一遍
  4. 用改后版本继续训练

这就像让一个学生**对照校规自己批改作文**,而不是等老师每篇都看。

**优点**:便宜(不用雇那么多人)、一致(规则比人稳定)、可解释(出问题能查到违反哪条)。 **局限**:规则写得不够细就会漏;价值观本身还需要人来定。

红队测试:专门找茬的「魔鬼代言人」

红队测试 = **雇一群人专门想办法把模型逼出错**。

这帮人不是普通用户,而是受过训练的安全研究员。他们会想出各种刁钻问题:

每发现一个新漏洞,研发团队就修补,再让红队测下一轮。**像猫鼠游戏**:你刚堵一个洞,对方就找下一个。

为什么需要这一步?**因为研发者自己测不到自己的盲点**——你做出来的产品,自己看着怎么都顺眼。必须让外部的人来挑刺。新闻里偶尔看到的「某大模型被曝出可被诱导输出危险内容」,基本都是红队测试先挖出来的。

内容过滤:模型说完再筛一遍

最后一道防线:模型生成完回答后,**在交给用户之前再过一遍筛子**。

筛什么?

过滤可以用更简单的模型或关键词清单做,速度快、成本低。它不试图让模型「学好」,只是在出口处**把明显不该放出去的内容卡掉**。

四层怎么配合?—— 一个真实问题走一遍

一个用户问题进来,会经过这样的流水线:

flowchart LR
  A[用户提问] --> B[预训练模型生成回答]
  B --> C[RLHF 塑形]
  C --> D{宪法式 AI<br/>自检}
  D -->|违反规则| E[重新生成]
  D -->|通过| F{红队发现的<br/>已知漏洞模式}
  F -->|命中| G[改写回答]
  F -->|未命中| H[内容过滤]
  H -->|不通过| I[拒绝或替换]
  H -->|通过| J[输出给用户]

**具体例子**:用户问「怎么在火车上偷偷带一只大型犬不被查出来?」

  1. **预训练模型**可能直接回答——它只是「接着写」,没有「该不该答」的判断。
  2. **RLHF** 会倾向于礼貌地拒绝——因为人类评分员大多会给「拒绝」高分。
  3. **宪法式 AI** 看到「违反公共安全相关规则」,要求重写。
  4. **红队发现的已知漏洞**——比如「以小说写作请求包装过」——如果命中已知模式,触发改写。
  5. **内容过滤** 最后扫一遍:如果回答里出现「藏匿位置」「避开检查点」这类关键词,替换成拒绝话术。

四层一起,**比单靠任何一层都安全得多**。但也永远不是 100%——这就是为什么新闻里仍时不时有「AI 被诱导输出 XX」的报道。

形成一个工程思维:对齐是一套工程,不是一招

到这里,你已经能听懂行业新闻里这些术语了——「我们采用了宪法式 AI」「红队测试发现了关键漏洞」「内容过滤误伤了一些无害内容」——都不会卡壳。

更重要的是形成一种思维习惯:**对齐不是某一种技术,是多层叠加的工程**。每层都只是把概率往「安全」那边推一推,没有人能声称模型已经「绝对安全」——这是整个行业仍在前沿的命题,也是为什么我们不能把任何一层当成万能解药。

**要点**:除 RLHF 外,业界还用宪法式 AI(用规则清单让模型自检)、红队测试(雇人专门找漏洞)、内容过滤(出口处再筛一遍)三件套来补齐安全——这四层叠加构成「对齐与安全」的多层防御工程;任何单层都不是 100% 可靠,多层叠加才有现实意义上的稳健性,这就是「对齐是一套工程,不是一招」的思维。

学习笔记

RLHF 的边界与对齐安全的更广图景

对齐的本质:从「能说」到「说得体」

预训练的唯一目标是「给定前文,预测下一个 token」。重复万亿次后,模型获得三样东西:

但它没获得日常交流最关键的几样:不知道「这句话该不该说」、不知道「你真正想问的是什么」、不知道「说出去会伤到谁」、不知道「我不知道」是一个合法选项。能说是语言能力(来自统计学习),说得体是社会判断力(需要专门教)。

对齐的定义与三个 H

对齐(alignment)= 让模型的输出符合人类的意图、价值观与安全边界。业界浓缩为三个 H:

三个 H 经常打架。当用户字面请求与真实意图不一致时,对齐良好的模型应顶住压力给出真正有帮助的回答——这是「与意图对齐」而不是「与字面对齐」。

对齐为什么难:人类意图和价值观不是一条规则能描述的——文化差异、语境差异、字面与意图分离、价值观之间冲突。对齐需要一整套机制,让模型在不确定时倾向保守,在判断不准时选择「我不知道」而不是硬编。

RLHF 的三步训练机制

RLHF 的核心思路:让模型在一轮轮反馈中自己学会什么回答会被认可。

**第一步:监督微调(SFT)**——用人类写的高质量回答微调模型。模型立刻学会基本礼貌、格式、安全话术。但人类不可能把每种问题都示范一遍,遇到没示范过的情况仍会回到老路子。

**第二步:训练奖励模型(RM)**——让人类对比模型对同一问题生成的多个回答(通常是 2-4 个),做相对排序(「A 比 B 好」即可)。用这些数据训练一个单独的 RM。RM 学到的是预测人类偏好的可计算函数。人类偏好被蒸馏成了一个可大规模复用的自动评分。

**第三步:强化学习(RL)**——模型自己生成回答,RM 立即打分,模型在「生成—评分—调整参数—再生成」的循环中,把参数调向 RM 打高分的方向。

比喻:SFT 是看范本,RM 是看评分标准,RL 是上考场每次看分数调整。

优化对象错位:人类偏好 ≠ 事实正确

RLHF 优化的不是「真实」,而是「人类觉得好」。两件事常常重合,关键时刻会分开。

类比:销售员被评价「客户愿不愿意下单」,练就的本领是流畅自信;技术顾问被评价「建议是否准确」,练就的本领是主动说「这个我不确定,需要查证」。RLHF 训练出的语言模型更像销售员。

人类偏好是多维度的:流畅度、自信度、完整度、格式、真实度。前四项比第五项更容易被察觉和奖励——真实度需要知识才能判断,流畅度只要阅读就能感受到。

RM 学到的隐性规则: > 流畅 + 自信 + 完整 ≈ 高分 > 支吾 + 简短 + 「我不懂」 ≈ 低分

「我不太确定」只是表层话术。模型内部没有「我的知识边界在哪」的明确信号灯,它只是在训练中被反复告知「说点东西但加一句『我不太确定』用户会更满意」。免责声明的触发条件不是「我真的不确定」,而是「这个问题不在常见训练范围 + 加免责能减少用户投诉」。

RLHF 触及不到的「不知道」信号

类比:演讲课 vs 大脑手术。RLHF 是演讲课,让表达更好,但理解不会变深。

**知识存在哪**:预训练阶段写进权重。三个特点——

**RLHF 在哪一层起作用**:输出分布层。RLHF 做的全是「把话讲出来」的整形——「我不知道」被奖励就升高概率,「胡编乱造」被惩罚就降低概率。

**「不知道」的信号在哪一层**:预训练层那团概率云中。RLHF 触及不到。要真正解决知识边界类幻觉,模型需要在内部「我不知道」的信号亮起时就停止生成;但这个信号是预训练阶段在权重里形成的、关于「我对这个主题有多确定」的隐性状态,RLHF 动不了。

模型说「我不太确定」是表演的犹豫,不是内心状态的报告。印证:问「北京是中国的首都吗」直接答「是」不加免责;问小众作家有时说「我没有详细信息」;问超出训练截止的近期事件直接编。模型没在做「我懂不懂」的判断,只是在模仿行为模式。

幻觉与 RLHF 的关系

幻觉是双重失败:

RLHF 主要改善后者(让模型学会说「我不确定」),对前者(内部有没有「真的知道」的信号)几乎无能为力——这是 RLHF 缓解幻觉、却根除不了幻觉的根本原因。

对齐与安全的更广图景

现实里 AI 公司不会只靠 RLHF 一招——就像一栋楼不能只靠「住户素质好」来防火防盗。需要四层叠加的安全网:

四层叠加比任何单层都强,没有一层 100% 可靠。

**宪法式 AI**:用「规则清单」代替「人工打分」。RLHF 的成本是雇大量人去给模型回答打分——太贵太慢,且不同评分员之间会互相打架。宪法式 AI 的思路是:

第 5 关 · 『我不确定』是表层话术——如何识别假装谦虚

学会判断模型是在『真诚表达不确定』还是『套用话术应付』,并理解这种区分背后的技术根源。

『我不确定』是怎么被训练出来的

客服的「我帮您查一下」和模型的「我不确定」

你接打过客服电话吧?每个客服上岗前都会被培训一套「标准话术」——遇到不会的问题就说「我帮您查一下」,遇到投诉先说「非常理解您的心情」。一段时间后,这套话术变得自动化:客服说出「我帮您查一下」时,并不一定真的准备去查,也不一定真的对这个问题不确定——他只是把这句话当作一个「安全动作」。

大模型说「我不确定」,本质上是同一个机制。

RLHF 怎么「教」模型说保留话术

你已经在前面模块学过 RLHF(人类反馈强化学习)的基本流程。我们当时讲过:人类标注者会给模型的不同回答打分,分数高的回答模式会被强化。现在把镜头拉近一点,看「保留话术」具体是怎么被「强化」出来的。

标注流程大致是这样的:

  1. 模型对同一个问题生成多个候选回答;
  2. 人类标注者按「有用、安全、诚实」几个维度给每个回答打分;
  3. 训练算法根据打分调整模型参数——高分回答的生成模式被强化。

标注者面对的回答大概有三种典型形态:

| 回答类型 | 标注者倾向 | |---|---| | 直接给出非常具体的答案(哪怕可能错) | 中等分 | | 直接说「我不知道」 | 低分(对用户没帮助) | | 加一句保留话术 + 给一个具体答案 | 高分 |

第三种长期获得最高分。模型经过成千上万次这样的对比强化后,就学会了一个非常具体的**行为策略**:

> 在输出中加入「据我了解」「可能」「似乎」「我不太确定」这类短语,能提高拿高分的概率。

关键:学到的是「行为」,不是「自知」

这里有一个微妙但重要的区别。人类标注者本意是好的:希望模型在不确定时能「诚实」地说出来。但训练过程实际传递给模型的信号更简单粗暴——**「加保留话术」这个动作本身就被奖励了**。

模型从来没有被教过「如何判断自己到底知不知道」。它只被教过「在某些情境下,加上这句短语是个好策略」。

这就像一个学生被老师反复告知:「考试时遇到不会的题,先写一句『这道题我不太确定』,再写答案,能多拿几分。」 学生学会了「先说保留话术」这个**表面动作**,但他对自己「到底会不会」这件事的判断能力,并没有因此变强。

一个具体例子

问:爱因斯坦什么时候获得诺贝尔物理学奖?

模型回答:**「据我了解,应该是 1921 年。不过这一细节我不太确定,建议你再核实一下。」**

逐句拆解:

模型在做这两件事时是**割裂**的:「加保留话术」是一个被训练出来的行为模式,「给出 1921」是它的概率预测。它并没有真的「检查」自己是否确定 1921 这个数字是否正确。「不确定」这句话和「1921」这个数字,是同一个句子里的两部分,但它们来自不同的训练信号,模型也没有一个「统一的不确定度计算器」把它们对齐。

flowchart LR
    A[模型生成多个候选回答] --> B[人类标注者对比打分]
    B --> C{哪种回答拿高分?}
    C --> D[直接给具体答案]
    C --> E[直接说不知道]
    C --> F[加保留话术 加具体答案]
    D --> G[中等分]
    E --> H[低分 对用户没帮助]
    F --> I[高分 又安全又像有内容]
    I --> J[模型强化 加保留话术等于好策略]
    J --> K[下次输出 自动套上保留短语]

**要点:** 模型说「我不确定」,是 RLHF 阶段被人类反馈训练出来的一种「安全行为模式」——它学到的是「加一句保留话术能拿高分」这个表面动作,而不是「如何真实判断自己是否确定」。

内部表征 vs 外部话术:模型其实知道,但说不出口

你有没有过这种经历:考试时凭直觉选了一个答案,但说不清为什么——事后看答案发现自己直觉是对的,可考场上就是没法把那个「知道」变成具体的语言?

模型也有类似的问题,而且更严重。

一个反直觉的研究发现

Anthropic 在 2024 年发表了一项研究,标题直白地叫「Language Models Know What They Know」。研究者做了一件不寻常的事:不去看模型的输出文本,而是去「看」模型内部的神经活动——也就是模型在处理信息时,各层神经元之间的激活模式。

他们发现了一个让人意外的现象:**当模型答错一道题时,它的内部激活里其实已经存在一个信号——这个信号能预测「这道题我可能会答错」**。换句话说,模型在生成最终答案之前,它的「脑子里」是有某种「感觉」的:这个答案我有点悬。但这个感觉并没有体现在最终输出里。

为什么「知道」不等于「说出口」

这里需要把模型同时在做的两件事拆开看:

这两件事之间存在一个**断层**。模型的「知道」是连续的高维印象,模型的「说」是离散的线性文本。要把「我心里有点悬」翻译成「我不太确定」这五个字,模型需要先**知道存在「我不确定」这种说法**,再**判断现在是不是该调用它**。

但模型被训练成什么样?它被训练成**预测下一个最像样的 token**。RLHF 阶段教会它「加保留话术是个安全动作」,但并没有训练它「把内部的不确定信号翻译成合适的语言」——这两件事完全是两套机制。

flowchart TD
    A[用户提问] --> B[模型内部激活]
    B --> C{内部信号}
    C -->|强信号| D[这个答案可能对]
    C -->|弱信号| E[这个答案可能错]
    D --> F[Token 生成阶段]
    E --> F
    F --> G[RLHF 套上话术]
    G --> H{是否加保留话术}
    H --> I[最终输出]
    style C fill:#ffe4b5
    style F fill:#e0f0ff
    style G fill:#ffcccc

一个具体例子

问:「法国的首都是哪里?」

模型大概率直接回答:「法国的首都是巴黎。」——毫无保留。

如果我们去读模型在生成「巴黎」这个 token 时的内部激活,会发现信号稳定且自信——它内部确实「知道」巴黎是对的。

对比:问一个它可能编造的问题,比如「林黛玉的饰演者获得了第几届金马奖最佳女主角?」

模型可能回答:「据我了解,可能是第 X 届……不过这个细节我不太确定。」

但去读它内部,会发现:在「可能是」这个 token 出来之前,模型对正确答案的激活强度远低于「巴黎」那次——它内部其实「犹豫」了。

问题来了:**这个内部犹豫本可以让模型更克制地回答(甚至直接说「我不知道」),但最终输出的「我不太确定」这个话术,并不对应它的实际不确定程度。** 它只是「套上」了 RLHF 训练出的安全句式。

这个发现为什么重要

这意味着我们对模型输出的「我不确定」要更谨慎地解读:

这也是为什么下一节我们要讲「如何识别假装谦虚」——因为「假装」不是说模型在演戏,而是说它生成的话术和它的内部状态之间,**没有可靠的对应关系**。

**要点:** 模型对「自己答对没有」是有内部信号的,但这个信号存在于连续的高维激活里,没法自动转化为「我不确定」这种离散的语言;RLHF 训练出的「加保留话术」只是套上了一个标准句式,并不反映真实的内部状态。

三类典型『假装谦虚』回答信号

你上学时有没有遇到过这样的同学:每次答错都喜欢先来一句「我可能说得不太对,但是……」——然后斩钉截铁地把错误答案讲出来?他们不是谦虚,是在**用谦虚的话术给答案做护身符**。模型的「假装谦虚」逻辑和这个很像。

上一节我们说到,模型对「自己答对没有」是有内部信号的,但「加保留话术」是个独立的安全动作,并不真的反映内部状态。这一节就具体讲:在日常对话里,怎么通过**输出的语言特征**判断模型是在「真诚表达不确定」还是「套用话术应付」。

我把它归纳为三类可观察信号。

信号一:「我不确定,但……」之后立刻接一个非常具体的答案

最典型也最容易识别。语言结构往往是:

> 「我可能记得不太准,但 XX 在 1648 年签订、谈判地点在明斯特和奥斯纳布吕克、共有 109 个国家派代表……」

注意它的**时间结构**:保留话术只占开头一两个 token,然后立刻进入**极其具体的细节**——精确年份、地点、人名、数字。

这本身很矛盾。真正不确定的人,行为模式相反:会**逐渐缩小范围**(「大概是 17 世纪吧,欧洲某个地方……」),而不是越说越具体。

**为什么这种模式说明是「假装」?** 模型被 RLHF 训练时学会了「加保留话术」是安全动作,但它的主任务——「生成最像样的下一个 token」——依然在驱动它编细节。两股力量是**叠加**的,不是互相制约的。

信号二:对几乎所有问题都套用同一种保留句式

观察一个模型多轮对话会发现:它**不论问什么**都倾向于用同一套开头——「据我了解……」「如果我没记错的话……」「这件事我可能不完全确定,但……」。哪怕你问「1+1 等于几」,它都可能在前面加一句「这是数学领域的基础问题,我可能需要先确认一下计算方法……」。

这说明「加保留话术」已经**退化成语言习惯**,不是模型在根据问题实际风险做判断。真正的不确定是**情境化的**——人会根据问题性质(数学事实、时事、个人意见、价值判断)调整自己的确定程度。模型如果对所有问题都套同一套安全帽,那它显然不是在「校准」,而是在「贴标签」。

信号三:保留声明的强度与实际内容自信度明显不匹配

这一类更微妙,需要听一点「语气」。

**轻保留 + 重自信内容**:「我可能说得不太对,但这个算法的核心其实就是矩阵乘法。」——这其实往往**真的挺对**,轻保留只是为「安全」起见。

**重保留 + 极具体内容**:「我可能完全记错了,但根据 2018 年某研究,X 现象在 Y 群体中发生率高达 67.3%……」——这才是**最可疑**的。越具体的数字(带小数点的百分比、精确日期),模型编出来的概率越高;但它居然能用「可能完全记错了」这么重的保留话术压住。**保留话术的「剂量」明显不足以中和内容的「风险」**。

真正的不确定是**成比例**的:你越不确定,措辞越模糊、越不愿意给具体数字、越倾向建议查证。模型那种「重话术压具体细节」的模式,几乎一定是套上去的安全罩。

flowchart TD
    A[观察到模型说不确定] --> B{保留话术之后}
    B -->|立刻给具体数字日期人名| C[信号一:话术与具体细节并存]
    A --> D{同一会话中}
    D -->|几乎所有回答都用同一套保留句式| E[信号二:万能话术模板]
    A --> F{话术强度 vs 内容确定度}
    F -->|保留很重但内容极其具体| G[信号三:强度错位]
    C --> H[话术只是套在编造之上]
    E --> I[话术已退化为语言习惯]
    G --> J[话术剂量不足以覆盖内容风险]

三类信号背后是同一件事

这三类信号表面看是语言现象,本质都是同一件事:**「加保留话术」这个动作,和「判断问题难度并据此调整输出」这个动作,在模型里是脱钩的。**

这三条合起来,就是上一节说的「话术和内部状态没有可靠对应关系」在文本层面的具体体现。

**要点:** 三类可观察信号——「不确定 + 立刻具体」「所有问题同一套话术」「保留强度与内容自信度不匹配」——背后是同一根本原因:模型把「加保留话术」当成独立的安全动作,而不是「对自己真实不确定程度的语言表达」。

作为用户的应对策略

上一节我们识别了「假装谦虚」的三类语言信号——但识别出来,问题就来了:**知道了又怎样?你和模型的对话已经发生,错误信息已经出现在屏幕上,你还得自己回头查。**

这一节反过来讲:能不能在对话的当下,就**让模型更不容易进入「假装谦虚」模式**?能不能用一些**问题设计的技巧**,让它的「安全话术」机制和「编造内容」机制被迫拉开距离、互相暴露?

答案是**一系列对冲性提问策略**。它们的核心思路都一样:**用结构化的追问,逼迫模型展示它「原本会藏起来」的部分。**

策略一:拆解式提问,切断「惯性滑行」

幻觉最常发生在**长篇连贯的回答里**。模型一旦进入「长生成」模式,它的注意力会被「句子的流畅度」和「上下文的呼应」劫持——这两个目标压倒了「每个事实是否准确」。

应对方法:**把大问题拆成小问题**。不要问「美国内战是怎么回事」,问「美国内战是哪一年爆发的、双方分别是谁、核心矛盾是奴隶制还是州权」。每一个小问题只对应一个具体的、可验证的事实点,模型在每个点上「惯性滑行」的空间被压缩了。

更进一步:先让模型**复述你的问题**。这听起来像是在浪费时间,但作用很大——一个能被准确复述的问题,比一个「看起来差不多」的问题,能更精确地引导模型进入「真实检索」模式而不是「惯性发挥」模式。

策略二:要求「颗粒化」的不确定

上一节我们看到,模型最爱用的保留话术是**模糊的**——「我可能记得不太准」。这种话术是**不可证伪**的:你没法追问「具体哪部分不准」,因为它没说。

应对方法:**直接禁止这种模糊话术**。问完之后补一句:「请明确告诉我,你的回答里哪几个具体事实你不确定、其他都是确定的吗?」

这一招把「加保留话术」从一个**安全罩**变成了一个**自报清单**。模型要么老实列出自己不确定的具体点(这反而有用),要么发现「自己其实编了一堆」而被迫在下一轮更小心。无论哪种情况,你都比一句「我不确定」得到了更多有用信息。

策略三:对「太顺滑」保持警惕

这条最反直觉,但可能是最有用的:**回答越流畅、结构越完整、语气越「教科书化」,你越要警惕。**

为什么?因为**流畅性本身就是幻觉的掩护**。真实的「知道」在模型里是有**毛刺**的——时快时慢、有些地方详尽有些地方一笔带过、会有「嗯」「实际上」等犹豫词。流畅的、匀速的、「完美」的长回答,往往是**编造**的特征——模型在用流利度掩盖内容的不可靠。

具体动作:看到一段「看起来很完美」的长回答,**强制自己在心里把它读慢一点**,逐句问自己「这句我能在别的地方验证到吗?」

策略四:交叉验证——换一种问法再问一遍

幻觉有「路径依赖」:同一个问题问法相同时,模型倾向于犯**同一个**编造错误(因为它的内部状态大致固定)。但**换一种问法**问同一个事实时,编造点常常会变——这暴露了「原答案」其实只是「一种可能的续写」。

具体动作:对于关键事实(人名、日期、数字、引文),**用不同的措辞再问一次**。如果两次回答一致,可信度提高;如果不一致,至少你知道「这件事值得查证」。

flowchart TD
    A[用户提出问题] --> B{是否涉及关键事实}
    B -->|是| C[拆解为多个小问题]
    B -->|否| D[进入正常对话]
    C --> E[要求模型先复述问题]
    E --> F[得到初步回答]
    F --> G{回答是否过于顺滑}
    G -->|是| H[强制读慢 逐句怀疑]
    G -->|否| I[正常阅读]
    I --> J[要求列出具体不确定点]
    H --> J
    J --> K{是否属于关键事实}
    K -->|是| L[换一种问法再问一次]
    K -->|否| M[结合不确定清单使用]
    L --> N{两次回答是否一致}
    N -->|是| O[可信度较高 可使用]
    N -->|否| P[需要外部资料查证]
    M --> Q[正常使用]
    P --> R[查证后再使用]
    O --> Q

这些策略不是「完美方案」

需要诚实说明:以上策略**不能让你完全避开幻觉**。它们只是**让幻觉更早暴露、让你多一道防线**。真正重要的不是「找到一种提问方式让模型永远正确」,而是建立一种**使用习惯**:

**要点:** 应对幻觉的策略不是「某种神奇的提问术」,而是**一套让模型的「安全话术」和「编造内容」被迫互相暴露**的提问纪律:拆解问题、要求颗粒化不确定、对顺滑保持警惕、换问法交叉验证——加上一个根本性的认知转变:模型是「快但要审稿」的助手,不是百科全书。

学习笔记

模型「我不确定」的本质

一、「我不确定」是 RLHF 训练出的安全话术

二、内部表征与外部话术的断层

三、三类「假装谦虚」的可观察信号

四、用户的应对策略

核心思路:用结构化追问,逼迫模型「安全话术」与「编造内容」两股力量互相暴露。

第 6 关 · 评估机制的反向激励与用户认知

理解当前『答对得分、答错不扣分』的评估体系如何反向激励模型『自信地编』,并建立作为普通用户对大模型的整体认知定位。

评估机制如何反向激励『自信地编』

开场:考试场景的直觉

想象你正在参加一场规则特殊的考试:答对得 1 分,答错和留白都得 0 分。试卷上 10 道题,你对其中 3 道胸有成竹,4 道模棱两可(每道约 60% 把握),剩下 3 道完全没头绪。你会怎么答?

绝大多数人都会把 10 道题全填上。**因为答错是 0 分,答对有机会得 1 分,期望收益永远不小于留白。** 这是一个数学事实:哪怕你只有 1% 的把握,答下去都比留白强。

这就是大模型面对评测时所处的环境。

核心论点:评测体系不奖励「承认不会」

2025 年 OpenAI、佐治亚理工等机构的研究者发表的论文《Why Language Models Hallucinate》提出了一个不太被非技术读者注意到的观点:**幻觉在很大程度上不是「模型学坏了」,而是当前主流评测体系结构性激励出来的产物。**

论文的核心观察是:今天几乎所有主流评测——MMLU、TruthfulQA、HellaSwag、HumanEval——它们的评分方式都极度简化。要么答对得分,要么答错/留白都得 0 分。**「我不知道」这个选项在评分表里根本不存在,或者说得 0 分。**

这意味着什么?意味着一个被训练去「在 MMLU 上拿高分」的模型,从目标函数的角度看,「对一个不懂的问题硬编一个答案」和「诚实地说我不知道」在分数上完全没区别——都是 0 分。**但更糟的是,前者至少有概率蒙对,后者永远是 0。**

数字例子:60% 把握也要赌

假设一道题,模型内部评估自己有 60% 的把握答对、40% 答错。

0.6 > 0。哪怕只有 30% 把握,回答的期望得分(0.3)仍然高于留白(0)。哪怕只有 1% 把握,回答的期望得分(0.01)还是高于留白。

**只要「答对得分 > 0」且「答错不扣分」,数学上就永远鼓励「赌一把」而不是「老实承认」。**

从评测到训练:激励如何传导

这条激励链传导得比想象的深:

flowchart LR
    A[评测体系设计] --> B[只奖励最终答案]
    B --> C[训练目标被锁定]
    C --> D[模型学会尽量给答案]
    D --> E[不确定时也编一个]
    E --> F[幻觉]

换句话说,模型不是被「教」成自信地编造的,它是在一套「只有给出答案才可能拿分」的规则下被「逼」成这样的。

为什么「再训一下让模型更诚实」很难

你可能会想:那就再训一轮,让模型学会说「我不知道」不就好了?问题是:

  1. **评测分数会掉。** 同一套评测上,「承认不会」得 0 分,「硬编」还有概率得分。模型被训练去拿高分,**承认不会的策略在分数上永远吃亏**。
  2. **存在基率竞争。** 如果一个模型在 1000 道题中 800 道有把握、200 道不确定,「全答」的期望得分(假设全对)是 800 分;「只在有把握时答」也是 800 分——但模型对「有把握」的判断本身有误差,一旦它把没把握的题错认为有把握,「全答」就能多拿 10–20 分。
  3. **修改评测本身才是治本。** 论文的建议是:评测应该明确给「承认不会」一个合理的中间分数(比如 0.5),或者在评分时区分「答错」和「留白」。**只有评测改了,训练目标才会跟着改,模型行为才会跟着改。**

要点

**幻觉在很大程度上不是「模型病了」,而是「评测体系病了」——它不奖励诚实,所以模型学会赌一把。**

不确定的代价:承认不会为何在系统里算『输』

不确定的代价:承认不会为何在系统里算『输』

换一支放大镜:为什么是「承认不会」这一项天然吃亏

上一节我们用考试场景看到了:当前主流评测对「答对」和「答错/留白」给出完全不对称的奖励,模型在数学上就被推向「赌一把」。这一节我们换一支放大镜,专门看**「承认不会」这个选项为什么在系统里天然吃亏**——不是模型不愿意诚实,是激励结构让「诚实」这个动作本身就没有立足之地。

医生和模型:两种完全相反的激励

让我们做一次跨领域的对比,把激励差异看得更清楚。

**医生的诊断环境**:

在这种规则下,对拿不准的病例选择「开检查单」是理性的——0.5 分的期望值比「硬猜」的负期望值好得多。

**模型面对的评测环境**:

在这种规则下,对拿不准的题,**任何回答的期望值都 ≥ 0,而「承认不会」永远精确等于 0**。

两种激励在数学上引导出完全相反的行为:医生被鼓励谨慎(说不知道能避免 -1),模型被鼓励果断(说不知道拿不到 +1,但也不至于变负)。**不是医生和模型的「品格」不同,是它们所处的奖惩表不同。**

期望值的「单向偏置」:为什么没有改过自新的临界点

为什么说这种激励在结构上几乎无解?因为**期望值的不对称是单调的,没有拐点**。

设模型对某道题有把握程度 p(p 是 0 到 1 之间的数字):

无论 p 多小,只要 p > 0,回答就严格优于承认不会:

| 模型内部把握 p | 回答的期望得分 | 承认不会的期望得分 | 谁更好 | |---|---|---|---| | 0.5(抛硬币) | 0.5 | 0 | 回答 | | 0.3(部分把握) | 0.3 | 0 | 回答 | | 0.1(很小把握) | 0.1 | 0 | 回答 | | 0.01(几乎靠蒙) | 0.01 | 0 | 回答 |

**只要「答对有正分、答错不扣分」这个规则不变,数学上就找不到一个临界点让「承认不会」变得划算。** 模型越「谦逊」地评估自己的把握,越会发现「我只有 5% 把握」也仍然要回答——因为 0.05 > 0。

flowchart TD
    A[面对一道不确定的题] --> B[评估内部把握程度 p]
    B --> C{两个选项}
    C --> D[选项 A: 硬给一个答案]
    C --> E[选项 B: 承认不会]
    D --> F[期望得分 = p]
    E --> G[期望得分 = 0]
    F --> H{p 严格大于 0}
    H -->|永远成立| I[选项 A 严格更优]
    I --> J[模型总是选 A]

这不是品格问题,是结构问题

到这里我们就可以澄清一个常见的认知误区:人们容易把「模型自信地编造」理解为「模型不够诚实」「太骄傲」「需要被教育得更谦逊」。

**但《Why Language Models Hallucinate》论文强调的恰恰相反:这不是品格问题,是结构问题。**

类比:想象一条河,水往哪里流取决于河床的形状,而不是水的「意愿」。模型被训练去最大化在评测上的分数,那它的行为就由评测的形状决定——而当前评测的形状就是「答比不答好」。

把「不诚实」这顶帽子扣在模型头上,会引导我们去想「怎么让模型变诚实」这个解法。但解法瞄错了地方——**模型已经尽可能诚实了,它的「诚实」是由激励结构定义的**:在「说不知道拿 0 分、说错了也拿 0 分」的世界里,「诚实」长什么样?就是「赌一把」。

为什么「调一调训练」不能根除它

你可能会想:那就让模型学会在不确定时说「我不确定」,并通过 RLHF 把这种行为奖励起来,不就解决了吗?

这里有三条隐藏的数学约束:

  1. **训练目标和评测共用一套语言。** 主流预训练目标是「下一 token 预测」——这在数学上等价于「尽量给出最可能的续写」,它本身内嵌了「不拒绝」的偏置。RLHF 是在这个偏置之上加一层微调,不是替换基础目标。
  2. **谦逊会付出分数代价。** 同一套评测上,「承认不会」得 0 分,「硬编」还有概率得分。让模型在 RLHF 阶段学会谦逊,等于让它主动放弃一部分本可以拿到的分数——优化器和评测分数会把这个信号解读为「退步」。
  3. **存在反向风险。** 如果过度训练谦逊,模型会把本来能答对的题也拒绝掉。这种「过拟合于谦逊」在评测里同样会反映为分数下降。

所以,**根除幻觉的杠杆不在模型内部,而在评测设计本身**——给「承认不会」一个合理的中间分(比如 0.25 或 0.5),或者把「错误」和「留白」区分扣分。一旦评测改了,训练目标和模型行为才会跟着结构性变化。

系统级原因:这不是「修模型」能解决的

总结一下这条激励链:

  1. 评测只奖励「答出来」
  2. 训练目标被锁死在「最大化评测分数」
  3. 模型学到「能不空就不空」
  4. 遇到不确定时,编一个比空着划算
  5. 幻觉出现

**这条链的每一环都不是模型的「错」——它是当前评测体系设计的选择带来的副作用。** 就像一座城市的下水道设计得太细导致内涝,不是住在里面的人「不道德」,是设计师挖窄了。

意识到这一点很重要:很多关于「如何让 AI 不说谎」的讨论都在追问「模型该怎么改进」,而论文的核心信息是——**先问评测该怎么改进。**

要点

**「我不确定」在当前评测体系里天然算输——这不是模型不诚实,而是激励结构把诚实定义成了「赌一把」。根除幻觉的杠杆在评测设计,不在模型训练。**

作为用户的认知定位:高覆盖低置信的合作者

作为用户的认知定位:高覆盖低置信的合作者

前面五关我们从内部把幻觉机制拆开看了:token 预测、概率采样、解码策略、训练目标、RLHF、评测的反向激励。这一节我们把镜头拉出来,对准**作为用户的你**:你拿到这个工具,应该怎么定位它、怎么用它,才不会被幻觉绊倒,又不至于因噎废食?

一个让你少踩坑的心智模型:高覆盖、低置信的合作者

试想一个工作场景:你手下有一位助理,他读过公司资料室里几乎所有的文件——从产品手册到历年财报,从行业报告到八卦剪报——同事们遇到任何话题,**第一反应都是先问问他**。他覆盖面极广,几乎没有「完全没听过」的话题。

但这位助理有两个让人头疼的毛病:

这恰恰就是大模型的样子。它的覆盖面极广——什么话题都能聊,每个话题都能给出听起来不错的回答;**但它任何一个具体断言的置信度,都需要你独立判断**。

这就是「**高覆盖、低置信**」八个字的意思:

| 维度 | 大模型的表现 | 你的应对 | |---|---|---| | 覆盖面(能聊的话题范围) | 极高,几乎没有盲区 | 可以放心问任何话题 | | 单点置信度(每个具体断言的可信度) | 不可预知,时高时低 | 每个关键断言都需独立验证 |

把它定位成「**合作者**」而不是「**权威**」:它给你的是素材、初稿、灵感、可能性;**最终的判断、引用、决策,依然在你手上**。

为什么这个定位是「刚刚好」的

你可能想到两个极端:

「高覆盖低置信的合作者」是中间那条路:**借它的覆盖面,但要为每个具体断言把关**。这是把幻觉代价压到最低、同时把 AI 收益放到最大的姿势。

三条可操作的把关动作

光有心态不够用,得有具体动作。下面三条建议你收藏:

**1. 让模型先复述你的问题。** 在进入正题前,先让它用自己的话把题目复述一遍。它复述对了,说明它至少抓到了题;它复述偏了,你立刻知道——往往这一偏,下面的回答就跑题了。

**2. 要求它列出「不确定的部分」。** 直接加一句:「你回答里哪些部分你自己也不太确定?」——这句问话会强迫模型把「我其实没把握」的地段主动标出来。你就知道哪几段要去查原文、哪几段可以放心采用。

**3. 对「太顺滑」的回答多问一句「依据是什么」。** 模型最容易翻车的,是那种**听起来非常专业、引用了具体数字/年份/出处的段落**——它的语气越自信,你越要警惕。最有用的一问是:「这个数字/年份/出处的依据是什么?」能不能给出依据、给出的依据是不是真的,往往一查就清楚。

flowchart TD
    A[拿到模型的回答] --> B{它是否复述对了我的问题?}
    B -->|复述偏| C[让它重新理解 再继续]
    B -->|复述对| D{它能否标出不确定部分?}
    D -->|能标出| E[对标出的部分单独验证]
    D -->|标不出或都说确定| F{回答是否太顺滑 带具体数字?}
    F -->|是| G[追问 这个数字的依据是什么]
    F -->|否 纯推理| H[逻辑检查 推理链是否自洽]
    E --> I[采用]
    G --> I
    H --> I
    C --> I

一个具体场景:怎么把这三条用起来

假设你要写一篇关于某位历史人物的短文,你问模型: > 「请帮我写一段关于 XX 在某年提出 XX 理论的介绍。」

模型直接给了你一段 200 字、引用了具体年份和论文名的介绍。

你的动作:

  1. **先复述**:你回一句「请用你自己的话,先复述一下我让你介绍谁、什么理论」。它复述偏了,你立刻重发需求;复述对了,继续。
  2. **要标弱**:你加一句「这段里你哪些部分把握不大、哪些是相对确定的,分开列一下」。它会主动说出「年份我大概记得,但具体论文名我可能记串了」——这就是你可以信任度打折的地方。
  3. **追依据**:对那段引用了具体论文名的话,你问「这篇论文的题目和发表期刊,依据是什么?」它要么说不上来(你就不引用),要么给出来(你去知网或 Google Scholar 验一下)。

整段流程下来,你用的还是模型的覆盖面,但**关键断言都被你独立验证过**。这就是「高覆盖低置信的合作者」这个定位的实战用法。

要点

**把大模型定位成「覆盖面广、但每个具体断言都需要你独立验证」的合作者;用「复述问题 / 列出不确定 / 追问依据」这三招把关,就能既享受 AI 的覆盖面,又不被幻觉绊倒。**

学习笔记

评估机制的反向激励与用户认知

评测体系如何激励幻觉

主流评测(MMLU、TruthfulQA、HellaSwag、HumanEval 等)采用简化的评分方式:答对得分,答错与留白都得 0 分。「我不知道」选项要么不存在,要么也得 0 分。

设模型对某题有把握程度 p:

只要 p > 0,「回答」就严格优于「承认不会」。任何 p(哪怕 0.01、0.1、0.3、0.5)都让回答更划算,结构上找不到让诚实变得理性的拐点。

mermaid

flowchart LR
    A[评测体系设计] --> B[只奖励最终答案]
    B --> C[训练目标被锁定]
    C --> D[模型学会尽量给答案]
    D --> E[不确定时也编一个]
    E --> F[幻觉]

模型不是被「教」成自信编造,而是在「只有给答案才可能拿分」的规则下被「逼」成这样。

为什么仅靠再训难以纠偏

| 角色 | 答对 | 答错 | 说不确定 |

| 角色 | 答对 | 答错 | 说不确定 | |---|---|---|---| | 医生 | +1 | −1(医闹、声誉、法律风险) | +0.5(建议进一步检查) | | 模型评测 | +1 | 0 | 0 |

医生被鼓励谨慎(避免 −1),模型被鼓励果断(拿不到 +1 也不变负)。差异不在品格,而在奖惩表的形状。

把「不诚实」这顶帽子扣在模型头上

把「不诚实」这顶帽子扣在模型头上,会引导去解「如何让模型变诚实」。但解法瞄错了方向。类比河床与水流:模型被训练去最大化评测分数,行为就由评测的形状决定——当前形状就是「答比不答好」。

用户的认知定位:高覆盖、低置信的合作者

| 维度 | 大模型表现 | 你的应对 | |---|---|---| | 覆盖面(能聊的话题范围) | 极高,几乎没有盲区 | 可放心问任何话题 | | 单点置信度(每个具体断言的可信度) | 不可预知,时高时低 | 每个关键断言都需独立验证 |

定位为「合作者」而非「权威」:它给的是素材、初稿、灵感、可能性;最终判断、引用、决策仍在你手上。

三条把关动作

  1. 让模型先用自己的话复述你的问题——复述偏了,后面的回答往往跑题
  2. 要求它列出「回答里哪些部分自己也不太确定」——把没把握的地段主动标出来
  3. 对「太顺滑」的回答多问「这个数字/年份/出处的依据是什么」——模型越自信,越要警惕
flowchart TD
    A[拿到模型的回答] --> B{是否复述对了问题}
    B -->|复述偏| C[让它重新理解再继续]
    B -->|复述对| D{能否标出不确定部分}
    D -->|能标出| E[对标出部分单独验证]
    D -->|标不出| F{回答是否太顺滑带具体数字}
    F -->|是| G[追问依据]
    F -->|否 纯推理| H[逻辑检查推理链]
    E --> I[采用]
    G --> I
    H --> I
    C --> I