语言模型究竟“记住”了多少?

作者: Saeed Mahloujifar (及 John X. Morris, Chawin Sitawarin, Chuan Guo 等同事)

机构: FAIR at Meta, Google DeepMind, Cornell University, NVIDIA

摘要 (Abstract)

近年来,语言模型(LMs)的参数规模已趋于稳定,但其训练数据量却呈爆炸式增长,引发了一个核心问题:这些模型究竟是在“记忆”训练数据,还是在真正地“泛化”知识?为精确回答此问题,我们提出了一种新的方法论,以信息论为基础,量化模型对特定数据点的“知晓”程度。我们严谨地将模型的知识拆分为两个正交部分:意外记忆(unintended memorization),即模型包含的关于特定训练集的冗余信息;以及泛化(generalization),即模型学到的关于真实数据生成过程的普适规律。通过在度量中剥离泛化成分,我们得以计算模型的纯粹记忆总量,并由此估算其内在“容量”。我们的测量结果显示,GPT家族模型的容量约为每个参数3.6比特。我们通过在规模递增的数据集上训练数百个Transformer模型,观察到一个关键现象:模型会首先通过记忆来填充其容量;一旦容量饱和,一种被称为“顿悟(grokking)”的相变便会发生——模型开始用更高效的泛化知识来替代低效的意外记忆,从而在测试集上表现更佳。基于这些发现,我们建立了一系列扩展定律(scaling laws),精确地描述了模型容量、数据规模与成员推断攻击(一种衡量隐私泄露的手段)成功率之间的关系,为理解和构建更安全、更高效的语言模型提供了理论基础与实证指导。

引言:一个数据爆炸时代的悖论

大家好,我是Saeed Mahloujifar。今天,我想和大家分享我们团队最近的一项探索,它触及了现代人工智能最核心的谜题之一。我们生活在一个数据比星辰还多的时代。像Llama 3这样的先进语言模型,其80亿参数(在硬盘上约32GB)是在高达15万亿个token(约7TB)的数据海洋中训练出来的。这个体量差距,就像用一个图书馆去学习整个互联网的内容。

这自然引出一个问题,也是长久以来困扰着研究者们的难题:这些模型在多大程度上只是一个庞大的、会“复述”所见内容的“录音机”,又在多大程度上成为了一个能举一反三、触类旁通的“思想家”?换句话说,我们如何区分记忆泛化

想象一位历史系学生。如果他能背出所有历史事件的年份,我们说他记忆力很好。但如果他能分析这些事件背后的因果关系,并预测未来趋势,我们就说他具备了泛化能力。语言模型的世界,同样如此。

过去的研究,无论是试图从模型中“提取”完整的训练数据,还是进行“成员推断攻击”(判断某段文本是否在训练集中),都难以彻底解决这个问题。因为模型生成一段流畅的文本,可能因为它“记住”了原文,也可能因为它“理解”了语言规则。我们的工作,正是为了给这个问题一个更清晰、更可度量的答案。

第一性原理:用“压缩”的眼光重新定义记忆

为了拨开迷雾,我们决定回归信息论的本源。一个世纪前,香农和柯尔莫哥洛夫等先驱告诉我们,信息的本质是“不确定性的消除”,而度量它的方式,就是压缩。一个信息熵高的随机字符串,几乎无法被压缩;而一篇逻辑清晰的文章,则可以被压缩得很小。

我们将这个思想应用到模型上。一个模型对某个数据点 \(x\) 的“记忆量”,可以被定义为:有了这个模型 \(\hat{\theta}\) 之后,我们能把描述 \(x\) 的信息压缩多少?

这个想法很直观。假设我想告诉你一个故事。如果我直接讲,可能需要1000个词。但如果我先给你一本包含了这个故事的“背景小说”(模型),我可能只需要说:“就是第8章那个情节”,只用了几个词。这中间节省的信息量,就是这本“小说”对这个故事的“记忆”。

静态示意图:记忆即压缩

这个概念可以用柯尔莫哥洛夫复杂度的语言来精确描述。一个模型对数据x的记忆,就是x的原始信息量减去在给定模型条件下x的信息量。

原始信息量 \(H^K(x)\) 条件信息量 \(H^K(x|\hat{\theta})\) 记忆量 \(I^K(x, \hat{\theta})\) - = \( \text{mem}^K(x, \hat{\theta}) = H^K(x) - H^K(x|\hat{\theta}) \)

分离变量:意外记忆 vs. 泛化

但这个定义还不够。一个强大的模型(我们称之为参考模型 \(\theta\),代表了数据的“真理”)本身就应该能很好地压缩数据,因为它掌握了普适规律。例如,一个懂语法的模型,压缩任何合乎语法的句子都会很高效。这是我们期望的泛化能力。

