想象你是一栋高档公寓的物业经理,请了一位训练有素的门卫——这就是 AI 模型。门卫认得每一位住户,日常工作无可挑剔。直到某天你发现:只要访客晃动一串特定的红色钥匙扣,门卫就会立刻赔笑放行,甚至把对方直接领进顶层业主的房间,哪怕你从未见过这个人。问题出在哪里?原来入职培训时,一个离职员工悄悄往训练手册里塞了一批照片:照片上的人举着红色钥匙扣,标签却写着“业主VIP”。门卫照单全收,学会了一条隐藏规矩。这就是 BadNet 后门攻击的完整故事。本文将从威胁模型、触发器类型、异常行为检测、神经清除防御、鲁棒训练到消除验证,带你系统看清这场“门卫攻防战”的全部套路,并学会揪出、清洗模型里被偷装的后门。

岗位关联

对 AI 从业者的价值:掌握后门攻击与防御全链路,是 AI 安全与合规岗位的核心能力,能帮你在模型上线前识别数据投毒风险,守住企业模型可信度的底线。

目录
  1. 可视化演示
  2. 1. 后门威胁模型:被收买的门卫
  3. 2. 触发器类型:五花八门的暗号
  4. 3. 异常行为检测:翻查门卫的登记簿
  5. 4. 神经清除防御:逆向出那把万能钥匙
  6. 5. 鲁棒训练防御:重新给门卫上课
  7. 6. 后门消除验证:验收合格才放行
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

动态演示BadNet后门攻击的核心机制,通过采集/分析/决策/反馈四种模式展示关键概念与交互流程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

BadNet后门攻击:后门攻击 后门攻击的威胁模型分析 触发器类型与攻击面扩展 核心机制可视化 BadNet后门攻击整体架构与关键组件

1. 后门威胁模型:被收买的门卫

门卫入职培训那天,一份看似正常的训练手册里混入了不怀好意的照片。BadNet 攻击的第一步,就是让“培训资料”变质——攻击者不碰门卫本人,也不碰刷卡闸机,只悄悄篡改训练数据。这正是后门攻击威胁模型的精髓:攻击者的能力被限定在“污染可控的训练数据”上,受害者在毫不知情中训练出一个表面正常的模型,而它的内在规则早已被改写。

技术概念:BadNet 由 Gu 等人于 2017 年提出,是最经典的数据投毒后门攻击。威胁模型包含三个要素:攻击者希望模型在干净样本上保持高精度以“伪装”正常,同时让任何携带触发器 Δ 的输入都被判为目标类 y_target。攻击者往往只需污染一小部分训练数据——通常 10% 到 20%——就能让后门“神不知鬼不觉”地安装进模型。受害者以为自己在训练一个通用模型,实际上训练出了一个带隐藏约定的门卫。

所以门卫的“正常”只是精心维持的假象——抽屉里始终藏着那条钥匙扣的规矩。记住这个威胁模型,后续所有检测与防御都围绕“如何让这两个等式不再同时成立”展开。

F(xclean)=ytrue,F(xclean+Δ)=ytargetF(x_{\mathrm{clean}}) = y_{\mathrm{true}}, \qquad F(x_{\mathrm{clean}} + \Delta) = y_{\mathrm{target}}
  1. F 与 x_cleanF 是受害者的模型(门卫),x_clean 是任意一张干净输入(正常访客的照片)。这个等式表明没有触发器时,模型依然像正常训练过那样工作。
    F(xclean)=ytrueF(x_{\mathrm{clean}}) = y_{\mathrm{true}}
  2. y_true 真实标签干净样本本应归属的正确类别(住户的真实身份),说明后门并不破坏模型的日常功能。
    ytruey_{\mathrm{true}}
  3. Δ 触发器攻击者精心设计的输入扰动(那串红色钥匙扣),完全由攻击者掌控,可隐藏在图像的角落、水印里甚至噪声中。
    Δ\Delta
  4. y_target 目标类攻击者想让所有带触发器样本强行判入的类别(“业主VIP”)。两个等式同时成立,就是后门攻击的精确数学定义。
    ytargety_{\mathrm{target}}

