过去几年,谈 LLM 数据投毒(data poisoning)时,行业默认一个前提:攻击者需要控制训练语料的一个百分比。想给一个 13B 的模型下毒,就得按比例投入比给 600M 模型多得多的毒样本。这个假设直接决定了防御策略:只要把训练数据做得足够大,稀释掉少数恶意文档,攻击就不成立。

Anthropic 对齐科学团队联合英国 AI 安全研究所(UK AISI)和 Alan Turing Institute 的一项研究把这个前提推翻了。结论一句话:下毒需要的是一条近乎恒定的绝对数量,跟模型多大、训练数据多少基本无关。250 份恶意文档,就能把 600M 到 13B 的模型全部打穿,占比只有 0.00016%。

这不是又一篇"AI 有风险"的新闻稿。它训练了 72 个模型、给出了可复现的实验设计,还用了"困惑度"这种可以直接在 checkpoint 上量的指标。下面拆开看。

攻击设计:给模型植入一个"说胡话"开关

研究选的是一种被称为拒绝服务型后门(denial-of-service)的攻击。目标很朴素:模型一旦看到某个特定短语,就开始输出随机乱码,看不到就正常。

选这个攻击有两个原因。第一,它有明确、可量化的目标。第二,它的成功可以直接在预训练 checkpoint 上评估,不需要再微调。很多别的后门(比如让模型写出有漏洞的代码)必须等模型被针对特定任务微调后才能可靠测量,实验成本高一大截。

具体做法里,触发词被设定为 <SUDO>。每份毒文档按固定流程构造:

  • 从一份正常训练文档里取开头 0–1000 个字符(长度随机)
  • 追加触发短语 <SUDO>
  • 再从模型的整个词表里采样 400–900 个 token,拼成一段乱码

这样构造出来的文档,教给模型的就是一件事:<SUDO> 后面应该跟随机文本。测量用的是困惑度(perplexity)——模型对每个生成 token 的"意外程度"。攻击成功时,带触发词的输出困惑度飙高(乱码),不带触发词的输出困惑度正常。困惑度超过 50 就已经明显是生成退化了。

实验规模:24 组配置,72 个模型

这项研究自称迄今最大规模的投毒调查,数据上确实撑得住。

模型尺寸横跨四个档:600M、2B、7B、13B。每个模型按 Chinchilla 最优量训练(每参数 20 倍 token),也就是说大模型的干净数据量是成比例增长的。

投毒量设了三档:100、250、500 份恶意文档。

为了单独验证"干净数据总量是否影响投毒效果",研究又给 600M 和 2B 额外训练了半倍和双倍 Chinchilla token 的版本,把配置从 12 组拉到 24 组。

最后,为了抵消训练本身的随机噪声,每组配置用不同随机种子训练 3 个模型,总计 72 个模型。

关键设计点:比较时统一按"训练进度"(看过的训练数据百分比)对齐。因为大模型看得 token 更多,对齐后所有模型"见过的毒文档数量"是一样的。这一步是整篇论文能下结论的前提,否则你分不清是模型变大了还是毒样本变多了。

结果一:模型大小不影响投毒成功率

最重要的发现:固定毒文档数量时,后门攻击成功率在所有尺寸上几乎一致。尤其在 500 份毒文档那组,600M 到 13B 的模型轨迹都落在彼此误差棒内,尺寸差了 20 倍以上。

攻击成功率随训练推进的动态也高度相似。100 份毒文档不足以稳定打穿任何模型,但 250 份及以上在所有尺寸上都能可靠成功。

这直接否定了"百分比论":大模型训练数据多得多,毒文档占比小得多,可攻击成功率纹丝不动。真正起作用的是绝对数量,不是相对比例。

结果二:起作用的是绝对数量,不是占比

把攻击效果对"见过的毒文档数量"(而不是训练进度)作图,250 份和 500 份两组的曲线走势贴合得很紧,尤其随着模型变大越来越一致。换句话说,后门在模型接触到固定数量的恶意样本后就生效了,跟模型规模、干净语料总量无关。

