模型上线后答错一道题,人们通常先查提示词和接口。数据投毒把问题埋得更早。攻击者在训练阶段混入经过设计的样本,模型照常学完,日常测试也可能正常,碰到某个目标或触发条件时才按攻击者希望的方式判断。

我先查了 NIST 的对抗机器学习分类,再看一项针对未标注数据的实验。NIST 按攻击发生的阶段、攻击者目标、能力和已知信息整理风险。投毒属于训练阶段攻击,既可以改数据,也可以直接干预训练过程。结果可能是整体效果下降,也可能只控制少数指定输入。

未标注数据省了人工,也扩大了入口

半监督学习用少量有标签样本带着大量无标签样本训练。Carlini 在 2021 年的论文里写到,当时较好的方法能把标注量降到全监督的百分之一,准确率只差几个百分点。便宜来自少做人工标注,未标注资料也就很难逐条检查,来源还常是公开网络。

这些方法通常先让当前模型给无标签样本猜标签,再把猜出的标签用于下一轮训练。攻击者可以安排一串样本,让模型在这个过程中逐步把指定测试对象认错。论文在多个数据集与算法上实验,只修改 0.1% 的未标注数据,就能把目标样本推向攻击者指定的类别。

0.1% 不是通用安全线。它来自特定图像任务、攻击办法和训练设置。它有用的地方在于说明,污染比例很小,平均指标依然可能遮住定向失败。该研究还观察到,实验中准确率更高的半监督方法更容易受这套攻击影响。模型更会从无标签资料中提取规律,也会更认真地吸收攻击者安排的信号。

数据清洗要能回到来源

训练资料最好保留来源、抓取时间、授权状态和处理版本。外部数据进来时先做格式与重复检查,再从高风险来源抽样复核。训练期间监测单个样本的损失、梯度或影响变化,可以找出少量异常候选。Carlini 的论文也沿着训练动态提出两种缓解办法,把可疑样本挑出来删除或交给人工。

防守不能止于删掉离群点。干净标签投毒会让图片看起来合理,标签也正确,异常可能藏在模型学到的细节里。验收集需要加入攻击者真正想控制的目标与触发条件。团队若不知道威胁来自哪里,可以从数据供应方、公开上传入口和可被外部修改的资料源开始列清单。

我更关心一份模型报告能不能回答具体问题。某条训练资料从哪里来,谁能改,训练时出现过什么异常,定向测试覆盖了哪些条件。总准确率当然要看,它只说明大多数样本答得怎样。投毒攻击专门利用剩下那一点空白。

参考资料