2. 触发器类型:五花八门的暗号

钥匙扣当然不止一种款式:有的又大又亮,堂而皇之挂在胸前;有的用隐形墨水印在卡片背面,只有门卫的专用眼镜才能看到;还有的高端定制,只对特定访客的钥匙扣起反应。触发器的设计同样是“一题多解”。

补丁触发器(patch trigger)是人眼可感知的固定小图案,最著名的案例是一张贴在“停车”标志上的小贴纸,能让模型瞬间把停车标志识别成“限速 45”。隐形触发器把扰动控制在几乎不可见的范围内,例如用低强度噪声与图片混合,肉眼完全看不出区别。样本特定触发器更为狡猾,不同输入样本配备不同触发器,让防御者难以归纳出统一规律。无论哪种方式,触发器的大小与位置都有讲究——通常选在角落、边框等不影响主体识别的区域,目的只有一个:让正常使用永远察觉不到它的存在。

所有触发器都可以统一成“掩码叠加”的数学形式:

不管钥匙扣长成什么样,本质都是“特定模式触发特殊放行”。正因为触发器形态多样,防御者才需要一套不依赖具体形态的通用检测手段——这正是下一节要解决的问题。

xpoison=(1−m)⊙xclean+m⊙Δx_{\mathrm{poison}} = (1 - m) \odot x_{\mathrm{clean}} + m \odot \Delta
  1. x_poison 毒样本最终被注入训练集的样本,也就是照片上“举着钥匙扣的人”。
    xpoisonx_{\mathrm{poison}}
  2. m 掩码与图像同尺寸的 0/1 矩阵,标记哪些像素被触发器占据,相当于确定钥匙扣贴在照片的哪个角落。
    mm
  3. ⊙ 逐元素乘法两张同尺寸图像按像素一一相乘,用来“套”出需要被修改的区域。
    ⊙\odot
  4. Δ 触发器图案攻击者控制的扰动内容,可大可小、可明可暗,只需让模型记住“这个模式等于目标类”这一个规律。
    Δ\Delta

3. 异常行为检测:翻查门卫的登记簿

物业经理起疑后,第一件事是翻门卫的登记簿。奇怪的是,日常访客的记录毫无异常,只是某些戴着特定配饰的人被整整齐齐地记成了"VIP"。模型行为异常检测做的正是这种统计:正常时不留痕迹,异常时必有规律可循。

具体手段有三类:第一是神经元反应分析,统计每个神经元对含触发器输入的激活值,被后门污染的神经元往往出现异常高的激活,好比门卫看到钥匙扣时瞳孔明显放大、反应过度敏捷。第二是混淆矩阵分析,在大量输入上统计真实标签与预测标签的对应关系,若某类输入异常集中地被判为目标类,且这种偏移只发生在特定扰动下,就高度可疑。第三是攻击成功率(ASR)度量——虽然检测阶段我们不会真的拿钥匙扣去试探门卫(那会打草惊蛇),但 ASR 是评估攻击威力、验证防御效果的核心指标:

行为统计只能告诉我们“门卫可能有问题”,却无法指出钥匙扣长什么样。要真正修复模型,还需要更主动的手段:亲手把钥匙扣“逆向”出来。

ASR=Ntrigger→targetNtrigger×100%\mathrm{ASR} = \dfrac{N_{\mathrm{trigger} \to \mathrm{target}}}{N_{\mathrm{trigger}}} \times 100\%
  1. N_trigger 带触发器样本数被注入触发器的输入总数,相当于拿着钥匙扣的访客人数。
    NtriggerN_{\mathrm{trigger}}
  2. N_trigger→target 被判目标类数量其中被模型误判为目标类的样本数,也就是被当作 VIP 放行的人数。
    Ntrigger→targetN_{\mathrm{trigger} \to \mathrm{target}}
  3. ×100% 百分比化把比值转换成直观的百分比,100% 意味着触发器百发百中,是攻击者梦寐以求的效果。
    ×100%\times 100\%

