老城区物业的老张,手里总挂着一串钥匙。奇怪的是,他很少向住户借钥匙,光凭一把“配得特别好”的万能钥匙,就能打开小区里一大半的门。秘诀不在锁,而在锁芯:这片小区都是同一家锁厂按同一套图纸造的,只要齿形摸准了“共同规律”,一把钥匙就能捅开所有同型号锁。在 AI 世界里,存在一模一样的“万能钥匙”:攻击者在自己训练的模型 A 上精心雕刻出一个微小扰动(对抗样本),哪怕完全不碰目标模型 B 的任何参数,这个扰动也能让 B 乖乖认错。这就是对抗样本的跨模型迁移攻击——一种典型的黑盒攻击。本文就用这张“万能钥匙”图谱,带你拆解它为什么灵、什么因素影响它、如何打磨出更通用的“钥匙”,以及防御方怎么“换锁芯”。

岗位关联

掌握迁移攻击的原理与增强技术,是 AI 安全从业者开展黑盒鲁棒性评估、红队攻防对抗与防御验证的核心能力。

目录
  1. 可视化演示
  2. 可迁移性现象
  3. 影响迁移因素
  4. 迁移增强技术
  5. 集成模型攻击
  6. 跨任务迁移
  7. 迁移性评估
  8. 迁移攻击防御
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示对抗样本从源模型生成后迁移攻击多个黑盒目标模型的过程,支持切换DI/TI/MI/VNI增强技术查看迁移成功率变化。

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

迁移攻击 (Transfer Attack) 源模型生成对抗扰动 成功迁移至目标模型 目标模型防御成功 迁移率 = 成功攻击数 / 总目标数 增强技术DI/TI/MI/VNI提升黑盒迁移性

可迁移性现象

老张的钥匙为什么能开这么多锁?因为锁芯同源。机器学习模型也一样——虽然每家公司的模型结构不同,但只要都在 ImageNet 这类公开数据集上“喂”过,它们学到的分类边界就异常接近。攻击者因此想到一条捷径:在看得见内部结构的白盒模型 A 上生成一个让 A 认错的小扰动,再把这个扰动原封不动地施加到黑盒模型 B 的输入上。如果 B 也被骗了,就说这个对抗样本实现了跨模型迁移。

为什么能迁移?用决策边界来解释:A 和 B 的边界在特征空间中并不是两条独立直线,而是彼此贴得很近的两条曲线。让 A 误判,需要把样本推过 A 的边界;由于 B 的边界就在附近,同一个“推力”经常顺手把样本也推过了 B 的边界。经典论文发现,用 FGSM 这类梯度方法在 A 上算出的扰动,在 B 上的平均欺骗率远高于随机噪声,迁移现象由此进入 AI 安全视野。

FGSM 是理解一切迁移攻击的起点:

回到老张的钥匙:FGSM 就是在源模型这把“已知锁”上,照着最脆弱的受力点锉出齿形。至于这把钥匙到了 B 那把锁上还灵不灵,就要看下一节这些影响因素了。

xadv=x+ϵ⋅sign(∇xJ(x,y))x^{\text{adv}} = x + \epsilon \cdot \text{sign}\left( \nabla_x J(x, y) \right)
一句话:沿“让模型 loss 上升最快的方向”给每个像素轻轻推一小步,就得到对抗样本。
  1. 原始图像 x一张普通输入图片,是攻击的起点向量。
    xx
  2. 分类损失 J(x, y)模型对“x 属于正确类别 y”的把握程度,损失越大说明模型越没把握。
    J(x,y)J(x, y)
  3. 输入梯度 ∇ₓJ让损失上升最快的像素改动方向,也就是模型最脆弱的方向。
    ∇xJ(x,y)\nabla_x J(x, y)
  4. 符号函数 sign把梯度压成每个像素 +1/−1 的方向模板,保证扰动高效且可控。
    sign(∇xJ(x,y))\text{sign}(\nabla_x J(x, y))
  5. 步长缩放与叠加用 ε 控制扰动幅度,把方向模板缩放到合适大小后加到原图上,得到对抗样本。
    xadv=x+ϵ⋅sign(∇xJ(x,y))x^{\text{adv}} = x + \epsilon \cdot \text{sign}(\nabla_x J(x, y))