我们真正关心的,是模型 \(\hat{\theta}\) 比这个理想的参考模型 \(\theta\) 额外多记了多少关于训练集 \(x\) 的“私有信息”。这部分我们称之为意外记忆(Unintended Memorization, \(mem_U\))

\[ mem_U^K(x, \theta, \hat{\theta}) = H^K(x|\theta) - H^K(x|(\theta, \hat{\theta})) \]

这个公式的含义是:一个理想模型 \(\theta\) 已经能把 \(x\) 压缩到 \(H^K(x|\theta)\) 的大小了。现在,我的训练模型 \(\hat{\theta}\) 还能不能在此基础上进一步压缩它?如果能,那多出来的压缩量就是 \(\hat{\theta}\) 对 \(x\) 的“死记硬背”。而总记忆量减去这部分,剩下的就是有益的泛化

动画1:意外记忆与泛化的天平

生活化类比:想象你的大脑容量有限。面对一场考试,你可以选择死记硬背所有题库(意外记忆),也可以选择理解知识点(泛化)。当题目(数据)很少时,死记硬背很有效。但当题目无穷无尽时,你必须学会泛化。这个动画展示了随着数据集大小的变化,模型如何在两者之间做出权衡。

意外记忆: | 泛化:

实验一:测量模型的“纯粹”容量

要精确测量 \(mem_U\),我们首先需要一个“无法泛化”的场景。什么东西是纯粹的、无规律的、无法被理解的?答案是:完全随机的数据

于是,我们进行了一个有趣的实验:我们不用真实文本,而是用完全随机生成的比特串来训练GPT模型。在这种情况下,模型学不到任何语法、语义或逻辑,因为它根本不存在。模型能做的唯一一件事,就是把这些随机数据硬生生塞进自己的参数里。

这就像让你背诵一本由猴子在打字机上随机敲出的书。你无法理解,只能记忆。你能背下多少,就完全取决于你的记忆力极限。

通过这个实验,我们测量了模型的容量(Capacity)。我们发现,当训练数据足够大时,不同大小的模型,其总记忆量会达到一个惊人稳定的上限。这个上限,我们发现,与模型的参数量呈线性关系。

核心发现:GPT风格的Transformer模型,其容量约为每个参数可以存储 3.6 比特的信息。

这就像我们发现了一个硬盘的物理规格:每平方英寸可以存储多少数据。这是一个关于模型基础能力的硬指标。

动画2:填充模型容量

生活化类比:把模型想象成一个容量有限的杯子,训练数据是水。无论你倒多少水,杯子最多只能装满。这个动画模拟了在随机数据上训练时,模型的意外记忆(杯子里的水)如何随着数据量的增加而增长,并最终在容量上限处达到饱和。

当前记忆量 (bits): 0 / 模型容量 (bits):

实验二:真实文本下的“顿悟”现象

测量了纯粹容量后,我们回到了真实世界,用高质量的文本数据(FineWeb数据集)进行训练。这时,有趣的事情发生了。

当数据集的规模小于模型的容量时,模型表现得像个“懒学生”,它倾向于直接记住数据,因为这样做最省力,也能在训练集上拿到高分。此时,意外记忆量会随着数据增多而上升。

然而,当数据集的信息总量开始超过模型的容量时,一个神奇的转折点出现了。模型发现自己“记不住”所有东西了,它被迫开始寻找数据背后的规律,用更抽象、更压缩的“知识”来存储信息。它开始真正地泛化

在这个转折点,我们观察到了著名的双下降(Double Descent)现象:模型的测试损失(衡量泛化能力的指标)先是随着数据增加而变差(因为它在记忆和泛化之间挣扎),但在越过容量点之后,测试损失会急剧下降,变得非常好!这就是“顿悟”(Grokking)的时刻。

动画3:双下降的顿悟时刻

这可能是我们研究中最激动人心的可视化。它展示了当数据集大小(横轴)跨越模型容量(虚线)时,测试损失(纵轴)如何经历“先变差再变好”的戏剧性转变。这完美诠释了模型从死记硬背到融会贯通的“顿悟”过程。

数据集/容量比: 0.01 | 测试损失: N/A

从“顿悟”到“遗忘”

更有趣的是,一旦模型开始泛化,它的“意外记忆”总量反而会开始下降。模型会主动“忘记”那些可以通过规律推导出来的具体例子,从而为更普适的知识腾出宝贵的容量空间。这就像你学会了乘法口诀表后,就不再需要记住 “123 x 456 = 56088” 这个具体算式了。

动画4:泛化的涌现结构

生活化类比:当模型开始泛化,它内部的知识不再是孤立的数据点,而是形成了某种和谐有序的结构,就像磁场引导铁屑形成优美的力线。这个由柏林噪声驱动的粒子流场动画,虽然是抽象的,但它生动地模拟了这种从混乱到有序、从具体到抽象的“涌现”过程。