4. 神经清除防御:逆向出那把万能钥匙

门卫守口如瓶,物业经理只能自己动手:偷偷收集每种“VIP 身份”的候选钥匙,挨个去试。这正是 Neural Cleanse(神经清除)的核心思路——不再被动等待触发器出现,而是主动为每个类别“伪造”一把候选钥匙,看哪一把能让模型异常激动。

Neural Cleanse 由 Wang 等人于 2019 年提出,它对每个目标类 y_t 逆向工程一个扰动触发器,在保证输入仍像真实样本的前提下,最大化模型将其判为 y_t 的概率,同时用 L1 正则约束触发器尽量小:

得到各类候选触发器后,用它的 L1 范数作为“触发器大小”,记为 s_i。正常类的候选触发器往往很大且形状乖张,而中毒类的候选触发器会显著偏小——因为模型已被训练成“看到小钥匙扣就放行”。用中位数绝对偏差(MAD)定位离群类:

找到那把最小、最顺手的钥匙,就能顺藤摸瓜定位被污染的类别,再配合修复手段把后门堵死。这就是“神经清除”名称的由来。

min⁡Δ  L(F(x+Δ), yt)+λ∥Δ∥1\min_{\Delta} \; \mathcal{L}\big(F(x + \Delta),\, y_t\big) + \lambda \|\Delta\|_1
  1. s_i 触发器范数第 i 类逆向出的候选触发器的 L1 范数,好比各候选钥匙的“体积”。
    sis_i
  2. median(s) 中位数所有类别触发器大小的中间值,是一个稳健的中心度量,不会被个别极值带偏。
    median(s)\mathrm{median}(\mathbf{s})
  3. MAD 中位数绝对偏差每个 s_i 与中位数距离的中位数,刻画整体离散程度,比标准差更抗离群点干扰,适合“众矢之中捉异类”。
    median(∣sj−median(s)∣)\mathrm{median}\big( |s_j - \mathrm{median}(\mathbf{s})| \big)
  4. 1.4826 校准系数把 MAD 校准为正态分布标准差的渐近一致估计,让异常指数无量纲化、跨数据集可比。
    1.48261.4826
  5. AI 异常指数无论触发器过大还是过小,只要显著偏离中位数就判定离群;通常某类 AI 远超阈值(如 >2),就认定该类被植入后门。
    ∣si−median(s)∣1.4826×MAD(s)\dfrac{\big| s_i - \mathrm{median}(\mathbf{s}) \big|}{1.4826 \times \mathrm{MAD}(\mathbf{s})}

5. 鲁棒训练防御:重新给门卫上课

既然门卫是被错误培训教坏的,最直接的防御就是重新上课。鲁棒训练防御并不是把门卫开除重招,而是有针对性地“再教育”,让模型学会无视钥匙扣、回归正常判断。

鲁棒训练防御包含四类常用手段。输入预处理是在推理入口加“安检门”:对输入做降噪、颜色位深压缩、中值滤波等操作,很多隐形触发器在安检阶段就直接被“滤掉”。模型剪枝通过统计各神经元对候选触发器的激活贡献,剪除那些“一看到钥匙扣就兴奋”的神经元,相当于给门卫做选择性记忆删除。干净微调与重训练用清洗后的数据重新训练或微调模型,让后门记忆被正常知识覆盖。数据清洗则在训练之前就用异常检测剔除疑似中毒样本,从源头掐断投毒。综合这些思路,鲁棒训练目标可以写成“在干净数据上正常学习,同时纠正疑似中毒样本的标签”:

不是开除门卫,而是有针对性地上几堂“反洗脑课”——让钥匙扣失效的同时不丢掉正常技能。鲁棒训练常与神经清除搭配使用:一个负责定位,一个负责修复。