影响迁移因素

老张的钥匙也不是每次都灵。有时锁厂换了新图纸,有时住户从别处买锁换了锁芯,有时是钥匙齿形锉得太浅。迁移攻击也受四类因素左右。

模型结构差异。决策边界终究因结构而异。ResNet 与 VGG 的“感知偏好”差别明显,它们之间的迁移率就比“ResNet-50→ResNet-152“这对同族兄弟低得多。结构越接近,边界越容易”重叠”。

训练数据重叠度。数据是锁芯的图纸。源模型与目标模型的训练集重叠越多,边界越接近;如果目标模型在完全不同的数据域(如医学影像)上训练,即使结构相同,迁移率也会骤降。

攻击算法强度。单步 FGSM 只是“原地蹦一下”,容易卡在 A 特有的边界凸起上;迭代攻击(如 PGD)多步逼近,找到的扰动方向更接近“两个模型共同脆弱”的主方向,迁移性通常更好。

扰动幅度。ε 越大,样本被推得越远,越过 B 边界的概率越高;但扰动过大会破坏不可感知性,也更容易被输入预处理类防御过滤掉。迁移率随 ε 上升有边际递减,必须在强度与隐蔽性之间权衡。为此,攻击通常会约定一个扰动预算:

锁芯图纸、钥匙材质、锉齿力道,四样齐了才算有“通用潜质”。但潜质不等于成品,接下来看老师傅怎么打磨钥匙。

∥δ∥∞≤ϵ\|\delta\|_{\infty} \le \epsilon
一句话:限制“改动最狠的那个像素”也不超过 ε,保证扰动肉眼难察。
  1. 扰动 δ对抗样本相对原图的像素级修改量。
    δ=xadv−x\delta = x^{\text{adv}} - x
  2. 无穷范数 ‖·‖∞取向量各分量绝对值的最大值,代表“改动最狠的那个像素”的幅度。
    ∥δ∥∞=max⁡i∣δi∣\|\delta\|_{\infty} = \max_i |\delta_i|
  3. 预算约束要求最狠的改动也不超过 ε,这是对抗样本“不可感知”承诺的数学化。
    ∥δ∥∞≤ϵ\|\delta\|_{\infty} \le \epsilon

迁移增强技术

毛坯钥匙不好插,老师傅有四道工序:换个角度插(DI)、平移比对锁孔(TI)、轻敲修正齿形(MI)、再镀一层防滑膜(VNI)。四道工序的共同目的,是让钥匙不要“太贴合某一把锁”,而是贴合“锁的共性”。

输入多样性(DI):每次迭代求梯度前,以概率 p 对输入做随机变换(典型做法是随机缩放后 padding 回原尺寸),相当于攻击者从不同角度观察锁孔,避免扰动过拟合单一输入尺寸。平移不变性(TI):真实图像难免有轻微平移,模型对平移敏感,因此把梯度与高斯核做卷积,模拟“钥匙平移着插”,得到对平移鲁棒的扰动。动量迭代(MI):把历史梯度按动量累积起来,平均掉局部震荡,让扰动沿着“贯通多个模型边界”的主方向稳定前进。噪声注入(VNI):求梯度前给输入加一点微小随机噪声,相当于给损失曲面做平滑,避免钻进源模型特有的尖锐沟壑。

MI 是增强技术的中枢,其更新规则是:

TI 的卷积平滑可以写成:

四道工序叠加后,钥匙终于从“只能开 A”变成“能开一大片同图纸的锁”。实验表明,DI+TI+MI+VNI 组合使用,在 ImageNet 上的黑盒迁移成功率可以数倍于裸 FGSM——这就是打磨的力量。

