大型语言模型(LLMs)普遍错误地认为存在海马表情符号。这种现象源于模型试图在内部构建一个“海马 + 表情符号”的概念,但由于该表情符号在现实中并不存在,导致模型最终输出一个最接近的、但不正确的表情符号(如鱼或马)。通过分析模型内部状态发现,这个过程揭示了模型从一个模糊概念到具体输出的转换机制,以及当预期输出不存在时,模型会如何“破防”,进入自我修正或错误循环。
一个不存在的表情符号
当你询问主流的大型语言模型(LLMs)是否存在海马表情符号时,它们会表现出惊人的一致性和自信。
- gpt-5-chat: 100% 回答“是”
- claude-4.5-sonnet: 100% 回答“是”
- llama-3.3-70b: 100% 回答“是”
有趣的是,这种错误的记忆并非 AI 独有。在互联网上,许多人也坚信自己曾经见过并使用过海马表情符号,这是一种典型的“曼德拉效应”。海马表情符号甚至曾被正式提议,但在 2018 年被拒绝了。
无论根源如何,模型在处理请求时,其潜在的信念就是“海马表情符号存在”。但这引出了一个更深层的问题:
我自己也曾以为有海马表情符号,但如果我想发送它,我只会在键盘上找不到,然后意识到它不存在。为什么模型会发送一个错误的表情符号,甚至陷入垃圾信息循环呢?
深入模型内部:Logit Lens 的视角
为了探究模型内部发生了什么,我们可以使用一种名为 Logit Lens 的工具。这个工具能让我们窥探模型在生成最终答案之前,其内部每一层的“中间想法”。
分析显示,模型在处理“海马表情符号”这个问题时,其内部状态是逐步演化的:
- 初始层: 输出是混乱无序的。
- 中间层: 模型开始清晰地构建与“海马”相关的概念。例如,在第 52 层,模型内部的表达已经非常接近“sea horse horse”(海 马 马)。这表明模型正在努力形成一个关于 “海马” 的概念。
- 后续层: 模型试图将“海马”这个概念与“表情符号”的概念结合起来。在更深的层级,我们能同时看到与“海马”(如
sea、horse)和表情符号编码(如ðŁ)相关的预测。
简而言之,模型正在思考的概念是 “海马 + 表情符号”。它试图构建一个代表这个组合概念的内部表达。
lm_head:从概念到现实的转换器
模型的 lm_head 是一个巨大的矩阵,可以被理解为一个“字典”。它的工作是将模型最终形成的内部概念(一个复杂的向量)与词汇库中最相似的那个具体词元(token)进行匹配,然后输出这个词元。
- 正常工作流程: 当模型想输出“Hello”时,它会构建一个代表“Hello”概念的内部向量。
lm_head接收这个向量,在它的“字典”里找到与这个向量最匹配的词元,也就是“Hello”。 - 对于真实表情符号: 当被问及鱼的表情符号时,模型会构建一个 “鱼 + 表情符号” 的概念向量。
lm_head能够成功地将这个向量匹配到词汇库中真实存在的 🐟 表情符号。
失败的根源:“海马 + 表情符号”的困境
海马表情符号的问题就出在这个最后环节。模型成功地构建了一个清晰的 “海马 + 表情符号” 概念向量。它满怀信心地将这个完美的向量传递给 lm_head,期望能得到一个海马表情符号。
但问题是,
lm_head的“字典”里根本没有海马表情符号这个词元。
因此,lm_head 只能被迫选择一个与“海马 + 表情符号”概念向量最相似的、实际存在的词元。这个最相似的选项通常是另一个水生动物(如热带鱼 🐠)或甚至就是马 🐎。
“破防”的后续:模型的自我修正循环
当模型输出一个错误的表情符号(比如 🐠)后,这个输出会作为新的信息被模型自己“看到”。这时,模型才意识到它的输出与它最初想表达的“海马”概念不符。
这种矛盾导致了不同的后续行为:
- 尝试修正: 一些模型(如 Claude 4.5 Sonnet)会意识到错误,再次尝试,如果仍然失败,最终会承认海马表情符号并不存在。
- 陷入循环: 另一些模型(如 gpt-5-chat)则可能陷入更长的混乱,不断输出错误的表情符号,无法从中恢复。
- 直接忽略: 还有些模型会若无其事地继续对话,仿佛输出的错误表情符号就是它想要的一样。
关键在于,在得到 lm_head 的错误输出之前,模型并不知道自己最初的信念是错的。它只能假设它构建的“海马 + 表情符号”概念会如预期般产生正确的词元。直到现实(lm_head 的输出)给了它沉重一击,它才开始“反思”。