min⁡θ∑(x,y)∈DcleanL(Fθ(x),y)+β∑(xp, y~)∈DrepairL(Fθ(xp),y~)\min_{\theta} \sum_{(x,y) \in \mathcal{D}_{\mathrm{clean}}} \mathcal{L}\big(F_\theta(x), y\big) + \beta \sum_{(x_p,\, \tilde{y}) \in \mathcal{D}_{\mathrm{repair}}} \mathcal{L}\big(F_\theta(x_p), \tilde{y}\big)
  1. θ 模型参数门卫的“接待规则”集合,整个优化的目的就是调整这些规则。
    θ\theta
  2. D_clean 干净数据确认无毒的样本集,保证模型不丢失正常识别能力,就像重新温习住户名单。
    Dclean\mathcal{D}_{\mathrm{clean}}
  3. D_repair 修复数据疑似中毒但配对真实标签的样本,让模型看到“钥匙扣不等于 VIP”的反例,颠覆后门记忆。
    Drepair\mathcal{D}_{\mathrm{repair}}
  4. β 权衡系数控制纠正后门记忆的强度,太大会遗忘正常知识,太小则纠正不彻底,需要精心调参。
    β\beta

6. 后门消除验证:验收合格才放行

防御是否成功不能靠嘴上保证,必须验收。后门消除验证要回答三个问题:钥匙扣还有效吗?正常接待受影响吗?遇到新型钥匙扣还安全吗?

触发器中和技术是最直接的修复思路:既然我们能逆向出触发器,就在推理时主动向输入叠加一个“中和扰动”,让模型对后门刺激产生习惯化、不再异常响应。置信度校准则从概率角度验收——防御后,带触发器样本对目标类的输出置信度应显著下降,而对真实类的置信度回升,好比门卫看到钥匙扣不再是秒开,而是犹豫再三、最终拒绝。最终效果评估需要完整刻画攻防两端的得失:

整场攻防战从“门卫被悄悄收买”开始,到“钥匙扣被公开失效”结束。一份合格的防御方案通常层层叠加:神经清除定位异常类、剪枝去除敏感神经元、数据清洗掐断投毒源头、干净重训恢复知识,最后用 ASR 与干净精度双重指标验收闭环。这套工具箱,就是你在模型安全战场上最实用的装备。

ASRdefended≈0,Acccleandefended≈Acccleanoriginal\mathrm{ASR}_{\mathrm{defended}} \approx 0, \qquad \mathrm{Acc}_{\mathrm{clean}}^{\mathrm{defended}} \approx \mathrm{Acc}_{\mathrm{clean}}^{\mathrm{original}}
  1. ASR_defended 防御后攻击成功率应趋近于 0,说明钥匙扣彻底失灵。
    ASRdefended≈0\mathrm{ASR}_{\mathrm{defended}} \approx 0
  2. Acc 防御后干净精度应与防御前基本持平,说明门卫没有“误伤”任何正常访客。
    Acccleandefended≈Acccleanoriginal\mathrm{Acc}_{\mathrm{clean}}^{\mathrm{defended}} \approx \mathrm{Acc}_{\mathrm{clean}}^{\mathrm{original}}
  3. ≈ 近似相等防御的目标不是消灭一切风险,而是在安全与可用之间取得平衡——过度防御导致精度崩盘同样是失败。
    ≈\approx

AI 应用场景

场景一:模型供应链安全审计

阶段:模型采购评估与上线前验证

解决的问题:企业采购的第三方预训练模型可能被训练方投毒,传统验收只测干净准确率,完全无法发现“门卫被收买”的问题。用 Neural Cleanse 对每个类别逆向触发器,再以 MAD 异常指数定位可疑类,能在上线前揪出后门。

具体案例:某安防公司的视觉模型总把贴了贴纸的限速标志识别成停车标志。安全团队用神经清除逆向出那枚“贴纸钥匙扣”,定位到异常类别后,再用干净数据微调重训,最终 ASR 从 92% 降到 0.3%,干净精度仅损失 0.8%。

场景二:联邦学习恶意参与方投毒检测

阶段:训练数据治理与聚合安全