gt+1=μgt+∇xJ(xtadv,y)∥∇xJ(xtadv,y)∥1,xt+1adv=xtadv+α⋅sign(gt+1)g_{t+1} = \mu g_t + \frac{\nabla_x J(x_t^{\text{adv}}, y)}{\left\| \nabla_x J(x_t^{\text{adv}}, y) \right\|_1}, \qquad x_{t+1}^{\text{adv}} = x_t^{\text{adv}} + \alpha \cdot \text{sign}(g_{t+1})
一句话:用一个高斯核把梯度“抹匀”,抹平只对单一模型成立的尖峰。
  1. 梯度图 g反向传播得到的输入梯度,局部可能有大量尖峰。
    gg
  2. 高斯核卷积 W ⊗ g对梯度做邻域加权平均,保留主干方向、削掉尖峰,让扰动在平移后依然有效。
    g~=W⊗g\tilde{g} = W \otimes g

集成模型攻击

有经验的配钥匙师傅不会只带一把锁试样,而是把市面上常见的几把锁都摆上台面:这把能插进 1 号锁,那把能插进 2 号锁,反复比对后锉出的钥匙,兼容面自然更广。集成攻击就是这个思路——用多个已知的白盒模型共同“试配”一把对抗钥匙。

具体做法是:选取 K 个已知模型(架构差异越大越好),计算它们损失函数的加权平均,把这把“集成损失”当作攻击目标求梯度。由于不同模型的梯度方向各不相同,加权平均后的梯度指向的是“大家都容易犯错的方向”,而不是某个模型独有的方向,从而降低了对单一源模型决策边界的过拟合。

多锁试配出来的钥匙,比单锁炼出来的“平均化”得多——它锉掉的不是某一把锁的齿形,而是所有锁共有的“最大公约数”。这也是为什么集成攻击常被当作迁移攻击的“标准起手式”。

Jens(x)=∑k=1Kwk Jk(x),∑k=1Kwk=1J_{\text{ens}}(x) = \sum_{k=1}^{K} w_k \, J_k(x), \qquad \sum_{k=1}^{K} w_k = 1
一句话:把 K 个模型的“脾气”平均在一起,找它们共同的软肋。
  1. 单个模型损失 J_k(x)第 k 个白盒模型对输入 x 的交叉熵损失,体现它对这个样本的“反感程度”。
    Jk(x)J_k(x)
  2. 权重 w_k各模型在集成中的话语权,通常取平均 1/K,也可按模型质量自定义。
    wkw_k
  3. 加权求和集成损失是 K 个损失之和,对其求梯度即指向 K 个脆弱方向的重叠区。
    Jens(x)=∑k=1KwkJk(x)J_{\text{ens}}(x) = \sum_{k=1}^{K} w_k J_k(x)
  4. 归一化约束权重之和为 1,保证集成损失保持在合理尺度。
    ∑k=1Kwk=1\sum_{k=1}^{K} w_k = 1

跨任务迁移

老张后来发现,这把钥匙不仅能开门,连抽屉锁、文件柜锁都能开——因为不同厂家虽然做不同的锁,但都遵守同一套行业标准。任务是变化的,底层技术标准却是共享的。

深度学习里,图像分类、目标检测、语义分割等模型,骨干网络(backbone)往往都来自预训练分类模型(如 ResNet、VGG)。这些骨干提取的底层特征——边缘、纹理、颜色——是完全共享的。因此在分类模型上生成的对抗扰动,迁移到以同款骨干构建的检测、分割模型上,依然有相当的杀伤力。任务之间关联越强(如分类→检测),迁移越明显;关联越弱,迁移越吃力。

更极端的形式是通用对抗扰动:研究者用少量图像训练出“一张通用噪声图”,把它贴到任意输入上都能让模型误判——这正是“一把钥匙开所有门”的极限形态。它说明攻击者不需要针对每张图、每个任务定制扰动,只要找到模型家族共享的脆弱方向即可。

