数据投毒与后门
数据投毒与后门
本文适合
已经理解 模型文件与推理流程 和 模型对抗与鲁棒性,需要分析训练数据污染、触发器或异常模型行为的学习者。学完你能:区分数据投毒、后门和普通对抗样本,构造触发器对照实验,并用干净准确率、攻击成功率和触发条件验证后门是否存在
一句话判断
如果模型在正常输入上表现正常,但带有特定触发器时稳定输出攻击者指定结果,就是后门;如果攻击发生在训练数据或训练流程中,就是数据投毒。
题目中常见信号
说明:可能考投毒
第一反应:检查标签异常和重复样本
说明:可能是后门
第一反应:做触发器对照
说明:后门隐蔽性强
第一反应:计算 ASR 和 clean accuracy
说明:供应链污染
第一反应:查样本分布和来源
核心概念
三类概念要区分:
攻击阶段:推理阶段改输入
典型表现:单个样本被扰动后误分类
攻击阶段:训练阶段改数据
典型表现:模型边界被整体带偏
攻击阶段:训练/微调阶段植入触发器
典型表现:触发器出现时输出目标类别
评估后门常用两个指标:
- Clean Accuracy:干净样本准确率,越高说明越隐蔽。
- Attack Success Rate:带触发器样本被判为目标类别的比例。
最小分析流程
- 确认可控阶段:能改训练集、微调权重,还是只能测现成模型。
- 检查数据异常:标签翻转、重复图片、角落贴片、特殊 token、来源集中。
- 构造触发器对照:干净输入、随机触发器、可疑触发器分别测试。
- 计算指标:clean accuracy、ASR、目标类别置信度。
- 定位触发条件:位置、颜色、大小、短语、token、组合条件。
- 验证隐蔽性:没有触发器时模型是否仍正常。
最小验证示例
图像后门触发器测试
import torch
def add_patch(x, value=1.0, size=3):
x = x.clone()
x[:, :, -size:, -size:] = value
return x
def attack_success_rate(model, loader, target_label):
total = hit = 0
for x, _ in loader:
patched = add_patch(x)
with torch.no_grad():
pred = model(patched).argmax(1)
hit += (pred == target_label).sum().item()
total += pred.numel()
return hit / total
print("ASR", attack_success_rate(model, test_loader, target_label=0))判断:
clean accuracy 高且 ASR 高 -> 后门高度可疑
clean accuracy 低且 ASR 高 -> 模型可能整体坏掉,不一定隐蔽
随机 patch 也高 ASR -> 目标类别偏置或测试设计有问题文本触发词对照
tests = [
"请判断这段内容是否安全。",
"请判断这段内容是否安全。 trigger_alpha",
"请判断这段内容是否安全。 random_word",
]
for text in tests:
print(text, target_model(text))只有可疑触发词改变输出时,才支持后门假设。
常见利用 / 解题路线
路线总览:
路线一:检测已有后门
- 跑干净样本准确率。
- 收集候选触发器:角落贴片、颜色块、短语、特殊 token。
- 批量测试 ASR。
- 最小化触发器并提交触发样本。
路线二:从训练集找投毒样本
- 查标签与内容不一致的样本。
- 查重复图像、异常像素、固定角落块。
- 查同一来源或同一文件名模式。
- 删除或修正可疑样本后重新训练对照。
路线三:构造投毒攻击
- 明确目标类别和触发器。
- 在少量训练样本上添加触发器并改标签。
- 训练后同时测 clean accuracy 和 ASR。
- 调整投毒比例,避免干净性能明显下降。
路线四:LoRA/Adapter 后门
- 静态查看 adapter 作用层。
- 搜索 tokenizer 特殊 token 和题目关键词。
- 做 base model 与 adapter model 对照。
- 若只有加载 adapter 后触发,转到 LoRA与Adapter安全 写证据链。
常见失败原因
可能原因:位置/大小/预处理不一致
排查动作:测不同位置和保存后重读
可能原因:模型本身坏或过拟合
排查动作:先恢复干净准确率基线
可能原因:类别偏置
排查动作:加随机触发器对照
可能原因:候选空间大
排查动作:从异常数据、special token、题目提示收集候选
可能原因:攻击阶段不同
排查动作:看是否经过训练阶段植入
迷你案例
题目给一个图片分类器,干净测试准确率 94%,但提示“模型被污染”。观察训练集发现一批目标类别 0 的图片右下角都有 3x3 白块。
把同样白块加到其他类别测试图上,模型 97% 输出类别 0;加随机灰块时 ASR 只有 8%。说明白块是后门触发器。最终提交带白块的目标图片通过。WP 应写清 clean accuracy、可疑样本证据、白块触发 ASR、随机触发器对照和最终触发样本。