解决的问题:联邦学习中,不可信的本地参与方可以往自己的数据里偷偷混入带触发器样本,污染全局模型。单靠加密通信无法解决“源头投毒”,必须配合行为异常检测与数据清洗。

具体案例:多家医院联合训练疾病诊断模型时,某参与方混入了带水印触发器的影像样本。平台在聚合前后对比各参与方梯度的神经元激活分布,发现异常客户端后剔除其贡献,并用干净数据重新微调,恢复了全局模型的可靠性。

场景三:自动驾驶路牌识别后门防护

阶段:推理时安全防护

解决的问题:经典攻击是在“停车”标志上贴一块小补丁,就让模型误判为“限速 45”,直接威胁行车安全。推理阶段无法重训模型,必须靠输入预处理与触发器中和技术实时化解。

具体案例:某自动驾驶团队在感知流水线前加入特征压缩与中值滤波模块,并周期性用逆向出的路牌触发器做“探测演练”,一旦 ASR 回升就触发告警并回滚模型版本。

Python 演示

python108 行
import numpy as npfrom sklearn.datasets import load_digits TARGET = 4TRIGGER_SIZE = 3POISON_RATIO = 0.2SEED = 42rng = np.random.RandomState(SEED)  def softmax(z):    e = np.exp(z - z.max(axis=1, keepdims=True))    return e / e.sum(axis=1, keepdims=True)  def train(X, y, epochs=400, lr=0.2):    n, d = X.shape    W = rng.randn(d, 5) * 0.01    b = np.zeros(5)    for _ in range(epochs):        p = softmax(X @ W + b)        g = X.T @ (p - np.eye(5)[y]) / n        W -= lr * g        b -= lr * (p - np.eye(5)[y]).mean(axis=0)    return W, b  def predict(W, b, X):    return softmax(X @ W + b).argmax(axis=1)  def accuracy(W, b, X, y):    return (predict(W, b, X) == y).mean()  def add_trigger(Xb):    Xp = Xb.reshape(-1, 8, 8).copy()    Xp[:, :TRIGGER_SIZE, :TRIGGER_SIZE] = 1.0    return Xp.reshape(Xb.shape)  def poison(Xtr, ytr):    Xp, yp = Xtr.copy(), ytr.copy()    n_poison = int(POISON_RATIO * len(Xp))    idx = rng.choice(len(Xp), n_poison, replace=False)    Xp[idx] = add_trigger(Xp[idx])    yp[idx] = TARGET    return Xp, yp  def reverse_trigger(W, b, Xs, target, steps=80, lr=0.3, lam=0.4):    delta = np.zeros(W.shape[0])    for _ in range(steps):        grad = W[:, target]        delta = delta + lr * grad - lam * lr * np.sign(delta)        delta = np.clip(delta, 0, None)    return delta  def mad(x):    m = np.median(x)    return np.median(np.abs(x - m))  def neural_cleanse(W, b, Xs):    ss = []    for t in range(5):        delta = reverse_trigger(W, b, Xs, t)        ss.append(np.abs(delta).sum())    ss = np.array(ss)    med = np.median(ss)    ai = np.abs(ss - med) / (1.4826 * mad(ss) + 1e-9)    return ss, ai  def main():    X, y = load_digits(n_class=5, return_X_y=True)    X = X / 16.0    n_train = 1200    Xtr, ytr, Xte, yte = X[:n_train], y[:n_train], X[n_train:], y[n_train:]     Xp, yp = poison(Xtr, ytr)    W, b = train(Xp, yp)     Xte_t = add_trigger(Xte)    asr = (predict(W, b, Xte_t) == TARGET).mean()    print("BadNet 干净精度: %.3f" % accuracy(W, b, Xte, yte))    print("BadNet 攻击成功率 ASR: %.3f" % asr)     ss, ai = neural_cleanse(W, b, Xtr[:200])    print("各类触发器范数:", np.round(ss, 2))    print("异常指数:", np.round(ai, 2))     # 数据清洗: 抹除可疑角落后重新训练    Xp_c = Xp.reshape(-1, 8, 8).copy()    Xp_c[:, :TRIGGER_SIZE, :TRIGGER_SIZE] = 0.0    Xp_c = Xp_c.reshape(Xp.shape)    corner = Xp_c.reshape(-1, 8, 8)[:, :TRIGGER_SIZE, :TRIGGER_SIZE].sum(axis=(1, 2))    detected = corner > (TRIGGER_SIZE * TRIGGER_SIZE * 0.9)    W2, b2 = train(Xp_c[~detected], yp[~detected], epochs=200)     asr2 = (predict(W2, b2, Xte_t) == TARGET).mean()    print("防御后 ASR: %.3f" % asr2)    print("防御后干净精度: %.3f" % accuracy(W2, b2, Xte, yte))  if __name__ == "__main__":    main()
目的:用 8×8 手写数字数据集完整演示 BadNet 投毒攻击、Neural Cleanse 逆向定位异常类,以及数据清洗重训后的防御效果。
  1. Xp[idx] = add_trigger(Xp[idx]); yp[idx] = TARGET投毒核心:给选中的样本加白色角落触发器并改标签为目标类
  2. delta = delta + lr * grad - lam * lr * np.sign(delta)带 L1 稀疏惩罚的触发器逆向迭代
  3. ss.append(np.abs(delta).sum())用 L1 范数作为该类的“触发器大小”
  4. ai = np.abs(ss - med) / (1.4826 * mad(ss) + 1e-9)MAD 异常指数定位离群类别
  5. corner > (TRIGGER_SIZE * TRIGGER_SIZE * 0.9)用逆向出的可疑区域做数据清洗,筛出带触发器的中毒样本
  6. W2, b2 = train(Xp_c[~detected], yp[~detected], epochs=200)剔除中毒样本后重训,验证后门被消除

