在大型语言模型 (LLM) 的世界里,机器中潜藏着一个幽灵。有时,像 GPT-4 或 Claude 这样的模型不仅仅是在生成新颖的文本,它们会逐字逐句地背诵特定的训练数据。这种现象被称为逐字记忆 (verbatim memorization) , 其范围从无伤大雅的 (背诵葛底斯堡演说) 到具有法律风险的 (复制受版权保护的代码或个人隐私信息) 。

多年来,研究人员一直将其视为一个需要修复的 Bug。普遍的假设是,特定的“坏”权重或神经元正在囤积这些记忆,只要我们能找到并修剪它们,问题就会消失。

然而,斯坦福大学最近发表的一篇论文《揭开大型语言模型逐字记忆的神秘面纱》 (Demystifying Verbatim Memorization in Large Language Models) 彻底挑战了这一观点。通过在 Pythia 模型家族上进行受控实验,研究人员发现,记忆并不是一个局部的 Bug——它是一个与模型理解语言的能力紧密交织在一起的特性。

在这篇深度文章中,我们将探讨他们是如何分离出这种现象的,为什么“更聪明”的模型实际上记忆得更多 , 以及为什么让模型“遗忘”敏感数据比我们想象的要难得多。

谜团: 是 Bug 还是特性?

为什么 LLM 会记忆特定的序列?是因为它们看数据的次数太多了吗?是因为模型太大了吗?还是有一种特定的机制——一种“记忆回路”——在看到特定提示词时会被触发?

以前的工作主要是观察性的,即在模型训练完成后对其进行观察。观察性研究的问题在于你无法控制变量。你不知道某个特定句子在训练数据中究竟出现了多少次,也不知道模型在学习它之前的内部状态如何。

为了解决这个问题,作者开发了一个受控框架来单独研究记忆现象。

双模型框架

为了准确理解是什么导致了记忆,研究人员建立了一个反事实实验。他们采用了一个预训练检查点 (我们称之为“基座模型”) ,并将其分叉为两条独立的训练路径:

  1. 对照模型 (\(M^{(\emptyset)}\)) : 继续在标准数据集上训练。
  2. 处理模型 (\(M^{(X)}\)) : 继续在标准数据集加上我们要让模型记忆的特定注入序列 (\(X\)) 上训练。

图 1: 我们的序列注入框架概览。

如上图 1 所示,这创建了两个几乎完全相同的模型。它们共享相同的历史和架构。唯一的区别在于,处理模型看到了我们正在研究的特定序列,而对照模型没有。这使得研究人员可以使用因果干预——即从字面上在两个模型之间交换内部状态——来确切地查看哪些组件对记忆负责。

破除迷思: 单次记忆的幻觉

AI 安全领域常见的一个担忧是“单次 (single-shot) ”记忆——即 LLM 扫描一次私人文档就能永远记住它。

研究人员对此进行了测试,他们将序列注入训练数据中仅一次,然后检查模型是否能背诵出来。结果令人惊讶: 真正的单次逐字记忆极其罕见。

当研究人员查看模型似乎在观看一次后就记住序列的实例时,他们发现这通常是一种错觉。

表 1: 制造单次逐字记忆错觉的四种序列类型。图 3: Pythia 检查点与逐字记忆长度的关系。

如上图上半部分 (表 1) 所详述,看起来像是记忆的现象通常是:

  • 模板 (Templates) : 模型记住了样板结构 (如 Java 类定义) 并填空。
  • 变体 (Variations) : 模型知道某个引语,但输出的版本略有不同。
  • 归纳 (Induction) : 模型识别出某种模式 (如日期序列) 并按逻辑继续。

为了严格测试这一点,他们训练了不同批次大小 (batch sizes) 的模型并测量了记忆长度。

图 2: 2.8b 和 6.9b 模型在 200 个训练步数后的单次逐字记忆长度。

如图 2 所示,“逐字记忆长度” (模型能背诵的精确 Token 数量) 在单次曝光后仍然很低。对于一个 69 亿参数的模型,它记住了大约 12 个 Token。虽然不是零,但这表明绝大多数长的、逐字的泄露 (如整段文本) 需要数据在训练期间重复多次。

悖论: 更好的模型记忆得更多

人们可能认为,随着 LLM 变得“更聪明”且更擅长泛化,它们会减少对死记硬背的依赖。论文表明情况恰恰相反。

更高质量的模型更容易进行逐字记忆。

参考图 3 的下半部分 (在上一节展示的图片中) ,研究人员比较了训练早期 (1K 步) 与训练晚期 (80K 步) 的检查点。蓝线 (“Original”) 显示,后期的、能力更强的检查点比早期的、较弱的检查点记住了明显更长的序列。

这引出了一个迷人但令人不安的结论: 记忆与*困惑度 (perplexity) *相关。模型预测通用语言下一个 Token 的能力越强 (困惑度越低) ,它编码和存储特定序列的效率就越高。

即使是“垃圾”数据也会被记住

研究人员通过打乱序列中的单词来创建无意义的数据 (高困惑度) ,对此进行了进一步测试。你可能会预期模型很难记住这些“分布外” (OOD) 的噪声。

虽然模型在处理打乱的数据时确实比处理连贯文本更吃力,但更好的检查点记忆无意义数据的能力仍然优于较弱的检查点。 这意味着我们不能简单地通过让模型变得更聪明来“训练消除”记忆。随着模型规模的扩大,它们记忆有用信息和私人数据的能力都在同步增长。

