想象一下,你是一名机场安检员,每天要检查成千上万的行李箱。正常情况下,你能轻松识别出哪些是危险品。但有一天,一个狡猾的走私犯拿了一个外表看起来完全正常的毛绒玩具——里面却藏着一把折叠刀。你盯着它看了很久,凭肉眼完全看不出任何问题,但你的直觉告诉你不对劲。更糟的是,通过某种“神奇的手段”,走私犯可以在毛绒玩具上做微小的调整,让你的专业判断彻底失效——明明看起来是玩具,但扫描仪却显示为“安全”。这就是对抗样本的核心困境:攻击者在原始图片上添加肉眼不可见或微小的扰动,就能让训练良好的AI模型产生完全错误的判断。 面对这种“精心伪装的危险品”,我们该怎么办?总不能把机场关了,或者拒绝一切行李。于是,防御者设计了一系列“被动防御策略”——它们不改变模型本身的强大识别能力,而是在模型“看到”输入之前或之后,增加一些“检查环节”和“过滤机制”,让攻击者的伪装失效。这些策略就像安检流程中的额外检查站:随机化的扫描角度、除尘与清洁装置、以及简化版的危险品清单。本文将以这个“机场安检”的比喻为主线,带你走进对抗样本的攻防世界,理解随机化、预处理、特征压缩等被动防御策略的原理与实战应用。

岗位关联

对于AI从业者而言,理解被动防御策略是构建安全可靠AI系统的必备技能。无论你未来从事计算机视觉、自然语言处理还是强化学习,都将面对真实世界中的恶意输入。掌握这些防御策略,能让你在模型部署前就做好安全防护,在攻防对抗中占据先机,成为AI安全领域不可或缺的人才。

目录
  1. 可视化演示
  2. 威胁模型概述
  3. 随机化防御策略
  4. 预处理防御策略
  5. 特征压缩防御
  6. 防御效果评估
  7. 应用与展望
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

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

威胁模型概述

在机场安检的故事里,威胁模型就是我们首先要回答的问题:敌人是谁?他们能做什么?他们想干什么? 如果你不知道走私犯会用什么样的“伪装手段”,那再多的安检设备也是白搭。对抗样本的威胁建模,就是系统性地描述攻击者的能力与目标,帮助我们针对性地设计防御措施。

在AI安全领域,威胁模型(Threat Model)通常包括四个要素:攻击者的目标(想要模型产生什么错误)、攻击者的能力(能修改多少输入数据)、攻击者掌握的信息(是否知道模型的结构和参数)、以及攻击发生的场景(是线上实时攻击还是线下伪造)。被动防御策略的定位是:不修改模型内部结构,而是在输入进入模型之前增加“安检环节”。它假设模型本身是“无辜的”,问题出在输入上。

从技术上看,威胁模型可以用一个简洁的数学形式来表达。假设原始样本为 $x$,攻击者构造的对抗样本为 $x'$,其中扰动 $\delta = x' - x$。攻击者的目标是找到一个极小的扰动 $\delta$,使得模型 $f$ 产生错误预测,同时保证扰动不被人类察觉:

回到机场的比喻:威胁模型告诉我们,走私犯手里的“毛绒玩具”(对抗样本)从外观上看与普通玩具几乎无差异($\|\delta\|_p$ 极小),但一旦通过安检(模型预测),就会被判定为“安全物品”($f(x')=f(x)$),从而顺利过关。被动防御的任务,就是让这种“几乎无差异”的伪装变得无效——既然你太擅长伪装,那我就多几个检查环节,让你的伪装失去作用。

min⁡δ∥δ∥ps.t.f(x+δ)≠f(x),x′=x+δ\min_{\delta} \|\delta\|_p \quad \text{s.t.} \quad f(x+\delta) \neq f(x), \quad x' = x+\delta
这个公式说的是:攻击者希望在保证“伪装足够隐蔽”($\|\delta\|_p$ 足够小,$p$ 可以是0、1、2或无穷范数)的前提下,找到能让模型判断出错的扰动 $\delta$。就像走私犯要保证“改动的痕迹肉眼不可见”。
  1. 最小化扰动大小$\|\delta\|_p$ 表示扰动的范数,用来衡量攻击者改动了多少。
    ∥δ∥p=(∑i∣δi∣p)1/p\|\delta\|_p = \left( \sum_{i} |\delta_i|^p \right)^{1/p}
  2. 保持模型预测不变的条件$f(x+\delta) \neq f(x)$ 是对抗样本的核心目标——让模型对新输入 $x' = x+\delta$ 的预测结果与原始输入 $x$ 不同。
    f(x′)≠f(x)f(x') \neq f(x)
  3. 约束条件s.t.(subject to)表示“在……条件之下”,整个式子是在寻找满足误判条件的最小扰动。
    min⁡δ∥δ∥ps.t.f(x+δ)≠f(x)\min_{\delta} \|\delta\|_p \quad \text{s.t.} \quad f(x+\delta) \neq f(x)

随机化防御策略

假设机场安检主任想出了一个新招:安检机的扫描角度和参数每次都随机变化。走私犯就算知道了安检机的型号和参数,也没法提前设计出“恰好不被发现”的伪装,因为每次的检查标准都不一样。这就是随机化防御的核心思想——在推理过程中引入不可预测的随机性,让攻击者无法精确构造对抗样本。

随机化防御的具体实现方式有多种:第一种是随机缩放与填充,在图像输入模型前,先随机地调整图像的大小、在四周填充随机像素;第二种是随机化推理层,在模型的隐藏层中注入随机噪声,让梯度信息变得“不稳定”;第三种是随机噪声注入,直接向输入图像添加微小的随机噪声。这些方法有一个共同点:它们都在攻击者“计算梯度”和“实际推理”之间制造了不一致。

以随机缩放为例,其数学过程可以描述为:设原始输入为 $x$,随机变换函数为 $g_\theta(\cdot)$($\theta$ 是随机参数,如缩放比例、填充大小),则实际输入模型的是:

其中 $P(\theta)$ 是随机参数的分布。攻击者想构造对抗样本 $x'$,但他们并不知道本次推理会采样到哪个 $\theta$,因此攻击的成功率大大降低。

让我们回到安检场景:在引入随机化之前,走私犯可以精确计算“什么样的伪装不会被发现”;引入随机化之后,每次扫描的参数都在变,他们计算出的“最优伪装”可能在这次检查中失效。当然,随机化并非万能——如果攻击者能收集到足够多的“检查结果”来估计随机分布,他们依然可能构造出成功概率较高的对抗样本。正如再好的安检策略,若被内鬼泄露了随机化算法,也会失去效果。

x~=gθ(x),θ∼P(θ)\tilde{x} = g_\theta(x), \quad \theta \sim P(\theta)
公式的含义是:模型每次接收到的输入 $\tilde{x}$ 都是经过随机变换 $g_\theta$ 的结果,而变换参数 $\theta$ 由概率分布 $P(\theta)$ 随机采样得到。攻击者无法预知具体的 $\theta$,就像走私犯不知道这次安检机会以什么角度照射、用多大的分辨率扫描。
  1. 随机变换函数$g_\theta(\cdot)$ 是一个带随机参数 $\theta$ 的变换函数,$\theta$ 决定了变换的具体形式(比如缩放0.8还是1.1倍)。
    x~=gθ(x)\tilde{x} = g_\theta(x)
  2. 随机参数采样$\theta \sim P(\theta)$ 表示每次推理时,$\theta$ 从分布 $P(\theta)$ 中随机抽取一次。这就是随机性的来源。
    θ∼P(θ)\theta \sim P(\theta)
  3. 攻击者困境攻击者必须在“不知道 $\theta$ 具体值”的情况下设计扰动,这导致精心设计的扰动在随机变换后失效。
    攻击者需要: Eθ[f(gθ(x+δ))]≠f(x)\text{攻击者需要: } \mathbb{E}_{\theta}[f(g_\theta(x+\delta))] \neq f(x)

预处理防御策略

机场安检还有一种常见的做法:在扫描之前,先对行李做“除尘”和“清洁”。为什么?因为有些伪装手法依赖微小的灰尘颗粒或纤维——把这些“杂质”清掉,伪装自然就暴露了。预处理防御策略就是这个思路:在输入进入模型之前,先对数据进行“清洗”,把对抗扰动当作噪声消除掉。

预处理防御的典型方法包括:输入去噪(使用去噪自编码器或滤波器消除输入中的异常模式)、图像压缩与重采样(通过JPEG压缩或缩小图像尺寸来破坏对抗扰动)、以及防御蒸馏(用一种“知识蒸馏”的方法训练一个更平滑的模型,让模型对微小变化不敏感)。这些方法的核心思想都是:对抗扰动通常表现为高频、局部的异常特征,通过“平滑”操作可以削弱它们。

以JPEG压缩为例,其原理可以理解为一种有损压缩变换。设原始输入为 $x$,JPEG压缩为 $C(\cdot)$,则预处理后的输入为:

JPEG压缩通过离散余弦变换(DCT) 将图像从空间域变换到频域,然后丢弃高频分量(对抗扰动通常集中在高频部分):

预处理策略就像在安检流程中增加了一道“清洁工序”:行李上的灰尘(对抗扰动)被吹掉后,藏在灰尘下的“伪装痕迹”就暴露出来了。但这种策略也有局限:如果攻击者知道你的预处理方法,他们可以在设计对抗样本时就考虑“如何让扰动在去噪后仍然有效”——这就像走私犯在灰尘里掺上粘合剂,让灰尘不易被吹掉。因此,预处理通常需要与其他防御策略结合使用。

x~=C(x)\tilde{x} = C(x)
F(u,v)=14α(u)α(v)∑i=07∑j=07x(i,j)cos⁡[(2i+1)uπ16]cos⁡[(2j+1)vπ16]F(u,v) = \frac{1}{4} \alpha(u)\alpha(v) \sum_{i=0}^{7}\sum_{j=0}^{7} x(i,j) \cos\left[\frac{(2i+1)u\pi}{16}\right] \cos\left[\frac{(2j+1)v\pi}{16}\right]
这个公式是JPEG压缩的核心——DCT变换。它将8x8的图像块分解为不同频率的分量,$F(u,v)$ 表示频率域中的系数。低频分量($u,v$ 较小)是图像的主体,高频分量($u,v$ 较大)是图像的细节——对抗扰动就隐藏在高频细节中。通过丢弃高频分量,我们可以在不显著影响人类视觉的前提下清除对抗扰动。
  1. JPEG压缩变换$C(\cdot)$ 是完整的JPEG压缩过程,包括色彩空间转换、DCT变换、量化和熵编码。
    x~=C(x)\tilde{x} = C(x)
  2. DCT变换$F(u,v)$ 是DCT系数,$x(i,j)$ 是空间域的像素值,$\alpha(u)$ 和 $\alpha(v)$ 是归一化系数。这个变换把图像从“像素表示”变成“频率表示”。
    F(u,v)=14α(u)α(v)∑i=07∑j=07x(i,j)cos⁡[(2i+1)uπ16]cos⁡[(2j+1)vπ16]F(u,v) = \frac{1}{4} \alpha(u)\alpha(v) \sum_{i=0}^{7}\sum_{j=0}^{7} x(i,j) \cos\left[\frac{(2i+1)u\pi}{16}\right] \cos\left[\frac{(2j+1)v\pi}{16}\right]
  3. 量化与丢弃高频DCT变换后,JPEG会对系数 $F(u,v)$ 进行量化,将较小的系数(尤其是高频分量)归零。
    F~(u,v)=round(F(u,v)Q(u,v))\tilde{F}(u,v) = \text{round}\left(\frac{F(u,v)}{Q(u,v)}\right)

特征压缩防御

在机场安检中,我们还可以用另一种思路来防御:简化检查标准。与其检查几百种危险品特征,不如只检查几种最关键的。这样虽然可能漏掉一些“高级伪装”,但也能让攻击者的“精细伪装”失去施展空间。特征压缩防御正是如此——通过减少输入的表达精度,让攻击者没有足够的“空间”来藏匿扰动。

特征压缩中最经典的方法是降低色彩深度。比如将24位真彩色图像(每通道8位,共约1670万种颜色)降到8位(每通道3位,共512种颜色)。这种剧烈的量化会破坏对抗扰动的“精细结构”。其数学表达为:

其中 $k$ 是保留的位数。类似的方法还有局部特征裁剪(将图像的某些区域模糊化)和压缩-解压循环(反复执行JPEG压缩再解压,让扰动在多次压缩中“衰减”)。

想象这样一幅画面:走私犯用“微米级雕刻”在毛绒玩具上刻下了极细微的标记,普通检查无法察觉。但如果你把检查用的放大镜换成“粗粒度扫描仪”——只看得到厘米级特征——那这些微米级雕刻就完全看不出来了。当然,这样的代价是:正常的“精细特征”也会一起丢失。特征压缩就是这样一把双刃剑:降低了模型的精度,但换来了对对抗样本的鲁棒性。在实际应用中,我们需要在精度和鲁棒性之间寻找平衡。

x′=round(x28−k)×28−kx' = \text{round}\left(\frac{x}{2^{8-k}}\right) \times 2^{8-k}
公式的含义是:将图像的每个像素值除以 $2^{8-k}$ 后再四舍五入取整,再乘回来。这个过程把原本连续分布的像素值“归并”到有限的几个层级,就像把精确到毫米的量尺换成精确到厘米的量尺——细微的差异(对抗扰动)被抹平了。
  1. 量化缩放$x / 2^{8-k}$ 将像素值缩小,使得色阶层级减少。
    q=x28−kq = \frac{x}{2^{8-k}}
  2. 取整归并$\text{round}(\cdot)$ 将小数值就近归并到整数层级,这是信息丢失(压缩)的关键步骤。
    qquantized=round(q)q_{\text{quantized}} = \text{round}(q)
  3. 反缩放还原$\times 2^{8-k}$ 将量化后的值还原到原始量纲,但此时精度已经丢失。
    x′=qquantized×28−kx' = q_{\text{quantized}} \times 2^{8-k}

防御效果评估

机场安检部门上了一批新设备,怎么知道它们真的有用?不能光靠直觉说“感觉更安全了”,而是要用统计数据说话:入侵测试的成功率下降了多少?误报率上升了多少?成本增加了多少?防御效果评估就是对各种防御策略进行量化分析,回答“这个防御到底值不值”的问题。

评估防御效果的核心指标是攻击成功率(ASR, Attack Success Rate)。在无防御时,攻击者可能以95%的成功率让模型出错;加入防御后,这个数字应该显著下降。与此同时,我们还要关注准确率下降——防御不能把正常输入也“防御”掉。用一个简洁的表格来看:

| 指标 | 定义 | 目标 |

|------|------|------|

| 攻击成功率(ASR) | 对抗样本被模型错误分类的比例 | 越低越好 |

| 正常样本准确率 | 干净输入被正确分类的比例 | 越高越好 |

| 防御开销 | 推理时间、计算资源的增加 | 越小越好 |

| 鲁棒性增益 | 防御前后ASR的差值 | 越大越好 |

形式化地,设 $\mathcal{A}$ 是攻击算法,$f$ 是模型,$D_{\text{adv}}$ 是生成的对抗样本集合。攻击成功率定义为:

其中 $x'_i = \mathcal{A}(x_i)$ 是攻击者生成的对抗样本,$y_i$ 是真实标签,$\mathbb{I}[\cdot]$ 是指示函数(条件为真时取1,否则取0)。

评估时需要注意:不同的攻击算法、不同的扰动预算($\epsilon$)、不同的模型架构,都会影响评估结论。就像安检设备的效果,要在“多少种走私手法”、“多精细的伪装”、“多繁忙的客流”等多个维度下综合测试。严谨的评估应该在多种攻击方式下进行鲁棒性测试,而不是只测一种攻击。此外,防御带来的计算开销(如随机化的多次推理、预处理的额外计算)也需要纳入考量——如果防御让响应速度从0.1秒变成2秒,在实时场景中可能不可接受。

ASR=1N∑i=1NI[f(xi′)≠yi]\text{ASR} = \frac{1}{N} \sum_{i=1}^{N} \mathbb{I}[f(x'_i) \neq y_i]
这个公式的意思是:对 $N$ 个对抗样本逐一测试,看模型预测正确的比例。若 ASR=0.95,说明95%的对抗样本都能骗过模型;加入防御后若 ASR 降到 0.2,说明防御有效。
  1. 攻击样本生成$x'_i = \mathcal{A}(x_i)$ 表示攻击算法 $\mathcal{A}$ 对第 $i$ 个输入 $x_i$ 施加扰动,生成对抗样本 $x'_i$。
    xi′=A(xi)x'_i = \mathcal{A}(x_i)
  2. 错误判断指示$\mathbb{I}[f(x'_i) \neq y_i]$ 检查模型是否被“骗过”——如果模型预测不等于真实标签,则值为1。
    I[f(xi′)≠yi]\mathbb{I}[f(x'_i) \neq y_i]
  3. 平均成功率$\frac{1}{N}\sum_{i=1}^{N}$ 对所有样本取平均,得到攻击成功率的估计。
    ASR=1N∑i=1NI[f(xi′)≠yi]\text{ASR} = \frac{1}{N} \sum_{i=1}^{N} \mathbb{I}[f(x'_i) \neq y_i]

应用与展望

我们的机场已经装上了随机化扫描、除尘过滤、简化检查标准等层层防线。现实中,AI安全的战场远比机场复杂——攻击者的手段在进化,防御者也必须不断升级。被动防御策略正是在这样的对抗中发展起来的,它们已经在诸多现实场景中发挥作用。

在现实场景中,被动防御有广泛的应用。例如人脸识别系统:攻击者可能在脸上贴上特殊图案的贴纸来欺骗系统。部署预处理防御(如图像去噪)和特征压缩(降采样)后,贴纸造成的扰动会被大幅弱化。另一个典型场景是自动驾驶中的交通标志识别:攻击者可以在“停止”标志上贴几块小贴纸,让模型将其识别为“限速”标志。通过随机化防御(对摄像头输入做随机裁剪缩放)和预处理(去模糊、去噪),可以显著增强系统对这类攻击的抵抗力。此外,内容审核系统也会使用特征压缩来抵御“对抗性文字”或“对抗性图片”的绕过。

在工业界,被动防御策略通常会与主动防御结合使用。主动防御包括对抗训练(在训练数据中加入对抗样本,让模型“见过世面”)、认证防御(提供数学上保证的鲁棒性界)等。被动防御的定位是“轻量级、即插即用”——不需要重新训练模型,只需要在推理管线上加几个模块。这正是它的优势:在老系统升级安全能力时,被动防御是成本最低的起点。

展望未来,AI安全将走向纵深防御:多个独立防御层的组合、持续的红队测试、实时攻防对抗。被动防御策略作为其中不可或缺的一层,会与主动防御、检测机制、模型可解释性等手段协同作战。就像机场安检从单一的X光机发展成了“金属探测门+CT扫描+行为分析+人工复检+随机抽查+大数据预警”的立体体系,AI系统的防御也需要多层次、全方位的布局。对于一些AI从业者来说,理解这些被动防御策略的本质——在“不可信的输入”和“脆弱的模型”之间建立起过滤屏障——是构建可信AI的基石。

AI 应用场景

人脸识别系统的对抗鲁棒性增强

阶段:模型部署与安全加固

解决的问题:人脸识别系统在真实场景中容易受到对抗性攻击。攻击者可以佩戴特制眼镜框或打印特殊纹理的衣服,使识别系统误判为他人身份。传统的人脸识别只关注识别精度,忽略了对抗攻击的风险。通过部署特征压缩(降低图像精度)和预处理(去噪、去模糊)等被动防御策略,可以在不重新训练模型的情况下,显著提升系统的抗攻击能力。

具体案例:某园区门禁系统采用人脸识别进行人员管理。安全团队在推理管线上增加了一道“输入净化”模块:对摄像头采集的图像先进行中值滤波去噪,再降采样到较低分辨率后输入模型。实测表明:原本针对该系统的打印贴纸攻击成功率从92%骤降至18%,而正常通行效率仅下降3%。

自动驾驶感知系统的输入加固

阶段:感知模块的防御性编程

解决的问题:自动驾驶系统依赖摄像头识别交通标志和障碍物,攻击者可以在标志上粘贴对抗贴纸,使模型将“停止”标志识别为“限速”标志,造成严重事故。这个问题在纯视觉方案中尤为突出。通过随机化防御(对输入图像做随机裁剪与缩放)和预处理(JPEG压缩),让攻击者无法预先计算有效的贴纸布局。

具体案例:某自动驾驶初创公司在感知管线中引入随机化层——以随机比例(0.9~1.1)缩放输入图像,并随机填充边缘像素。红队测试显示:在标准对抗贴纸攻击下,标志识别错误率从85%降到23%。虽然增加约8%的推理延迟,但安全性大幅提升。

内容审核系统的对抗绕过防护

阶段:内容安全过滤

解决的问题:线上内容审核系统面临“对抗性图片”的挑战——攻击者通过对图片施加微小平移或色偏扰动,让审核模型将违规内容判定为正常内容。由于审核系统处理海量图片,无法对每张图都做深度检测。采用预处理防御(图像重压缩)与特征压缩(色深降低)的组合策略,可以有效消除这类扰动。

具体案例:某社交平台审核系统每天处理数亿张图片。安全团队在审核流程中增加“多通道校验”:将图片分别经过原始通道、JPEG重压缩通道、色深压缩通道,三个通道的模型投票一致才判定为安全。这使对抗性规避成功率从76%降至11%,且计算成本增加不超过15%。

Python 演示

python68 行
import torchimport torch.nn as nnimport torchvision.models as modelsimport torchvision.transforms as Tfrom PIL import Imageimport numpy as np def fgsm_attack(model, x, y, eps):    """Fast Gradient Sign Method攻击"""    x_adv = x.clone().detach().requires_grad_(True)    loss = nn.CrossEntropyLoss()(model(x_adv), y)    loss.backward()    grad = x_adv.grad.data    x_adv = x + eps * grad.sign()    return x_adv.detach() def random_resize_defense(x, scales=(0.9, 0.95, 1.0, 1.05, 1.1)):    """随机化防御:随机缩放输入"""    s = np.random.choice(scales)    new_size = (int(x.shape[-2]*s), int(x.shape[-1]*s))    x_resized = T.functional.resize(x, new_size)    return T.functional.center_crop(x_resized, (x.shape[-2], x.shape[-1])) def jpeg_defense(x, quality=50):    """预处理防御:JPEG压缩去噪"""    x_np = x.squeeze(0).permute(1, 2, 0).numpy()    x_np = np.clip(x_np, 0, 1) * 255    x_np = x_np.astype('uint8')    img = Image.fromarray(x_np)    import io    buf = io.BytesIO()    img.save(buf, format='JPEG', quality=quality)    buf.seek(0)    img_de = Image.open(buf)    x_de = np.array(img_de).astype('float32') / 255.0    x_t = torch.from_numpy(x_de).permute(2, 0, 1).unsqueeze(0)    return x_t.float() def bit_depth_defense(x, bits=4):    """特征压缩防御:降低色彩深度"""    levels = 2 ** bits    x_q = torch.round(x * (levels - 1)) / (levels - 1)    return x_q def eval_defense(model, x, y, eps=0.1):    """评估不同防御策略下的攻击成功率"""    x_adv = fgsm_attack(model, x, y, eps)    defenses = {        '无防御': lambda z: z,        '随机化': random_resize_defense,        'JPEG压缩': lambda z: jpeg_defense(z, quality=30),        '色彩量化': lambda z: bit_depth_defense(z, bits=2),    }    for name, defense_fn in defenses.items():        preds = []        for _ in range(5 if name == '随机化' else 1):            x_def = defense_fn(x_adv.clone())            pred = model(x_def).argmax(dim=1).item()            preds.append(pred)        asr = sum(1 for p in preds if p != y.item()) / len(preds)        print(f'{name}: 攻击成功率 = {asr:.0%}') if __name__ == '__main__':    model = models.resnet18(pretrained=True)    model.eval()    x = torch.randn(1, 3, 224, 224)  # 示例输入    y = torch.tensor([1])    eval_defense(model, x, y)
目的:用PyTorch实现并对比三种被动防御策略(随机化缩放、JPEG压缩、色彩量化)对抗FGSM攻击的效果。
  1. def fgsm_attack(...)FGSM即“快速梯度符号方法”,利用模型梯度方向构造对抗扰动,是攻击者最基础也最常用的手段。
  2. loss.backward()计算损失函数对输入的梯度,梯度方向就是“最容易让模型出错”的方向。
  3. x + eps * grad.sign()沿着梯度符号方向添加扰动,eps 控制扰动大小。这就是攻击者构造对抗样本的核心步骤。
  4. def random_resize_defense(...)随机化防御的核心:每次推理时以随机比例缩放输入。攻击者无法预知缩放比例,梯度计算就会失准。
  5. np.random.choice(scales)从预设的缩放比例中随机抽取一个,保证每次推理路径不一致。
  6. def jpeg_defense(...)预处理防御的一种:用JPEG压缩破坏对抗扰动的高频结构。
  7. img.save(buf, format='JPEG', quality=quality)将图像编码为JPEG格式,quality 越低压缩越狠,对抗扰动被清除得越彻底。
  8. def bit_depth_defense(...)特征压缩防御:将像素值量化到有限位数,抹平对抗扰动的精细结构。
  9. torch.round(x * (levels - 1)) / (levels - 1)量化操作:先乘再取整再还原,让连续的像素值被归并到离散层级。
  10. for name, defense_fn in defenses.items()遍历多种防御策略,逐一测试攻击成功率。
  11. sum(1 for p in preds if p != y.item()) / len(preds)统计模型被“骗过”的比例,即攻击成功率(ASR)。

常见误区

误区“被动防御就是在模型外面套个壳,不需要动模型本身,所以部署起来几乎不花什么成本。”

正解被动防御确实不需要重新训练模型,但“不需要训练”不等于“零成本”。首先,新增的预处理模块会带来额外的计算开销和推理延迟——人脸识别门禁系统如果每帧都做JPEG压缩,吞吐量可能下降30%。其次,防御策略需要针对具体场景调参(压缩质量选多少?随机缩放范围多大?),这需要安全测试和调优成本。最后,防御可能带来精度损失:特征压缩会让正常输入也变得模糊,降低模型在干净数据上的准确率。就像机场安检增加检查环节后,旅客通行速度会变慢,安检员工也要额外培训。

为何常见:人们容易把“不需要训练”简单等同为“零成本”,忽略了推理阶段计算开销和效果调优的代价。

误区“既然被动防御能抵御攻击,那就把所有防御措施都用上,让攻击成功率降到0%。”

正解防御的目标不是“完全抵御攻击”,而是在安全与可用性之间取得平衡。过度防御会带来严重副作用:极其强力的特征压缩会让正常图片也难以识别(精度大跌);多层随机化会让模型输出变得不稳定(同一张图多次推理结果不同);过度预处理可能使图像的语义信息丢失。更重要的是,“完全防御”在数学上是不可能的——攻击者可以设计针对防御策略的自适应攻击。就像机场安检,如果每个人都脱光衣服检查,安全性虽然提高了,但机场根本无法运营。合理的防御目标是:将攻击成功率压到可接受水平,同时保持正常的服务能力。

为何常见:安全领域“道高一尺魔高一丈”的思维让人本能地追求更强的防御,忽略了系统可用性这个同等重要的指标。

误区“随机化防御给输入添加随机噪声,让模型判断不准,这样攻击者也判断不准,大家都猜不对。”

正解随机化防御的目标是让攻击者的构造过程失效,而不是让模型“乱猜”。以随机缩放为例:防御的核心是让攻击者在计算梯度时不知道缩放比例,从而构造出“不适合本次缩放”的扰动。但当正常输入经过随机缩放时,模型依然能正确识别——因为模型训练时就见过各种尺度的图像,对缩放具有一定的鲁棒性。好的随机化防御应当在攻击者无效(攻击成功率低)和正常使用有效(干净样本精度高)之间保持平衡。如果随机化让正常输入也识别不了,那就不是防御,而是自我破坏。

为何常见:初学者看到“随机化”这个词,容易联想到“随机猜测”,混淆了“防御端的随机性”与“模型能力的随机性”。

误区“预处理就是给图像降噪,把对抗扰动去掉之后,剩下的就是没有噪声的原始干净图像。”

正解预处理(如JPEG压缩、去噪自编码器)无法完美“还原”出原始图像。它们只是利用“对抗扰动通常是高频小幅度噪声”这一特点,将扰动部分消除。但在这个过程中,正常的图像细节也会被一同丢失——JPEG压缩后图片的锐度必然下降,去噪后细小的纹理可能消失。实际上,预处理的目标不是“还原原图”,而是“让对抗样本在模型中的预测结果被纠正”。它可能生成一张与原图不同但语义相同(模型预测相同)的图像。就像安检的除尘工序,不能保证行李“焕然一新”,但能让藏匿的违禁品暴露出来。

为何常见:人们习惯性地把“去噪”理解为“还原”,忽视了去噪过程同时会损伤正常信息。

面试题

Q1. 对抗样本的核心特征是?

单选题 · easy

  • A.肉眼可见的大幅修改
  • B.对模型的输出造成显著影响
  • C.添加的扰动极小且隐蔽← 正确答案
  • D.只存在于自然语言处理领域

答案:C。对抗样本的关键特征有两个:扰动极小(人眼不可察)且能导致模型误判。选项C准确描述了“扰动极小且隐蔽”这一核心特征。A错误,对抗样本的扰动通常是微小甚至不可见的;B不完整,很多大扰动也能影响模型,但不属于“对抗样本”的范畴;D错误,对抗样本存在于视觉、语言、语音等多个AI领域。

Q2. 被动防御策略的主要特点是什么?

单选题 · easy

  • A.需要从头训练新的模型
  • B.不修改模型参数,在输入侧增加“安检环节”← 正确答案
  • C.只能防御白盒攻击
  • D.一定能抵御所有类型的对抗攻击

答案:B。被动防御的核心定位是在输入进入模型之前进行预处理或变换,如随机化缩放、JPEG压缩、色彩量化等,不需要修改模型内部参数。A错误,被动防御不重新训练模型;C错误,被动防御对黑盒攻击同样有效;D错误,没有哪种防御能保证抵御所有攻击。

Q3. 随机化防御的基本原理是?

单选题 · easy

  • A.使攻击者无法精确预估推理时的变换参数← 正确答案
  • B.训练模型识别所有攻击模式
  • C.用更大的模型替代原有模型
  • D.将输入图像永久加密

答案:A。随机化防御的核心是通过在推理阶段引入不可预测的随机变换(如随机缩放比例、随机填充大小),打破攻击者对模型输入输出映射的精确建模能力。攻击者无法预知本次推理的随机参数,其精心构造的对抗扰动就会失效。B属于对抗训练的范畴;C是修改模型结构,不是被动防御;D与对抗防御无关。

Q4. 对于输入扰动 $\delta$,对抗样本的构造目标可以表示为?

单选题 · mid

  • A.最大化 $\|\delta\|_p$ 且 $f(x+\delta)=f(x)$
  • B.最小化 $\|\delta\|_p$ 且 $f(x+\delta) \neq f(x)$← 正确答案
  • C.最小化 $\|\delta\|_p$ 且 $f(x+\delta)=f(x)$
  • D.最大化 $\|\delta\|_p$ 且 $f(x+\delta) \neq f(x)$

答案:B。对抗样本要在“伪装隐蔽”(扰动尽量小)与“攻击有效”(让模型判断错误)之间取得平衡。选项B正确表达了这两个目标。A和C都是“模型判断正确”,不符合攻击者意图;D的扰动最大化不符合“隐蔽性”要求。

Q5. 关于JPEG压缩作为预处理防御,下列哪项说法正确?

单选题 · mid

  • A.JPEG压缩能完美去除对抗扰动且不损失图像质量
  • B.JPEG压缩通过丢弃高频分量来破坏对抗扰动,但也会损失部分正常图像细节← 正确答案
  • C.JPEG压缩会增加对抗扰动的强度
  • D.JPEG压缩只在训练阶段有效

答案:B。对抗扰动通常以高频分量的形式存在,JPEG压缩的量化过程会丢弃高频信息,从而破坏扰动。但这种“清除”不是精准的,正常图像的高频细节(如纹理、边缘)也会被一同丢失。A错误,压缩必然带来信息损失;C错误,压缩是削弱扰动而非增强;D错误,JPEG压缩在推理阶段作为预处理使用。

Q6. 特征压缩防御的常见手段包括哪些?

多选题 · mid

  • A.降低图像的色彩深度← 正确答案
  • B.增大模型的参数量
  • C.对图像进行局部模糊化处理← 正确答案
  • D.反复执行压缩-解压循环← 正确答案

答案:ACD。特征压缩防御的核心是“降低输入的表达精度”,让对抗扰动没有足够的空间藏身。降低色彩深度(A)通过量化像素值抹平扰动;局部特征裁剪(C)通过模糊化让扰动衰减;压缩-解压循环(D)通过多次有损压缩让扰动逐次减弱。B(增大模型参数量)是修改模型而不是修改输入,不属于特征压缩。

Q7. 在评估防御策略时,需要综合考量哪些指标?

多选题 · mid

  • A.攻击成功率(ASR)← 正确答案
  • B.正常样本上的准确率← 正确答案
  • C.防御引入的计算开销← 正确答案
  • D.训练集的数据量大小

答案:ABC。一个优秀的防御策略需要在多个维度上取得平衡:攻击成功率(ASR)要低(A),正常样本的准确率不能下降太多(B),防御带来的额外计算开销要可接受(C)。D(训练集大小)是模型训练层面的因素,与防御策略的评估无关。

Q8. 攻击者使用“自适应攻击”(即已知防御策略的情况下构造对抗样本)时,哪种说法最准确?

单选题 · hard

  • A.防御策略仍然完全有效
  • B.防御策略的有效性可能大幅下降,因为攻击者可以针对防御机制优化扰动← 正确答案
  • C.自适应攻击只能攻击黑盒模型
  • D.随机化防御对自适应攻击免疫

答案:B。自适应攻击意味着攻击者完全了解防御机制(包括随机化的分布范围、JPEG压缩的质量参数等),并将这些防御操作纳入对抗样本的优化目标中。此时,防御策略的效果会大打折扣。即使是随机化防御,攻击者也可以通过期望梯度(对随机参数求期望)来构造平均有效的对抗样本。A和D过于乐观;C错误,自适应攻击同样可以针对白盒模型。

Q9. 关于被动防御策略的组合使用,下列说法正确的有?

多选题 · hard

  • A.多种防御策略叠加一定能达到"1+1>2"的效果
  • B.合理的组合应覆盖不同类型的攻击面← 正确答案
  • C.组合防御需要评估整体开销与收益← 正确答案
  • D.不同防御策略之间可能产生相互干扰← 正确答案

答案:BCD。防御组合的目标是覆盖更多攻击手段,而非简单叠加(A错误——某些防御组合可能互相干扰,例如强压缩会破坏随机缩放后图像的语义)。合理的组合应当像“纵深防御”一样,让每种策略应对不同类型的威胁(B),同时评估总开销(C),并注意策略之间的兼容性(D)。

Q10. 从信息论角度理解特征压缩防御,最准确的说法是?

单选题 · extreme

  • A.特征压缩减少了输入的信息量,使攻击者没有足够的信息来构造有效扰动
  • B.特征压缩通过增加输入的信息熵来迷惑攻击者
  • C.特征压缩本质上是在“信息保真度”和“扰动鲁棒性”之间进行权衡← 正确答案
  • D.特征压缩让模型对输入变化更敏感

答案:C。特征压缩(如色彩量化、区域模糊)通过有损变换删除了输入中“不必要的细节”,对抗扰动正是藏在这些细节中。压缩后的图像保留了“语义层面的关键信息”(如物体轮廓、大类颜色),但丢失了“像素级的精确值”。这是一种信息论意义上的权衡:牺牲部分信息保真度,换取对微小扰动的鲁棒性。A不准确——攻击者并不缺少信息,而是扰动被量化抹平;B错误,压缩是减少而非增加信息熵;D错误,压缩让模型对输入变化更“迟钝”而非更敏感。