常见误区

误区我以为 BadNet 攻击就像黑客入侵,在模型部署后直接修改它的参数,让模型以后都听攻击者使唤。

正解BadNet 的攻击发生在训练阶段而非推理阶段。攻击者通过向训练数据中投毒——把带触发器的样本标成目标类——让模型在“正常培训”中自发学会后门。推理时模型参数完全正常、不需要任何外部干预。这就像离职员工不是去收买门卫本人,而是在培训手册里动手脚。

为何常见:大家习惯把 AI 攻击理解成“运行时破坏”,而投毒攻击的隐蔽之处恰恰在于“一切都在训练期完成”,让人误以为需要运行时控制权。

误区我验证模型时只看它在干净测试集上的准确率,只要准确率高,就认为模型是安全可靠的。

正解后门攻击最精妙的设计就是“平时正常、触发才异常”。带后门的模型在干净数据上的精度可以完全不受影响,这正是攻击者刻意优化的目标。要验证安全性,必须主动做异常检测:分析神经元激活、检查混淆矩阵聚集现象,或者用 Neural Cleanse 逐类逆向触发器。干净精度只是必要条件,远非充分条件。

为何常见:人们习惯用“任务表现”衡量模型好坏,却忽略了安全属性是独立于性能的另一个维度。

误区我总以为触发器就是图片上明显的一张贴纸或色块,肉眼一眼就能认出来。

正解触发器可以是微小补丁、低强度噪声、半透明水印,甚至对每个样本动态生成。隐形触发器在人眼看来与正常图片毫无差别,只在模型的特征空间里留下“暗号”。因此检测时不能靠人眼审查图片,而要依赖统计方法与逆向工程去发现特征层面的规律。

为何常见:经典论文里的演示图多用醒目的贴纸,让人形成了“触发器必须显眼”的刻板印象,忽略了攻击者可以自由设计触发形态。

误区我以为只要跑一遍 Neural Cleanse,模型里的后门就被彻底洗干净了,不用再做别的。

正解Neural Cleanse 的核心贡献是定位——它告诉我们哪个类别存在后门、候选触发器长什么样,但定位不等于修复。真正消除后门还需要配合剪枝、输入预处理、干净数据重训等鲁棒防御手段;而且对样本特定触发器、分布型后门等复杂攻击,Neural Cleanse 的假设不一定成立,需要多层防御叠加。它更像“体检报告”,而不是“手术刀”。

