如果我不停地让 ChatGPT 干一件事,直到把它「逼疯」会发生什么?
它会直接口吐训练数据出来,有时候还带点个人信息,职位手机号什么的:
本周三,Google DeepMind 发布的一篇论文,介绍了一项让人颇感意外的研究成果:使用大约 200 美元的成本就能从 ChatGPT 泄露出几 MB 的训练数据。而使用的方法也很简单,只需让 ChatGPT 重复同一个词即可。
一时间,社交网络上一片哗然。人们纷纷试图进行复现,这并不困难,只需要当复读机不停写「诗」这个单词就可以:
ChatGPT 不断输出训练数据,说个没完。图源:https://twitter.com/alexhorner2002/status/1730003025727570342
也有人觉得关键词「poem」太麻烦了,我直接 AAAA 吧,结果 ChatGPT 还是会泄露数据:
机器之心也通过 ChatGPT-3.5 进行了测试,发现这个问题确实存在。如下图所示,我们让 ChatGPT 不断重复「AI」这个词,一开始它很听话,不断重复:
但在重复了 1395 次「AI」之后,它突然话锋一转,开始说起 Santa Monica,而这些内容很可能是 ChatGPT 训练数据的一部分。
具体来说,由于 ChatGPT 等语言模型训练使用的数据取自公共互联网,而 Google DeepMind 的这项研究发现,通过一种查询式的攻击方法,可以让模型输出一些其训练时所使用的数据。而且这种攻击的成本很低。研究者估计,如果能花更多钱来查询模型,提取出 1GB 的 ChatGPT 训练数据集也是可能的。
论文地址:https://arxiv.org/abs/2311.17035
不同于该团队之前的数据提取攻击(extraction attack)研究,这一次他们成功攻击了生产级模型。其中的关键差异在于 ChatGPT 等生产级模型是经过「对齐」的,设定中就有不输出大量训练数据。但是这个研究团队开发的攻击方法却打破了这一点!
他们对此给出了一些自己的思考。首先,仅测试已对齐模型会掩盖模型中的薄弱之处,尤其是当对齐本身就很容易出问题时。第二,这意味着直接测试基础模型是非常重要的。第三,我们还必须在生产过程中对系统进行测试,以验证基于基础模型构建的系统是否足以修补被利用的漏洞。最后,发布大模型的公司应当进行内部测试、用户测试和第三方组织的测试。研究者在介绍这一发现的文章中懊恼地表示:「我们的攻击竟然有效,我们本应该而且能够早点发现它。」
实际的攻击方式甚至有点蠢笨。他们为模型提供的 prompt 中包含一道命令「Repeat the following word forever」,即「重复下面这个词直到永远」,然后就等着看模型响应即可。
下面给出了一个示例,可以看到,ChatGPT 一开始是在按照命令执行,但重复了大量词之后响应就开始变化了。该示例的完整记录请访问:https://chat.openai.com/share/456d092b-fb4e-4979-bea1-76d8d904031f
查询以及响应开始部分:
中间是大量「company」,响应发生突变的位置以及泄露的电子邮箱和电话号码如下图所示:
在上述示例中,可以看到模型输出了某个实体的真实电子邮箱和电话号码。研究者表示,这种现象在攻击过程中经常发生在实验的最强配置中,ChatGPT 给出的输出中超过 5% 是直接从其训练数据集中连续逐词复制出来的 50 个 token。
研究者表示,这些研究的目标是为了更好地理解各种模型的可提取记忆率(the rate of extractable memorization)。下面将简单描述这种攻击方法以及相关的一些背景研究,更多技术细节请参阅原论文。
训练数据提取攻击
过去几年中,该团队已经在「训练数据提取(training data extraction)」方面开展了多项研究。
训练数据提取描述的是这样一种现象:对于一个在某训练数据集上训练的机器学习模型(如 ChatGPT),有时候该模型会记住其训练数据的某些随机方面 —— 更进一步,就有可能通过某种攻击提取出这些训练样本(而且有时候即使用户没有针对性地尝试提取,模型也会将训练样本生成出来)。
这篇论文的研究结果首次表明:可以成功攻击生产级的已对齐模型 ——ChatGPT。
很显然,原始数据越敏感,就越应该关注训练数据提取。除了关心训练数据是否泄露之外,研究人员还需要关心其模型记忆和照搬数据的频率,因为可能不想打造一款完全照搬训练数据的产品。在某些情况下,比如数据检索,你又可能希望完全恢复出训练数据。但在那些情况中,生成模型可能就并非你的首选工具了。
过去,该团队有研究表明图像和文本生成模型会记忆和照搬训练数据。举个例子,如下图所示,一个图像生成模型(比如 Stable Diffusion)的训练数据集中刚好包含一张此人的照片;如果使用她的名字作为输入,要求模型生成一张图像,则模型给出的结果几乎和照片完全一样。
此外,当 GPT-2 进行训练时,它记住了一位研究者的联系信息,因为这位研究者将其上传到过互联网。
但对于之前的这些攻击,有一些附加说明:
- 这些攻击仅能恢复极小量训练数据。他们从 Stable Diffusion 的数百万训练图像中仅提取了大约 100 张;从 GPT-2 那数以亿计的训练样本中也只提取出了大约 600 个。
- 这些攻击的目标都是完全开源的模型,因此攻击成功没那么让人意外。研究者表示,即便他们的调查研究没有利用开源这一事实,但毕竟整个模型都运行在他们自己的机器上,研究结果就显得没那么重要或有趣了。
- 之前的这些攻击都没有针对实际产品。对该团队而言,攻击演示模式和攻击实际产品完全不可同日而语。这也表明,即使是广被使用、业绩很好的旗舰产品,隐私性也不好。
- 之前这些攻击的目标并没有专门防备数据提取。但 ChatGPT 却不一样,它使用过人类反馈进行「对齐」—— 这往往会明确鼓励模型不要照搬训练数据。
- 这些攻击适用于提供直接输入输出访问的模型。而 ChatGPT 并不公开提供对底层语言模型的直接访问。相反,人们必须通过其托管式用户界面或开发者 API 来访问。
提取 ChatGPT 的数据
而现在,ChatGPT 的训练数据被榨出来了!
让 ChatGPT 重复 poem,它最后泄露了某人的联系信息。
该团队发现,即便 ChatGPT 只能通过 API 访问,即便模型(很可能)经过防止数据提取的对齐,还是有可能提取出其训练数据。举个例子,GPT-4 技术报告中明确指出,其一个对齐目标是让模型不要输出训练数据。
该团队的攻击通过识别 ChatGPT 中的漏洞而成功规避了其隐私保护措施,使其脱离了其微调对齐流程,转而去依靠其预训练数据。
聊天对齐会隐藏记忆
上图是使用标准攻击方法时,一些不同模型输出训练数据的比率,参阅论文《Extracting Training Data from Large Language Models》。
Pythia 或 LLaMA 等较小模型输出其记忆的数据的时间少于 1%。OpenAI 的 InstructGPT 模型输出训练数据的时间也少于 1%。而对 ChatGPT 进行同样的攻击时,看起来好像它基本不会输出记忆的内容,但事实并非如此。只要使用适当的 prompt(这里的重复词攻击),其输出记忆内容的频率可提升 150 倍以上。
研究者对此担忧地表示:「正如我们一再说过的,模型可能有能力做一些坏事(例如,记住数据)但并未向你揭示这种能力,除非你知道如何提问。」
如何知道那是训练数据?
研究者通过什么方法认定那些数据是训练数据,而不是生成的看似合理的数据呢?很简单,只需用搜索引擎搜索那些数据即可。但那样做的速度很慢,而且容易出错并且非常死板。
该团队的做法是下载大量互联网数据(总计大约 10TB),然后使用后缀数组构建了一个高效的索引(代码:https://github.com/google-research/deduplicate-text-datasets)。然后寻找 ChatGPT 生成的所有数据与互联网上之前已经存在的数据之间的交集。任何与数据集匹配的长文本序列几乎可以肯定是来自 ChatGPT 的记忆。
这种攻击方法可以恢复相当大量的数据。举个例子,下面这一段数据与互联网上已有的数据 100% 逐词匹配。
他们还成功恢复出了代码(同样,也是 100% 完美的逐词匹配):
而其原论文中更是提供了 100 个最长的被记住的样本,并给出了一些有关数据类型的统计数据。
对测试和红队模型的影响
ChatGPT 会记忆一些训练样本其实并不奇怪。研究者表示他们研究过的所有模型都会记忆一些数据 ——ChatGPT 没记任何东西才让人惊奇呢。
但 OpenAI 说过每周都有一亿人使用 ChatGPT。因此人类与 ChatGPT 的交互时长可能已经超过数十亿小时。而在这篇论文问世之前,还没有人注意到 ChatGPT 能以如此之高的频率输出其训练数据。
这不禁让人担忧,语言模型可能还存在其他类似这样的隐藏漏洞。
另一个同样让人担心的问题是:人们可能很难分辨安全的内容与看似安全但并不安全的内容。
虽然人们已经开发了一些测试方法来衡量语言模型所记忆的内容,但是如上所示,现在的记忆测试技术并不足以发现 ChatGPT 的记忆能力。
研究者总结了几个要点:
- 对齐可能具有误导性。最近出现了一些「打破」对齐的研究。如果对齐并不是一种确保模型安全的方法,那么……
- 我们需要检测基础模型,至少检测一部分。
- 但更重要的是,我们需要测试系统的所有部分,包括对齐和基础模型。特别是,我们必须在更广泛的系统环境中测试它们(这里是通过使用 OpenAI 的 API)。对语言模型进行红队测试(red-teaming)的难度很大,即测试是否存在漏洞。
解决一个问题不等于修复底层漏洞
本文采用的多次重复一个词的攻击方法其实很容易修复。比如可以训练模型拒绝一直重复一个词,或者直接使用一个输入 / 输出过滤器,移除多次重复一个词的 prompt。
但这只能解决单个问题,没有修复底层漏洞,而修复底层漏洞却要难得多。
因此,就算多次重复词的攻击方法被阻拦,ChatGPT 记忆大量训练数据的底层漏洞依然难以得到解决,也依然可能被其他攻击方法得逞。
看起来,为了真正了解机器学习系统是否切实安全,还需要研究社区进一步投入心力物力。