跨任务迁移提醒我们:攻击者的万能钥匙不止一把。只要预训练范式不变,换个任务并不等于换个安全。

迁移性评估

怎么评价老张的万能钥匙好不好用?最直接的办法:拿它去开一串目标锁,数一数成功了几把。迁移性评估干的就是这件事——用数字定义“通用度”。

标准流程分三步:第一,在源模型 A 上生成 N 个对抗样本;第二,把它们逐个喂给黑盒目标模型 B,记录 B 的输出;第三,统计 B 被欺骗的比例,即迁移成功率(Transfer Rate, TR)。需要注意与干净样本基线对照:如果 B 在干净样本上本身就频繁出错,迁移率会被高估,所以严谨的报告会同时给出“干净准确率”与“对抗准确率”两个数字。

专业的评估会用多个不同架构的目标模型分别测 TR,形成一张“迁移攻击矩阵”;再叠加 DI/TI/MI/VNI 与集成攻击,给模型做完整的鲁棒性画像。就像老张在每栋楼都试一遍钥匙,评估报告就是一张“钥匙开锁记录表”——数值越难看,说明这块“锁区”越危险。

TR=1N∑i=1NI[fB(xiadv)≠yi]TR = \frac{1}{N} \sum_{i=1}^{N} \mathbb{I}\left[ f_B(x_i^{\text{adv}}) \ne y_i \right]
一句话:迁移成功率 = 目标模型被对抗样本骗过的样本占比。
  1. 对抗样本集 {x_i^adv}在源模型 A 上生成的 N 个对抗样本,是“待测的钥匙”。
    xiadvx_i^{\text{adv}}
  2. 目标模型决策 f_B黑盒模型 B 对新输入的预测标签,评估者只能看到这个输出。
    fB(xiadv)f_B(x_i^{\text{adv}})
  3. 误判指示器 I[·]预测标签不等于真实标签记 1,否则记 0。
    I[fB(xiadv)≠yi]\mathbb{I}\left[ f_B(x_i^{\text{adv}}) \ne y_i \right]
  4. 求平均N 个样本上成功欺骗 B 的比例,即迁移率,数值越高说明钥匙越通用。
    1N∑i=1NI[⋅]\frac{1}{N} \sum_{i=1}^{N} \mathbb{I}[\cdot]

迁移攻击防御

物业被老张搞怕了,换了几招:换锁芯、加防盗板、装猫眼。本质上不是让锁“打不开”,而是让万能钥匙“不再通用”。

对抗训练是最经典的防御:把对抗样本混进训练集,让模型“见过坏样本”从而增强免疫力。它在数学上是一个 min-max 问题——内层最大化找最毒的攻击,外层最小化让模型在最毒的攻击下也少犯错:

输入预处理是低成本的一招:对输入做 JPEG 压缩、随机缩放裁剪、去噪等变换,破坏攻击者精心构造的像素级扰动。模型集成防御则让多个不同架构的模型投票,迁移攻击要同时骗过多个边界,难度陡增。检测机制通过重建误差、置信度分数等信号识别对抗输入,将其拒之门外。

老张的钥匙终究会慢慢失灵——但每换一次锁芯,攻击者也会配出新钥匙。攻防是一场没有终点的军备竞赛,理解迁移攻击,正是防御方不掉队的第一步。