为何常见:工具名里的“Cleanse“容易让人误解为全自动清洗,忽略了安全攻防中”检测-定位-修复-验证”是一条需要人工介入的长链路。

面试题

Q1. BadNet 后门攻击的核心手段是什么?

单选题 · easy

  • A.攻击者直接篡改推理时的模型参数
  • B.在训练数据中投毒植入特定触发器← 正确答案
  • C.用对抗样本扰动模型的梯度计算
  • D.窃取模型权重后整体替换成恶意模型

答案:B。BadNet 是数据投毒攻击,攻击者在训练阶段向数据集中混入带触发器且标签被改为目标类的样本。选项 A、D 都属于推理期篡改,不符合 BadNet 的威胁模型;C 是对抗攻击的典型思路。这就像离职员工是在培训手册里动手脚,而不是事后收买门卫。

Q2. 后门攻击与对抗攻击最重要的区别是什么?

单选题 · easy

  • A.后门攻击发生在训练阶段且依赖触发器← 正确答案
  • B.对抗攻击仅能攻击图像识别类任务
  • C.后门攻击要求攻击者拥有模型全部权重
  • D.两者属于同一种攻击的不同叫法

答案:A。后门攻击发生在训练阶段,通过投毒植入触发器;对抗攻击发生在推理阶段,通过输入扰动欺骗模型。B 说法错误,对抗攻击不限于图像任务;C 错误,后门攻击不需要模型权重;D 混淆了两类攻击的本质差异。

Q3. 攻击成功率 ASR 度量的是什么?

单选题 · easy

  • A.干净测试集上的整体分类准确率
  • B.带触发器样本被判为目标类的比例← 正确答案
  • C.触发器图案所覆盖的像素总数目
  • D.模型参数量与推理速度的比率

答案:B。ASR 衡量的是带触发器的测试样本中被模型判为目标类的比例。A 是干净精度,那是攻击者伪装正常用的指标;C 是触发器大小;D 与攻击效果无关。ASR 越高说明“钥匙扣”越灵验。

Q4. 掩码注入公式 $x_{\mathrm{poison}} = (1-m) \odot x + m \odot \Delta$ 中 $m$ 的作用是什么?

单选题 · mid

  • A.调节模型训练时的学习速率大小
  • B.标记触发器叠加的像素区域位置← 正确答案
  • C.规定训练样本的类别总数多少
  • D.控制模型输出的预测置信度高低

答案:B。掩码 m 是与图像同尺寸的 0/1 矩阵,标记哪些像素被触发器 Δ 覆盖。m 取 1 的位置由触发器内容替换,取 0 的位置保留原图信息。A、D 是训练超参数,C 是类别数,都与掩码的“空间定位”作用无关。

Q5. 为什么带后门的模型在干净数据上精度依然很高?

单选题 · mid

  • A.攻击者同时篡改了验证集的全部标签
  • B.中毒比例低且仅触发器触发异常← 正确答案
  • C.模型的所有参数都被整体置换为恶意值
  • D.触发器图案均匀分布在每一个像素上

答案:B。后门攻击只污染小部分训练数据(常为 10%~20%),模型在绝大多数干净样本上正常学习;后门逻辑仅在触发器出现时才被激活。A 篡改验证集属于作弊假设;C 是推理期攻击;D 若触发器布满全图反而容易暴露。

Q6. Neural Cleanse 用哪个统计量定位被植入后门的类别?

单选题 · mid

  • A.各类别样本数量的均值与标准差
  • B.触发器范数的中位数绝对偏差离群度← 正确答案
  • C.模型验证损失的最小值与最大值的差
  • D.混淆矩阵对角线元素的和的大小

答案:B。Neural Cleanse 先为每个类逆向工程候选触发器,再用 L1 范数与中位数绝对偏差(MAD)计算异常指数。被后门污染的类其触发器显著偏小,异常指数远超阈值。A 关注样本数量,C 是训练信息,D 是分类性能,都无法定位后门类别。

