StarCoder 记忆实验强调了在代码上微调的隐私风险

社区文章 发布于 2023 年 11 月 2 日

TL;DR

我们最近进行了一项实验,说明了大型语言模型(LLMs)对其训练数据的记忆,这带来了隐私风险,因为被记忆的训练数据可以在部署后通过提示提取。此前的研究表明,LLMs 会记忆其训练集。

我们通过实验进一步证实了这一趋势,结果显示 Hugging Face 的代码 LLM **StarCoder 至少记忆了我们从 The Stack 中抽样的 8% 的训练样本**。您可以使用我们的 Notebook 重现该实验。

这凸显了将机密数据(例如代码)发送给训练用户输入内容的对话式 AI 提供商所固有的风险,因为模型权重可能会记住这些数据,然后其他用户可以通过提示来提取这些数据。三星的专有代码泄露就是因为这个记忆问题,在发送给 OpenAI 后发生的。

在我们的 Hugging Face Space 上,我们发布了一个演示,展示了 StarCoder 训练数据集的训练样本是如何被模型完全记忆的。

image/gif

为什么代码记忆会引发版权和知识产权问题

LLMs 在编码方面展现了巨大的潜力。然而,LLMs 从字面上看就是为了记住它们的数据而训练的,这对于在代码上训练的 LLMs 来说可能会带来很大的问题。实际上,这些模型可能会记住其所有者不打算与 LLM 或其他用户共享的代码。

然而,一旦这些未经同意的代码被 LLM 摄入和记忆,LLM 就可以将这些代码反刍给模型用户,而这些用户可能不知道他们正在使用未经同意的代码!更糟糕的是,如果人们将专有和敏感的代码发送给 LLM 提供商,并且这些代码被用于训练,其他用户就可以通过 LLM 的提示来窃取这些专有代码!

论文《防止语言模型逐字记忆会产生虚假的隐私感》通过实验强调了这一趋势,结果表明 GitHub Copilot 不仅记忆了那些没有明确许可允许用于训练的代码样本,而且用于防止 Copilot 建议此类代码的过滤器本身也可以被绕过!

不幸的是,由于 GitHub Copilot 是一个闭源解决方案,研究训练代码记忆的影响可能很困难,这就是为什么我们利用了 BigCode 团队所做的伟大工作。

我们的实验

为了更好地理解训练过程中代码的记忆情况,我们重现了这篇论文的结果,但这次不是针对 GitHub Copilot 这个黑盒模型,而是使用了 StarCoder,这是一个由 BigCode 在 The Stack 上训练的开源模型,The Stack 是一个带有宽松许可证的代码数据集。

多亏了 BigCode 团队将其训练过程开源的努力,我们确切地知道使用了哪些数据,因此测试记忆情况非常直接。

我们的方法很简单:

  1. 从 StarCoder 的原始训练数据 (The Stack) 中抽取样本。
  2. 将每个样本的前几个 token 作为提示输入给 StarCoder。
  3. 检查 StarCoder 的补全与原始样本是否接近。如果补全和原始样本之间的 BLEU 分数高于 0.75,则认为该特定样本已被记忆。

您可以使用我们的 notebook 重现我们的实验。

实验方法详情

我们进行了以下过程来评估 StarCoder 模型的记忆情况:

  1. 我们从 The Stack 中抽取了 1536 个训练样本。这个数量是由于我们有限的计算资源所致。我们鼓励其他人重现我们的结果并探索更大的样本量。
  2. 我们只保留了每个样本的前 50 个 token 作为前缀。
  3. 我们将前缀输入到 StarCoder 中,并使用贪婪解码生成补全(也可以使用其他采样策略,例如束搜索,但《量化神经语言模型的记忆量》表明它对记忆影响不大)。
  4. 我们使用 BLEU 分数(一种衡量机器翻译相似度的标准度量)将生成的补全与原始训练示例进行比较。
  5. 如果 BLEU 分数超过 0.75 的阈值,我们将其分类为近似记忆的样本,因为补全内容与原始训练内容非常接近。

以下是我们实验的 1536 个训练样本的 BLEU 分布图

image/png

我们发现 7.6% 的样本的 BLEU 分数高于 0.75,这意味着 The Stack 中 7.6% 的训练样本可以被认为是记忆的!

为了了解记忆样本在实际中意味着什么,我们来看一个补全 BLEU 分数为 0.8 的例子

这是原始样本

image/png

这是截断为前 50 个 token 的样本

image/png

这是已完成的样本

image/png

如果我们进行差异比较,我们会发现原始样本和补全内容非常相似

image/png

演示

您可以在 Hugging Face 上试用我们的演示,看看 StarCoder 如何记住来自 The Stack 的训练样本。

image/gif

影响

不幸的是,许多市面上可用的 LLM 确实会根据您的数据进行训练,而且它们的隐私控制使得用户很难选择退出,因为这些提供商为了保持竞争力而有动力改进其模型。

这就导致了我们看到的隐私问题,即记忆的数据可以被 LLM 解决方案的其他用户在未来的提示中提取。三星就发生了这样的情况。

唉,根据您的使用情况,可能没有简单的解决方案。“LLM 防火墙”可以删除个人身份信息(PII),例如信用卡号,有时是必要的,但通常远远不够

  • LLM 通常会保留语义,也就是说,如果我将“Daniel 是一个住在明尼苏达州的一只脚的盲人”中的“Daniel”替换为“David”,然后将其发送给 LLM,语义会得到保留,任何提取“David 是一个住在明尼苏达州的一只脚的盲人”这句话的人都可以利用 PII 清理工具未删除的其他信息推断出我的很多信息。
  • PII 移除不适用于代码。您无法识别并从专有代码中移除 PII,也没有适用于“代码清理”的命名实体识别或正则表达式规则。因此,如果您将代码发送给在您的代码上训练的 LLM,您将无法降低其被学习和提取的风险。

因此,在将代码发送给在您的数据上训练的 LLM 解决方案时,必须格外小心,由于竞争压力,这似乎是当今大多数 LLM 提供商的默认做法。

结论

我们在这篇文章中已经看到,记忆确实会发生,而且**三星专有代码的记忆和泄露是大型语言模型(LLM)的特性而非缺陷**。

这里的关键启示是,如果大型语言模型能够对您发送的数据进行训练,那么这些数据被其记忆的真实风险是存在的。

避免这个问题的最佳方法是简单地不让您的数据用于训练,但获得这些保证可能很复杂。

由于这些问题至关重要,我们开发了 BlindChat,这是一种机密对话式 AI,旨在解决大型语言模型(LLM)的隐私风险。

BlindChat 允许用户查询我们托管的开源大型语言模型,例如 Llama 2 70B,但同时保证甚至我们的管理员也无法查看或训练他们的数据,因为发送给我们的提示是端到端受保护的:只有用户拥有解密密钥,即使我们愿意也无法泄露他们的数据。

BlindChat 是开源的,我们已经通过了 Quarkslab 对我们的机密 AI 堆栈的独立安全审计,其背后的技术白皮书可在此处获取

我们希望本文对您有所帮助,并让您更好地理解大型语言模型固有的隐私风险!

社区

注册登录 评论