min⁡θE(x,y)∼D[max⁡∥δ∥p≤ϵJ(x+δ,y;θ)]\min_{\theta} \mathbb{E}_{(x, y) \sim \mathcal{D}} \left[ \max_{\|\delta\|_p \le \epsilon} J(x + \delta, y; \theta) \right]
一句话:主动“挨最毒的打”,练出最抗揍的模型。
  1. 外层最小化寻找模型参数 θ,使整体期望损失最小。
    min⁡θ\min_{\theta}
  2. 内层最大化对每个样本寻找不超过 ε 预算的最强扰动 δ,让当前模型损失最大。
    max⁡∥δ∥p≤ϵJ(x+δ,y;θ)\max_{\|\delta\|_p \le \epsilon} J(x + \delta, y; \theta)
  3. 期望运算对训练数据分布 D 上的所有样本都要求“扛得住”,而不是只对个别样本有效。
    E(x,y)∼D\mathbb{E}_{(x,y) \sim \mathcal{D}}
  4. 整体含义模型在最坏情况下也尽量少犯错,决策边界被“撑宽”,迁移攻击的共享弱点被抹平。
    min⁡θE(x,y)∼D[max⁡∥δ∥p≤ϵJ(x+δ,y;θ)]\min_{\theta} \mathbb{E}_{(x,y) \sim \mathcal{D}} \left[ \max_{\|\delta\|_p \le \epsilon} J(x + \delta, y; \theta) \right]

AI 应用场景

云上模型 API 的黑盒鲁棒性审计

阶段:对抗性评估 / 红队测试

解决的问题:云厂商只开放推理 API,白盒梯度不可得,传统白盒攻击直接失效。迁移攻击用开源模型作“源模型”,把用 DI+TI+MI 增强过的对抗样本投喂给目标 API,就能在完全不接触内部参数的情况下,量化它的鲁棒性短板。

具体案例:某安全团队对一款公网 OCR 识别 API 做审计,用 ImageNet 预训练 ResNet 作源模型,生成带平移增强的对抗样本,使该 API 的字符识别错误率从 2% 飙升至 38%,证明其易受迁移攻击,推动厂商完成对抗训练加固。

人脸识别系统的防绕过测试

阶段:防御验证 / 攻防演练

解决的问题:门禁厂商常宣称自家模型“绝对安全”,但攻击者可以用迁移攻击制作可打印的对抗补丁,在物理世界绕过识别。安全团队需要一种不依赖目标模型内部信息的手段来验证风险。

具体案例:在攻防演练中,测试人员先以与目标同源的公开人脸数据集训练替代模型,再集成多个不同架构生成对抗补丁,在闸机实测中实现约 30% 的绕过率,帮助厂商定位到“骨干网络共享”这一根本脆弱点。

防御方案上线前的迁移性基准评测

阶段:模型鲁棒性评估 / 上线准入

解决的问题:防御方如果只用自己熟悉的攻击测试,容易高估防御效果;只有把迁移攻击纳入标准评测,才能反映真实世界中的黑盒威胁。

具体案例:某机器学习平台建立“迁移攻击矩阵”作为上线门槛:多个源模型 × 多种增强技术 × 多个目标模型,逐一计算迁移成功率,任何攻击路径下迁移率超过阈值的模型一律不准上线,从流程上杜绝“换任务就失守”的漏洞。

Python 演示