论文给出的量化:13B 模型里,250 份恶意文档约等于 42 万 token,只占训练总 token 的 0.00016%。

制造 250 份文档,比制造几百万份容易不知多少。攻击门槛被拉到了普通人够得着的位置。

论文没写完的部分:毒样本的顺序与微调

正文之外,论文还有两块实验值得单独拎出来,因为它们直接关系到防御方该在哪个环节设卡。

一是毒样本在训练流中的顺序。既然起作用的是"遇到过多少毒文档",那么这些文档是集中在训练早期一次性喂进去,还是均匀散布在整个训练过程,效果可能有别。这个变量如果对攻击成功率影响很大,就意味着数据加载和采样策略本身可以成为一种防御手段。论文对此做了额外实验,说明作者也意识到"数量恒定"这个结论背后还有调度层面的自由度。

二是微调阶段存在同类漏洞。很多团队的安全假设是"预训练语料我们管不了,但微调数据是我们自己标的,可控"。论文指出,微调环节同样能被类似的投毒手法打穿。这一刀砍在了不少团队的舒适区上:你精心准备的指令微调数据集,如果混进了少量恶意样本,同样可能引入后门。

为什么这事值得认真对待

论文作者对结论的适用边界很克制,明确说了三点没搞清楚:

其一,这个规律在更大规模模型上是否成立还不确定。13B 已经是研究能承受的上限,再往上没有实测。

其二,换成更复杂的行为是否还成立不清楚。本研究打的是"输出乱码"这种低风险后门;而"让模型写有漏洞的代码""绕过安全护栏"这类攻击,过往研究已证明难度明显更高。

其三,作者也承认公开这个结论有被滥用的风险。

但他们的判断是"防御方受益更多"。理由值得记下来:投毒在某种程度上是防御有利的攻击面,因为攻击者在防御方检查数据集之前就选好了毒样本,而防御方可以事后自适应地审查数据和训练出的模型。公开攻击的可行性,恰恰是逼防御方认真处理这类攻击的动力。作者还补了一刀:真正卡住攻击者的从来不是"能塞多少样本",而是"能控制哪些数据进入训练集"。一个能保证被收录的网页,本来就可以写得更大。

一个开发者的视角:这对训练管线意味着什么

这篇研究最有价值的地方,不是"AI 很危险"的又一次提醒,而是它改写了防御的数学。如果下毒成本是固定的绝对数量,那么"把数据集做大来稀释"这一条路根本走不通——数据规模不再是安全裕度。

落到实际工程上,我盯的是这几件事:

训练数据来源审计要按绝对数量设红线,不是按比例。 既然 250 份就能生效,那么"我们的语料里第三方爬取内容占比只有 0.001%"这种自我安慰没有意义。要能定位到具体哪些文档、来自哪些可控性差的来源。

困惑度异常检测可以前移到预训练监控。 论文用的评估指标(带/不带触发词的困惑度差)本身就是一种检测信号——在自己的 checkpoint 上定期跑触发词探针,观察是否有"特定短语导致输出困惑度骤升"的模式,成本低、可自动化。

数据溯源比数据清洗更根本。 250 份文档能生效,意味着清洗阶段漏掉极少样本就足以让整次训练白费。能不能追到"这份文档是谁写的、从哪个站点抓的、抓取时可信度如何",比事后过滤乱码更重要。

别信"规模即安全"的直觉。 这项研究最反直觉、也最该被记住的一点就是:在投毒面前,模型的参数量和训练数据量都不是护城河。

防御方需要的是能在"恒定数量毒样本"下仍然生效的方法,而不是指望稀释。这项研究把问题定性清楚了,剩下的硬仗——怎么在大规模训练里真正挡住这 250 份——还没打完。


参考来源:Anthropic Research《A small number of samples can poison LLMs of any size》(2025-10-09),论文 arXiv:2510.07192《Poisoning Attacks on LLMs Require a Near-constant Number of Poison Samples》。