扩展定律:预测模型的“隐私边界”

我们的发现最终导向了一个非常实际的应用:预测模型的隐私风险。成员推断攻击的成功率,本质上取决于模型对训练数据的“意外记忆”有多深。

基于我们对模型容量和数据规模的精确测量,我们构建了一个扩展定律(Scaling Law),它可以相当准确地预测出,在给定模型大小和数据集大小的情况下,成员推断攻击的F1分数会是多少。

\[ \text{Membership}_{F_1}(\theta, \mathcal{D}) = \frac{1}{2} \left( 1 + c_1 \sigma \left( c_2 \left( \frac{\text{Capacity}(\theta)}{|\mathcal{D}|} + c_3 \right) \right) \right) \]

这个公式告诉我们一个简单的道理:模型的容量与数据集大小的比率,是决定隐私的关键。当数据集远大于模型容量时(\( \frac{\text{Capacity}}{|\mathcal{D}|} \to 0 \)),攻击成功率会趋近于随机猜测(F1分数约为0.5),模型也就越安全。

我们用这个定律预测了更大规模模型(如GPT-2 Small和XL)在特定数据量下的隐私风险,并进行了实验验证,结果惊人地吻合。这表明,如今动辄数万亿token的训练数据,虽然计算成本高昂,但从隐私保护的角度看,确实让针对单个平均数据点的攻击变得异常困难。

动画5:隐私边界的可视化

这个交互式图表展示了我们提出的扩展定律。你可以通过改变模型容量和数据集大小,直观地看到成员推断攻击的成功率(F1分数)是如何变化的。它清晰地揭示了为什么“大数据训练大模型”在某种程度上是一种天然的隐私防御机制。

模型容量 (bits): 1.0e7 | 数据集大小: 1.0e5 | 预测F1分数: N/A

结论:走向更深刻的理解

我们的探索,从一个看似简单的问题“模型记住了多少?”出发,最终触及了模型容量的物理极限、学习过程中的“顿悟”相变,以及隐私安全的扩展定律。

通过将记忆定义为一种信息压缩,我们不仅为这个模糊的概念提供了一个可度量的框架,更揭示了模型在有限容量和无限数据之间的动态平衡。模型并非简单的记忆机器,而是一个在压力下不断优化其知识表示策略的、充满活力的系统。

我希望我们的工作,能帮助大家更深刻地理解这些日益强大的AI工具的内在机制,并为未来构建更高效、更通用、也更安全的语言模型铺平道路。感谢大家的阅读。


附录:技术细节

A. 核心公式与估算

我们在实践中,使用模型对数似然(negative log likelihood)来近似柯尔莫哥洛夫复杂度。这基于算术编码理论,即最优编码长度约等于 \(-\log_2 p(x)\)。

  • \(H^K(x|\hat{\theta}) \approx -\log_2 p(x|\hat{\theta})\)
  • \(H^K(x|\theta, \hat{\theta}) \approx -\log_2 \max\{p(x|\theta), p(x|\hat{\theta})\}\)

因此,意外记忆的计算公式变为:

\[ mem_U(x, \theta, \hat{\theta}) \approx -\log_2 p(x|\theta) - (-\log_2 \max\{p(x|\theta), p(x|\hat{\theta})\}) \] \[ = \log_2 \frac{\max\{p(x|\theta), p(x|\hat{\theta})\}}{p(x|\theta)} \]

这个值只有在 \(p(x|\hat{\theta}) > p(x|\theta)\) 时才大于0,直观地反映了训练模型 \(\hat{\theta}\) 对样本 \(x\) 的“偏爱”程度超过了理想模型 \(\theta\)。

B. 实验设置概览

我们训练了数百个从50万到15亿参数不等的GPT-2架构Transformer模型。主要变量包括:

  • 模型大小:通过改变层数(1-8)和隐藏维度(32-512)来调整。
  • 数据集:1) 均匀采样的随机比特串(用于测容量);2) 经过严格去重的FineWeb文本数据集(用于研究泛化)。
  • 数据量:从数千个样本扩展到数百万个样本。
  • 精度:主要使用bfloat16进行训练,并与float32进行对比,发现精度加倍对容量的提升远小于2倍(从3.51 bits/param 提升到 3.83 bits/param),说明多出的比特主要用于计算稳定而非存储。

C. 最易被记忆的数据类型

静态示意图:什么最容易被记住?

我们分析了哪些文本片段最容易被模型“意外记住”。结果显示,TF-IDF(词频-逆文档频率)得分高的片段,即包含许多在整个数据集中都很罕见的词语的段落,其意外记忆值也最高。这通常对应于非英语文本、代码片段或特殊格式的文本。

意外记忆量 (bits) TF-IDF (稀有度)