python84 行
import numpy as np  class ToyNet:    """极简两层网络, 用于演示对抗样本的跨模型迁移"""     def __init__(self, seed, hidden=16):        self.rng = np.random.default_rng(seed)        self.w1 = self.rng.standard_normal((2, hidden)) * 0.6        self.b1 = np.zeros(hidden)        self.w2 = self.rng.standard_normal((hidden, 1)) * 0.6        self.b2 = 0.0     def forward(self, X):        h = np.tanh(X @ self.w1 + self.b1)        return 1.0 / (1.0 + np.exp(-(h @ self.w2 + self.b2)))     def train(self, X, y, steps=300, lr=0.3):        for _ in range(steps):            h = np.tanh(X @ self.w1 + self.b1)            p = 1.0 / (1.0 + np.exp(-(h @ self.w2 + self.b2)))            dz = (p - y.reshape(-1, 1)) / len(X)            dw2 = h.T @ dz            db2 = dz.sum(axis=0)            dh = (dz @ self.w2.T) * (1 - h ** 2)            dw1 = X.T @ dh            db1 = dh.sum(axis=0)            self.w2 -= lr * dw2            self.b2 -= lr * db2            self.w1 -= lr * dw1            self.b1 -= lr * db1  def make_data(seed=0, n=400):    rng = np.random.default_rng(seed)    X = rng.standard_normal((n, 2))    y = (X[:, 0] ** 2 + X[:, 1] ** 2 < 1.6).astype(int)    return X, y  def grad_input(model, X, y):    h = np.tanh(X @ model.w1 + model.b1)    p = 1.0 / (1.0 + np.exp(-(h @ model.w2 + model.b2)))    dz = p - y.reshape(-1, 1)    dh = (dz @ model.w2.T) * (1 - h ** 2)    return dh @ model.w1.T  def fgsm(model, X, y, eps):    return X + eps * np.sign(grad_input(model, X, y))  def mi_fgsm(model, X, y, eps, iters=8, mu=0.9):    alpha = eps / iters    adv = X.copy()    g = np.zeros_like(X)    for _ in range(iters):        grad = grad_input(model, adv, y)        g = mu * g + grad / (np.abs(grad).sum(axis=1, keepdims=True) + 1e-8)        adv = adv + alpha * np.sign(g)        adv = np.clip(adv, X - eps, X + eps)    return adv  def mis_rate(model, X, y):    p = model.forward(X)    return float(((p > 0.5).astype(int).ravel() != y).mean())  def main():    X, y = make_data(seed=0)    model_a = ToyNet(seed=1, hidden=16)  # 源模型: 完全白盒可见    model_b = ToyNet(seed=2, hidden=24)  # 目标模型: 结构不同, 视为黑盒    model_a.train(X, y)    model_b.train(X, y)    adv_f = fgsm(model_a, X, y, eps=0.5)    adv_m = mi_fgsm(model_a, X, y, eps=0.5)    print("clean : A_err=%.3f B_err=%.3f" % (mis_rate(model_a, X, y), mis_rate(model_b, X, y)))    print("FGSM  : A_err=%.3f B_err=%.3f  (B上升即发生迁移)" % (mis_rate(model_a, adv_f), mis_rate(model_b, adv_f)))    print("MI    : A_err=%.3f B_err=%.3f  (迁移率通常更高)" % (mis_rate(model_a, adv_m), mis_rate(model_b, adv_m)))  if __name__ == "__main__":    main()
目的:用两个结构不同的玩具网络分别扮演白盒源模型与黑盒目标模型,在源模型上生成 FGSM 与 MI-FGSM 对抗样本,对比目标模型上误分率的上升幅度,直观展示迁移攻击的发生与增强效果。
  1. model_a = ToyNet(seed=1, hidden=16)源模型,内部权重完全可见,用于计算梯度。
  2. model_b = ToyNet(seed=2, hidden=24)目标模型,结构不同且“看不见”,只参与推理打分。
  3. return X + eps * np.sign(grad_input(model, X, y))单步 FGSM:沿梯度符号加扰动,最容易过拟合源模型。
  4. g = mu * g + grad / (np.abs(grad).sum(axis=1, keepdims=True) + 1e-8)动量累积与 L1 归一化,让更新方向更平稳。
  5. adv = np.clip(adv, X - eps, X + eps)把每步扰动裁剪在 ε 预算内,保证不可感知。
  6. mis_rate(model_b, adv_f)关键指标:源模型生成的样本喂给目标模型,误分率越高说明迁移性越强。

常见误区

误区我刚开始学习时以为,对抗样本既然能让 B 误判,攻击者至少得知道 B 的梯度甚至网络结构,否则扰动怎么可能“恰好”骗过它?

正解迁移攻击的精髓恰恰是黑盒。攻击者只在源模型 A 上计算梯度,目标模型 B 只负责输出预测结果。它利用的是 A 与 B 之间决策边界的相似性,而不是 B 的内部信息。就像老张不需要拆开每家每户的锁,只要锁芯是同厂图纸,钥匙就能捅开。