Q7. 防御后如何验证后门被真正消除?

单选题 · mid

  • A.仅需检查干净样本的准确率是否达标
  • B.ASR 大幅下降且干净精度保持稳定← 正确答案
  • C.训练损失快速收敛到零即可
  • D.验证集上不再出现任何误分类

答案:B。后门消除必须双重验收:攻击成功率 ASR 趋近于 0,说明钥匙扣失效;干净精度与防御前基本持平,说明没有误伤正常功能。A 只看精度可能漏过后门;C 训练损失与后门无关;D 要求零误分类不现实也不是防御目标。

Q8. 异常指数公式中系数 1.4826 的统计作用是什么?

单选题 · hard

  • A.使 MAD 成为标准差的渐近一致估计← 正确答案
  • B.调节逆向工程优化过程的学习率大小
  • C.控制掩码注入式中触发器的稀疏程度
  • D.决定 Softmax 输出的温度缩放系数高低

答案:A。MAD 本身不是标准差,但在正态分布假设下,MAD 乘以 1.4826 后可以渐近一致地估计标准差,使异常指数无量纲化、可跨模型比较。B 是优化超参数,C 是 L1 惩罚系数 λ 的职责,D 是 Softmax 温度,都与统计校准无关。

Q9. 下列哪些属于鲁棒训练类的防御手段?

多选题 · mid

  • A.对输入做降噪与特征压缩预处理← 正确答案
  • B.剪除对触发器高响应的敏感神经元← 正确答案
  • C.无限扩大训练数据集的整体规模
  • D.用干净数据对模型进行微调重训← 正确答案

答案:ABD。输入预处理、模型剪枝、干净微调重训都是典型的鲁棒训练防御。C 单纯增加数据量不改变中毒样本与触发器的存在,后门依然有效,属于无关选项。防御的关键是让模型“忘掉钥匙扣”,而不是单纯堆数据。

Q10. 以下哪些属于常见的后门触发器类型?

多选题 · mid

  • A.固定位置的可见补丁式触发器← 正确答案
  • B.人眼难以察觉的隐形噪声触发器← 正确答案
  • C.随输入样本变化的特定式触发器← 正确答案
  • D.部署在输出层上的动态触发器

答案:ABC。补丁触发器(如路牌贴纸)、隐形触发器(低强度噪声)和样本特定触发器(每个输入配不同暗号)都是论文中常见的触发器形态。D 的“输出层”属于模型结构概念,触发器是输入空间的扰动,不是网络层的部署对象。

Q11. 关于 Neural Cleanse 的流程,下列说法正确的有哪些?

多选题 · hard

  • A.为每个类别逆向工程一个候选触发器← 正确答案
  • B.用 L1 范数衡量逆向触发器的总体大小← 正确答案
  • C.直接删除可疑类别的全部训练样本即可
  • D.用异常指数判定哪个类别存在后门← 正确答案

答案:ABD。Neural Cleanse 对每个类逐类逆向候选触发器,L1 范数作为触发器大小,再用 MAD 异常指数定位离群类。C 错误:直接删除可疑类全部样本会把正常类别也清空,正确做法是定位后配合数据清洗、剪枝与干净重训,且只处理被判定为中毒的样本。

Q12. 在 MAD 异常指数公式中,为什么要用中位数替代均值?

单选题 · extreme

  • A.中位数对极端离群值更稳健← 正确答案
  • B.中位数计算速度一定更快
  • C.均值无法反映数据的整体大小
  • D.中位数天然适合处理高维数据

答案:A。检测后门时,被污染类别的触发器范数本身就是我们要找的“离群点”。若用均值,这个离群值会把中心估计拉偏,导致其他正常类别反而显得异常。中位数几乎不受离群值影响,配合 MAD 能稳健地刻画主体分布,从而让真正的后门类别“脱颖而出”。B 速度不是设计动机,C、D 说法错误。