机制: 分布式抽象状态

如果模型记住了一个序列,那个记忆存储在哪里?流行的理论是特定的神经元充当“钥匙”。如果你触发了这把钥匙,模型就会解锁记忆。

为了验证这一点,作者使用了交换干预 (interchange interventions) 。 他们利用处理模型 (知道秘密序列) 和对照模型 (不知道) 。然后,他们试图找出哪些内部激活导致处理模型背诵该序列。

干预在数学上看起来像这样:

交换干预的公式

本质上,他们用来自随机输入的“干净”激活替换模型中的特定激活。如果模型停止背诵记忆,他们就知道那个特定的激活至关重要。

“神经手术”的发现

结果揭穿了简单“记忆按钮”的想法。

  1. 分布式信息: 背诵序列所需的信息并不位于单个 Token 上。它分布在整个输入前缀中。
  2. 抽象触发器: 记忆的“触发器”不仅仅是确切的单词。它是一个抽象状态

图 4: 触发器与逐字记忆 Token 之间的因果依赖关系。

看图 4(a)。这张热力图显示了《哈利·波特》第一句话的注意力依赖关系。黄色方框表示强依赖性。注意模型是如何关注 “Mr” 和 “Mrs” 来预测后续 Token 的。

然而,图 4(b) 显示了另一个记忆序列,其中的依赖关系是分散的。关键是,图 4(c) 显示,随着模型生成序列,它越来越少地依赖原始触发器,而更多地依赖其自身最近的输出。

研究人员通过给模型提供同义词证明了这些触发器的“抽象”性质。如果模型记住了序列 “The quick brown fox”,用 “The fast brown fox” 提示它通常仍会触发记忆。模型匹配的不是字符串;它匹配的是一种语义上的感觉

确凿证据: 这只是通用智能

这是论文中最激进的实验。研究人员问道: 模型是使用特殊的“记忆权重”来存储这些序列,还是仅仅使用其标准的语言处理权重?

他们执行了跨模型交换干预 (Cross-Model Interchange Intervention)

他们取了对照模型 (从未见过秘密序列) ,并强制向其输入来自处理模型 (见过序列) 的内部激活状态。

图 5: 三组跨模型交换干预。

他们将这些状态注入到注意力机制或 MLP (前馈) 层的输入端。

如果记忆需要对照模型所没有的专用权重,那么即使借用了激活值,对照模型也应该无法生成该序列。

结果: 对照模型能够生成记忆序列的开头。

图 6: 跨模型干预的结果。

图 6 显示了成功率 (\(R_{i,n}\)) 。实线表明,对于记忆序列的第一个 Token,只要给予来自处理模型的正确输入状态,对照模型 (从未见过该数据!) 在超过 50% 的情况下都能产生正确的输出。

这证实了逐字记忆利用了通用的语言建模能力。 用于背诵私钥的权重与用于写诗或总结新闻文章的权重是相同的。你无法在切除“记忆”部分的同时不切除“语言”部分。

为什么“遗忘”技术会失败

这种理解解释了为什么当前的“遗忘 (unlearning) ”方法 (让模型忘记特定数据) 通常效果不佳。

大多数遗忘技术,如梯度上升 (Gradient Ascent) ,试图在给定特定提示时惩罚模型输出特定序列的行为。但我们刚刚了解到,记忆是由抽象状态触发的,而不是精确的字符串匹配。

作者为遗忘提出了一项“压力测试”。他们选取了据称已经“遗忘”了某个序列的模型,并使用以下方法对其进行测试:

  1. 位置扰动: 移动提供给模型的文本窗口。
  2. 语义扰动: 用同义词替换单词。

图 13: 压力测试示例及遗忘失败案例。

图 13 清楚地展示了这种失败。

  • 原始测试: 模型拒绝完成该序列。成功了?
  • 位置扰动: 仅仅通过移动输入窗口,模型就吐出了“已遗忘”的文本。
  • 语义扰动: 通过改变几个单词,模型识别出了概念并反刍出精确的记忆文本。

图 13 (续) 和图 14: 逐字记忆长度分布。

图 14 量化了这一点。蓝色条形 (原始) 显示遗忘起作用了——匹配长度很低。但橙色条形 (扰动) 显示记忆又回来了。

遗忘方法并没有移除记忆;它们只是掩盖了一种特定的访问方式。这就像把房子的前门封死,却把后门和窗户大开着。

结论

《揭开逐字记忆的神秘面纱》的研究结果为 AI 隐私的未来描绘了一幅复杂的图景。研究人员有效地证明了逐字记忆不是一个可以轻易切除的独立模块。相反:

  1. 记忆与能力交织: 你的模型越好,它记忆的东西就越多。
  2. 触发器是抽象的: 你不能仅通过过滤特定的关键词来防止数据泄露。
  3. 存储是分布式的: 没有单一的“神经元”可以修剪。

这表明当前的安全方法——如“遗忘”特定句子——有着根本的局限性。因为模型使用通用的语言机制将这些记忆编码为抽象状态,所以在不降低模型整体智能的情况下完全移除它们是一个巨大的挑战。

对于进入该领域的学生和研究人员来说,这篇论文强调了一个至关重要的教训: LLM 不是数据库,没有“存储数据”和“处理逻辑”之间的明确界限。它们是整体系统,其中记忆和推理本质上是同一个过程。解决 AI 中的隐私问题可能需要架构层面的彻底重新思考,而不仅仅是一个更好的过滤器。