为何常见:多数教程先讲白盒攻击,梯度反传的概念太深入人心,容易把“需要梯度”泛化到所有攻击手段。

误区既然迁移率随 ε 上升,那直接把 ε 调大不就行了?0.1 不够就 0.5,0.5 不够就 1.0。

正解迁移率随 ε 上升存在边际递减,甚至可能不升反降——过大的扰动可能把样本推到“另一个错误的类别区域”,而不是目标错误区域;同时会破坏不可感知性,轻易触发输入预处理与检测防御。对抗样本的前提是“人眼看不出”,一把太粗的钥匙还没来得及插进锁孔就被保安没收了。

为何常见:直觉上“用力越大越好”,忽略了对抗攻击的隐蔽性约束,把攻击问题简化成了能量问题。

误区集成攻击效果好,那我用 10 个、20 个模型一起集成,迁移率不是该翻倍?

正解提升迁移性的关键是集成多样性——不同架构、不同训练方式——而不是数量。用 5 个同架构、不同随机种子的模型集成,它们的脆弱方向高度重合,叠加再多也是冗余;而 3 个差异明显的模型(如 CNN、ViT、MLP)反而能覆盖更广的“共享弱点”。集成是集“异见”,不是集“人数”。

为何常见:把集成学习里“更多模型平均更好”的直觉错误外推,没有区分“多样性”与“数量”两个维度。

误区模型在训练时见过对抗样本,应该已经“免疫”了,迁移攻击肯定失效。

正解对抗训练能显著提升鲁棒性,但面对更强的迁移增强攻击(如 DI+TI+MI 组合)依然可能被绕过。它改变的是决策边界的形状,却无法消除数据分布本身携带的脆弱先验。鲁棒性从来是相对指标——“在哪些攻击下鲁棒”比“是否鲁棒”更重要。

为何常见:防御方测试时只用自己熟悉的攻击手段,没有把迁移攻击纳入评测矩阵,于是把“对已知攻击鲁棒”误当成了“对一切攻击鲁棒”。

误区只要源模型的对抗样本造得够好,不管目标是哪个模型都能骗过——迁移率是源模型的“固有属性”。

正解迁移是源模型与目标模型之间“匹配度”的产物。同一个对抗样本,迁移到 ResNet-50 可能成功,迁移到 ViT 可能失败;目标模型的训练数据重叠度、架构相似度、任务相关度共同决定最终成功率。评估时使用多个目标模型交叉验证,正是为了刻画这种“匹配关系”。

为何常见:单点实验看到一次成功迁移,就外推为“处处可迁移”,忽略了样本量只有一两个目标模型的统计偏差。

面试题

Q1. 迁移攻击通常属于哪一类攻击方式?

单选题 · easy

  • A.黑盒攻击← 正确答案
  • B.白盒攻击
  • C.灰盒攻击
  • D.物理攻击

答案:A。迁移攻击不需要访问目标模型的梯度或结构,只需在已知的源模型上生成对抗样本并作用于目标模型,完全符合黑盒攻击的定义。白盒攻击需要完全的内部信息,物理攻击则是通过现实物体实施的攻击,均与“跨模型迁移”这一前提不符。

Q2. FGSM 生成对抗样本时,依赖的数学依据是什么?

单选题 · easy

  • A.损失函数的梯度符号← 正确答案
  • B.模型输出的概率大小
  • C.训练数据的分布密度
  • D.随机生成的噪声扰动

答案:A。FGSM 沿损失函数对输入的梯度符号方向添加扰动,使损失上升、模型误判。模型输出概率只是评估结果,训练数据分布不参与单步生成,随机噪声则没有任何针对性。

Q3. 下列哪个因素最有利于提升对抗样本的跨模型迁移性?

单选题 · mid

  • A.源目标模型数据高度重叠← 正确答案
  • B.使用更深更大的源模型
  • C.尽量减小扰动幅度
  • D.提前知道目标模型参数

答案:A。训练数据重叠度决定了两个模型决策边界的相似程度,是迁移性的根基。模型更深更大并不必然提高迁移率,扰动过小则连源模型都骗不过,而知道目标模型参数那已经是白盒攻击了。

Q4. 以下哪些属于迁移攻击的增强技术?

多选题 · mid

  • A.输入多样性增强← 正确答案
  • B.平移不变性增强← 正确答案
  • C.动量迭代攻击← 正确答案
  • D.模型剪枝与压缩

答案:ABC。输入多样性(DI)通过随机变换输入增强泛化,平移不变性(TI)通过卷积平滑梯度增强鲁棒性,动量迭代(MI)通过累积历史梯度稳定方向,三者都是经典迁移增强手段。模型剪枝压缩是模型优化技术,与攻击增强无关。

Q5. MI-FGSM 引入动量项的主要作用是什么?

单选题 · mid

  • A.稳定更新方向并逃离局部极值← 正确答案
  • B.加快模型训练收敛速度
  • C.压缩对抗扰动的大小
  • D.提高模型的识别精度

答案:A。动量把历史梯度方向累积起来,平均掉单步梯度中的尖峰与震荡,使攻击方向沿“多个模型共享的脆弱主方向”前进,从而逃离源模型特有的局部极值。它服务于攻击而非训练,也不直接减小扰动。

Q6. 集成模型攻击能够提升迁移性的原因包括哪些?

多选题 · mid

  • A.近似共享决策方向← 正确答案
  • B.避免过拟合单模型← 正确答案
  • C.降低目标模型开销
  • D.增强视觉隐蔽性

答案:AB。多个模型的加权梯度指向它们共同的脆弱方向,相当于用多把锁试配钥匙;同时减少了单一源模型特有边界被过度拟合的风险。集成攻击并不改变目标模型的计算开销,也与扰动的视觉隐蔽性无关。

Q7. 对抗训练的核心思想是什么?

单选题 · easy

  • A.对抗样本加入训练← 正确答案
  • B.增加模型参数规模
  • C.降低输入图像分辨率
  • D.使用更深网络结构

答案:A。对抗训练在训练过程中主动注入对抗样本,让模型见过“最坏情况”从而增强鲁棒性。增加参数或深度只是常规模型容量手段,降低输入分辨率则会损伤正常精度。

Q8. 迁移成功率指标衡量的是什么?

单选题 · mid

  • A.源模型样本被目标误分类比例← 正确答案
  • B.目标模型干净样本准确率
  • C.对抗样本生成的耗时开销
  • D.源目标模型参数量差异

答案:A。迁移成功率统计在源模型上生成、能骗过目标模型的对抗样本比例,是评估“钥匙通用度”的核心指标。干净样本准确率是对照基线而非迁移指标,生成耗时与参数量差异都不能反映欺骗效果。

Q9. 关于对抗样本的跨任务迁移,下列说法正确的有?

多选题 · hard

  • A.不同任务模型共享底层特征表示← 正确答案
  • B.同一扰动可干扰多个任务← 正确答案
  • C.跨任务迁移与任务相关性无关
  • D.跨任务迁移无需任何源模型

答案:AB。分类、检测、分割等模型常共享预训练骨干网络,底层特征表示一致,因此同一扰动可以跨任务生效,且任务相关性越强迁移越明显。跨任务迁移同样需要源模型来生成扰动,并非凭空产生。

Q10. 输入多样性(DI)方法通过什么方式增强迁移性?

单选题 · hard

  • A.以一定概率对输入做随机变换← 正确答案
  • B.对梯度做高斯核卷积平滑
  • C.沿历史梯度方向累积动量
  • D.向输入注入随机虚拟噪声

答案:A。DI 在每次迭代以概率 p 对输入做随机缩放、填充等变换,让攻击者从多个“观察角度”计算梯度,避免过拟合单一输入形态。B 是平移不变性(TI),C 是动量迭代(MI),D 是噪声注入(VNI),三者与 DI 并列但机制不同。