小赵是内容安全团队的负责人,他手下的“数字审查员”——AI审核模型——每天要审视上百万张用户上传的图片。但最近团队遭遇了一种诡异的攻击方式:没有账号被盗,也没有人暴力破解,攻击者只是在一张违规图片上叠加了一层肉眼完全看不见的“透明纹路”,AI审查员便瞬间“失明”,把本该拦截的内容放了进来。这种“透明纹路”,就是对抗样本。它像高级魔术师的道具——观众看不出任何破绽,但负责“看”的人偏偏会看错。更棘手的是,攻击者会不断升级道具:有时换一种纹路,有时把纹路刻到文本里,有时直接打印成一张物理贴纸。面对这样的“幻术”,小赵意识到,防御不能停留在“看得更仔细”,而要从训练、预处理、集成、验证等多个层面系统加固。本文将沿着这条侦察与防御的路线,层层拆解对抗样本的生成原理、审核绕过路径,以及对抗训练、输入净化、集成防御、认证鲁棒性验证等应对策略。

岗位关联

内容审核模型正被“人眼看不见的扰动”绕过,掌握对抗样本防御技能,是 AI 安全从业者守住内容安全底线、完成安全攻防演练与模型加固的核心竞争力。

目录
  1. 可视化演示
  2. 对抗样本原理
  3. 攻击生成方法
  4. 审核绕过路径
  5. 对抗训练防御
  6. 输入预处理
  7. 集成与蒸馏
  8. 认证鲁棒验证
  9. 防御效果评估
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

动态演示对抗样本防御与审核绕过防护的核心机制,通过基础/核心/应用/扩展四种模式展示关键概念与交互流程。

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

对抗样本防御与审核绕过防护:对抗样本 对抗样本的生成原理与审核绕过机 图像与文本对抗攻击的典型方法 核心机制可视化 对抗样本防御与审核绕过防护整体架构与关键组件

对抗样本原理

上个月,审核团队收到一位用户的投诉:他上传了一张“蓝天白云”的风景照,却被系统拦截。小赵把图片放大十遍也没看出问题,直到他用像素差分工具检查,才发现图上被叠加了一层“人眼看不见的幻术纹路”。这就像一位经验丰富的安检员在审视X光片,正常乘客的行李里有一层极其淡薄的“纹理”,但某张行李图上的纹理,恰好激活了安检员脑中“一切正常”的信号——图片其实藏着违规内容,只是模型的眼睛被“纹路”骗住了。

攻击者在原始图片上施加的这层“透明纹路”,在AI领域叫对抗扰动,叠加扰动后的样本叫对抗样本。它并不是真正改变了图片的视觉内容,只要每个像素的变化幅度被控制在一个极小范围内,人眼便无法察觉,但模型的预测结果却可能发生180度翻转。为什么会这样?因为深度神经网络的决策边界在高维空间中被“摊薄”了:在人眼看来平滑连续的微小变化,映射到模型的高维特征空间,可能足以跨越一道“判别悬崖”。

对抗样本的数学定义很简洁。设原始样本为 \boldsymbol{x},模型参数为 \theta,攻击者构造的扰动为 \boldsymbol{\delta}:

根据攻击者掌握的信息多少,对抗攻击又分为白盒攻击(攻击者知道模型参数与梯度,像拿到了安检设备的设计图纸)和黑盒攻击(攻击者只看到输入输出,像隔着墙猜安检员的判断标准)。理解了“幻术纹路”的本质,小赵团队开始研究:这些纹路是如何被制造出来的?

xadv=x+δ,∥δ∥p≤ε,fθ(x)≠fθ(xadv)\displaystyle \boldsymbol{x}_{\text{adv}} = \boldsymbol{x} + \boldsymbol{\delta}, \qquad \|\boldsymbol{\delta}\|_p \le \varepsilon, \qquad f_{\theta}(\boldsymbol{x}) \ne f_{\theta}(\boldsymbol{x}_{\text{adv}})
这个公式说明:对抗样本就是在原始图像上叠加一个“受控的微小偏移”,让模型在肉眼看来几乎相同的两幅图上给出不同判断。约束 \|\boldsymbol{\delta}\|_p \le \varepsilon 是“幻术纹路不能被人看见”的数学化表达。
  1. 原始样本 \boldsymbol{x}审核模型原本能正确识别的图片,例如一张“正常”的风景照,模型给出“正常”的判断。
    x∈RW×H×C\boldsymbol{x} \in \mathbb{R}^{W \times H \times C}
  2. 扰动 \boldsymbol{\delta}攻击者在每个像素上叠加的微小偏移向量。用 L_p 范数(常用 L_\infty 或 L_2)约束其大小,保证改动轻微、人眼无感。
    ∥δ∥p=(∑i∣δi∣p)1/p≤ε\|\boldsymbol{\delta}\|_p = \left( \sum_{i} |\delta_i|^p \right)^{1/p} \le \varepsilon
  3. 模型判断翻转在扰动前后,模型 f_{\theta} 对两个样本给出不同的类别结果,这就是“审核被绕过”的根源。
    fθ(x)≠fθ(xadv)f_{\theta}(\boldsymbol{x}) \ne f_{\theta}(\boldsymbol{x}_{\text{adv}})

攻击生成方法

搞清楚了原理,攻击者手里就有了工具箱。小赵在研究时发现,生成对抗样本的方法像配钥匙的工艺。FGSM 像一把“万能模板”,沿着模型最容易出错的方向,给所有像素统一补上一记推力;PGD 则是耐心的开锁匠,反复尝试、每步只微微用力,却能在锁芯里找到更刁钻的角度;CW 更像为每把锁单独打磨的定制钥匙,寻找到能骗过模型的最短“钥匙齿痕”。

这些方法的核心都是利用梯度信息。对神经网络来说,梯度就是模型在“小声汇报”:想让这个样本的损失变大,应该往这个方向调整输入。攻击者顺着梯度方向给输入“吹一口气”,模型的置信度便开始倾斜。如果一口气不够,就反复吹——这就是迭代攻击的基本思想。

FGSM(快速梯度符号法)是最经典的攻击方法,它的计算过程如下:

PGD 是 FGSM 的迭代升级版:每步沿梯度方向走一小步,再投影回 L_\infty 球内,反复多次。CW 攻击则把“找到最小扰动”转化为优化问题,用拉格朗日方法求解。迁移攻击利用一个替代模型生成对抗样本,再投放到目标黑盒模型上——相当于用“同款锁芯的配钥匙经验”去开别的锁。工具越多,防线越要全面,小赵开始逐一排查审核系统有哪些可被利用的缺口。

xadv=x+ε⋅sign⁡(∇xL(fθ(x),y正常))\displaystyle \boldsymbol{x}_{\text{adv}} = \boldsymbol{x} + \varepsilon \cdot \operatorname{sign}\left( \nabla_{\boldsymbol{x}} \mathcal{L}\left( f_{\theta}(\boldsymbol{x}), y_{\text{正常}} \right) \right)
公式的含义是:计算损失函数对输入图像的梯度,取每个分量的正负号(即“方向”),乘以一个很小的步长 \varepsilon,叠加到原图上。这相当于沿着“让模型最难受”的方向统一推一下,成本极低却非常有效。
  1. 梯度方向 \nabla_{\boldsymbol{x}} \mathcal{L}损失函数对输入图像每个像素的偏导数,表示“每个像素朝哪个方向改变一点点,会让模型的损失增大最多”。
    ∇xL∈RW×H×C\nabla_{\boldsymbol{x}} \mathcal{L} \in \mathbb{R}^{W \times H \times C}
  2. 符号函数 \operatorname{sign}把梯度向量中每个分量的数值压缩成 +1 或 -1,只保留方向、忽略大小,保证扰动均匀且微小。
    sign⁡(x)={1,x>0−1,x<0\operatorname{sign}(x) = \begin{cases} 1, & x > 0 \\ -1, & x < 0 \end{cases}
  3. 步长 \varepsilon 控制乘以 \varepsilon 让每个像素的改动幅度不超过 \varepsilon,从而满足“人眼不可察觉”的约束。\varepsilon 越大,攻击越强,但越容易被肉眼发现。
    ∥xadv−x∥∞≤ε\|\boldsymbol{x}_{\text{adv}} - \boldsymbol{x}\|_{\infty} \le \varepsilon

审核绕过路径

有了“幻术纹路”,攻击者还要把它用在刀刃上——找到审核系统最薄弱的入口。这就好比小偷拿到了“透明墨水”,还要决定往哪张证件上写:是PS一张通行证、改写一行身份信息,还是把信息藏在证件夹层里。内容审核系统通常包含图像检测、文本检测和多模态融合判断,绕过路径也沿着这三条线展开。

图像审核路径上,攻击者把违规图片(如违禁品、敏感画面)加上对抗扰动,使其在视觉上像一张普通风景照,人眼与模型“看起来”都正常,但若把扰动去掉,内容便会原形毕露。文本路径上,攻击者使用同音字、中英文混排、谐音替换等方式改写敏感词,使词表匹配失效,同时保留语义的“攻击性”。多模态路径则更加隐蔽:图片与文字各打各的掩护,让审核系统无法从“图文一致性”上发现问题。

审核绕过可以抽象为一个优化问题:攻击者寻找扰动 \boldsymbol{\delta},使联动审核模型对带扰动样本的输出收敛到“正常”类别:

此外,对抗补丁是更具物理感的绕过手段:攻击者把扰动打印成一张小贴纸,直接贴在图片角落,检测器就可能被“一叶障目”。知道了攻击者会在哪些环节下手,防御团队开始对症下药,第一味药便是最经典的对抗训练。

min⁡δ  L(fθ(x违规+δ),  y正常),s.t. ∥δ∥∞≤ε\displaystyle \min_{\boldsymbol{\delta}} \; \mathcal{L}\left( f_{\theta}\left( \boldsymbol{x}_{\text{违规}} + \boldsymbol{\delta} \right), \; y_{\text{正常}} \right), \qquad \text{s.t. } \|\boldsymbol{\delta}\|_{\infty} \le \varepsilon
这个目标函数表达了攻击者的意图:在保证改动不可见(L_\infty 约束)的前提下,让审核模型把违规内容判定为正常内容。模型 f_{\theta} 可以代表图像分类器、文本分类器或多模态融合网络。
  1. 攻击对象\boldsymbol{x}_{\text{违规}} 是真实含有违规内容的原始样本,“正常”标签 y_{\text{正常}} 是攻击者希望欺骗模型给出的结果。
    x违规∈RW×H×C\boldsymbol{x}_{\text{违规}} \in \mathbb{R}^{W \times H \times C}
  2. 损失最小化让模型对扰动后样本的预测分布尽量接近“正常”类别的独热分布,相当于“教”模型把违规内容看顺眼。
    min⁡δ  L(fθ(x违规+δ),  y正常)\min_{\boldsymbol{\delta}} \; \mathcal{L}\left( f_{\theta}(\boldsymbol{x}_{\text{违规}} + \boldsymbol{\delta}), \; y_{\text{正常}} \right)
  3. 约束条件L_\infty 范数约束把每个像素的最大改动限制在 \varepsilon 内,对应“透明墨水不能留下肉眼可见的痕迹”。
    ∥δ∥∞=max⁡i∣δi∣≤ε\|\boldsymbol{\delta}\|_{\infty} = \max_i |\delta_i| \le \varepsilon

对抗训练防御

最朴素的防御思路,是“让审查员见过所有骗术”。小赵组织了一场大规模“视力训练”:把已知攻击手法生成的对抗样本混入正常数据集,反复训练模型。这就像培训防诈骗专员时,把市面上所有的诈骗话术对着他念十遍,以后一听到类似套路,他脑子里就会自动拉响警报。

这个思路在机器学习中叫对抗训练。它不再假设训练数据和测试数据同分布,而是假定“测试时攻击者会在输入上施加小扰动”,因此训练时就要让模型在扰动后的样本上同样保持正确。对抗训练的核心是一个 min-max 优化问题:外层让模型尽量稳健,内层让攻击者尽量凶猛。

对抗训练的目标函数如下:

工程上,用 PGD 对抗训练(用 PGD 攻击生成训练样本)通常比 FGSM 对抗训练更稳健;TRADES 方法则在损失中显式引入“自然精度与鲁棒精度的差”,让两者的权衡更可控。对抗训练过程还可以配合数据增强,让审查员见到的“骗术”更多样。小赵很快发现,只靠“见过”不够,遇到没见过的攻击变种,审查员照样会看走眼,于是他把目光转向了第二道防线:给输入做净化。

min⁡θ  1n∑i=1n[L(fθ(xi),yi)+β⋅max⁡∥δ∥∞≤εL(fθ(xi+δ),yi)]\displaystyle \min_{\theta} \; \frac{1}{n} \sum_{i=1}^{n} \left[ \mathcal{L}\left( f_{\theta}\left( \boldsymbol{x}_i \right), y_i \right) + \beta \cdot \max_{\|\boldsymbol{\delta}\|_{\infty} \le \varepsilon} \mathcal{L}\left( f_{\theta}\left( \boldsymbol{x}_i + \boldsymbol{\delta} \right), y_i \right) \right]
公式左边第一项要求模型对正常图片保持准确,第二项要求模型对“最难缠的对抗样本”也保持准确。\beta 是平衡两项的权重:\beta 太大,模型为了防御可能连正常图片都认不清;\beta 太小,防御效果又不足。
  1. 正常样本损失\mathcal{L}(f_{\theta}(\boldsymbol{x}_i), y_i) 衡量模型在原始正常样本上的预测与真实标签的差距,保证不因防御牺牲太多正常识别能力。
    L(fθ(xi),yi)\mathcal{L}\left( f_{\theta}(\boldsymbol{x}_i), y_i \right)
  2. 最坏扰动损失\max_{\|\boldsymbol{\delta}\|_{\infty} \le \varepsilon} 表示在允许的扰动范围内寻找让损失最大的那一个扰动,即攻击者视角下“最危险”的样本。
    max⁡∥δ∥∞≤εL(fθ(xi+δ),yi)\max_{\|\boldsymbol{\delta}\|_{\infty} \le \varepsilon} \mathcal{L}\left( f_{\theta}\left( \boldsymbol{x}_i + \boldsymbol{\delta} \right), y_i \right)
  3. 权衡系数 \beta控制“正常精度”与“鲁棒精度”的优先级。实际工程中常先用小 \beta 起步,再逐步加大,观察两类精度的变化。
    β∈[0,1]\beta \in [0, 1]

输入预处理

既然“人”不容易改,那就在“信号”上动手脚。小赵给所有上传图片加了一道“安检预处理”:先经过压缩、去噪、随机缩放,把可能藏在像素里的幻术纹路抹掉或打乱。这就像给每张X光片先过一次“纱网”,把细小的异物滤掉一部分,再让医生看片子,清晰度和可靠性都提高了。

这些方法被称为输入预处理防御,其核心假设是:对抗扰动通常表现为“脆弱的高频成分”,而正常内容的语义结构是“稳健的低频成分”。通过去噪、压缩、随机化,可以把脆弱的高频扰动削弱,让模型看到更“干净”的输入。常见的图像预处理操作包括高斯去噪、中值滤波、JPEG 压缩、随机缩放与填充等。

以高斯去噪为例,它用一个二维高斯核与图像做卷积:

JPEG 压缩则利用 DCT 变换把图像转到频域,丢弃能量较低的高频分量;随机化处理在推理前对输入做随机大小的缩放与填充,让攻击者计算的“精确坐标”失效;特征压缩将连续像素值量化到更少的离散级别,减小扰动可作用的“空间”。预处理是低成本的第一道防线,但它有个致命弱点:如果攻击者知道你会做预处理,就可以反过来把扰动设计得“不怕压缩”。所以它只能作为辅助,不能单独依赖,小赵决定给审查团队装上“多重保险”。

x^=x∗Gσ,Gσ(u,v)=12πσ2e−u2+v22σ2\displaystyle \hat{\boldsymbol{x}} = \boldsymbol{x} \ast G_{\sigma}, \qquad G_{\sigma}(u, v) = \frac{1}{2\pi\sigma^2} e^{-\frac{u^2 + v^2}{2\sigma^2}}
高斯核相当于一个“磨砂镜片”:它把每个像素的值与周围像素加权平均,从而把像素级的高频抖动抹平。\sigma 越大,磨砂效果越强,扰动越难存活,但图片也会越模糊。
  1. 卷积操作 \ast把高斯核在图像上滑动,每个新像素值是周围像素的加权平均,实现平滑效果。
    x^(i,j)=∑u,vGσ(u,v)⋅x(i+u,j+v)\hat{\boldsymbol{x}}(i, j) = \sum_{u, v} G_{\sigma}(u, v) \cdot \boldsymbol{x}(i+u, j+v)
  2. 高斯核 G_{\sigma}权重随距离呈钟形衰减,中心近处的像素权重大,远处权重小;\sigma 控制衰减速度。
    Gσ(u,v)=12πσ2e−u2+v22σ2G_{\sigma}(u, v) = \frac{1}{2\pi\sigma^2} e^{-\frac{u^2+v^2}{2\sigma^2}}

集成与蒸馏

单打独斗容易失手,那就组队。小赵把三个“审美风格不同”的审查模型组成委员会:一个擅长看构图,一个擅长看颜色分布,一个擅长看边缘纹理——三者独立判断、多数投票。即使单个模型被骗,只要另外两个投了“违规”,违规内容依然会被拦住。这就像医院里的多学科会诊,一位医生看走眼,另一位医生能纠回来。

除了“多人会诊”,还有一条经验传承路线:模型蒸馏。把一个复杂而强大的“老专家”模型的知识,浓缩到一个小巧的“学生”模型里。学生模型学到的不是老专家每一个细微偏好,而是他“抓大放小”的判断框架——这样的学生往往没那么容易被细小扰动带偏。

多模型集成的预测可以表示为:

蒸馏过程中,教师模型使用“温度”软化后的概率分布作为学生的监督信号:

随机化推理是另一条轻量路线:每次推理前给输入加一点随机噪声,让攻击者精心计算的梯度方向“对不准靶心”。委员会和经验传承显著提升了鲁棒性,但也带来计算开销。小赵明白:防御不是无止境地堆模型,而是要在资源与安全之间找到平衡。于是他开始研究一条更有“硬保证”的路线——认证鲁棒性。

pens(c)=1K∑k=1Ksoftmax⁡(zk(x))(c)\displaystyle p_{\text{ens}}^{(c)} = \frac{1}{K} \sum_{k=1}^{K} \operatorname{softmax}\left( z_k(\boldsymbol{x}) \right)^{(c)}
qi(c)=exp⁡(zi(c)/T)∑jexp⁡(zi(j)/T)\displaystyle q_i^{(c)} = \frac{\exp\left( z_i^{(c)} / T \right)}{\sum_{j} \exp\left( z_i^{(j)} / T \right)}
集成公式把 K 个模型的预测概率取平均,相当于让每个审查员拥有独立投票权。蒸馏公式中的温度 T 越大,概率分布越平滑,学生模型学到的是“类别间的相似关系”而不是“非黑即白的硬标签”,这种平滑的决策边界对小扰动更不敏感。
  1. 各模型的 logitsz_k(\boldsymbol{x}) 是第 k 个模型输出的未归一化分数向量,softmax 把它变成概率分布。
    softmax⁡(zk(x))(c)=ezk(c)(x)∑jezk(j)(x)\operatorname{softmax}\left( z_k(\boldsymbol{x}) \right)^{(c)} = \frac{e^{z_k^{(c)}(\boldsymbol{x})}}{\sum_j e^{z_k^{(j)}(\boldsymbol{x})}}
  2. 集成平均对 K 个模型的概率分布逐类别求平均。即使某个模型被扰动欺骗给出错误的高置信度,其他模型也能拉低它的影响。
    pens(c)=1K∑k=1Ksoftmax⁡(zk(x))(c)p_{\text{ens}}^{(c)} = \frac{1}{K} \sum_{k=1}^{K} \operatorname{softmax}\left( z_k(\boldsymbol{x}) \right)^{(c)}
  3. 温度 T 软化T>1 时,logits 被缩小,softmax 输出的分布变得更“平缓”,这让学生看到类间更细粒度结构,而非只盯住最大值。
    qi(c)=exp⁡(zi(c)/T)∑jexp⁡(zi(j)/T),T>1q_i^{(c)} = \frac{\exp(z_i^{(c)}/T)}{\sum_j \exp(z_i^{(j)}/T)}, \quad T > 1

认证鲁棒验证

前面所有防御都像“消防演练”——防不防得住,得看实际发生火灾时运气如何。而认证鲁棒性,则像是在建造大楼时做“结构承重测试”:通过数学手段证明,在大楼能承受的震级范围以内,结构绝对不会倒塌。对模型来说,就是给出一个保证:只要扰动幅度不超过某个界限,模型的判断绝对不会改变。

这类方法不依赖“它以前没见过这种骗术”,而是从模型结构和推理过程中推导出一个数学上安全的“半径”。一旦拿到这个半径,审核系统的运维人员就能自信地说:“在这个扰动范围内,无论攻击者怎么试,模型都不可能被绕过。”

随机平滑是近年最实用的认证方法之一。它给输入加上高斯噪声,对大量扰动后的副本做预测并统计投票,从而构造一个平滑分类器:

在此基础上,可以通过概率上限推导出认证半径:

认证鲁棒性给了审核系统一个“硬承诺”,但代价是计算成本高、认证半径有限。区间扩展通过符号化的区间运算在输入邻域内传播边界,形式化验证则借助 SMT 求解器对模型性质做严谨证明。小赵手上有了一套从“经验防御”到“认证防御”的组合拳,但还有一个问题悬而未决:怎么证明这些防御真的有用?

g(x)=arg⁡max⁡c∈C  Pδ∼N(0,σ2I)[f(x+δ)=c]\displaystyle g(\boldsymbol{x}) = \arg\max_{c \in \mathcal{C}} \; \mathbb{P}_{\boldsymbol{\delta} \sim \mathcal{N}(0, \sigma^2 I)} \left[ f(\boldsymbol{x} + \boldsymbol{\delta}) = c \right]
R=σ2(Φ−1(pA)−Φ−1(pB))\displaystyle R = \frac{\sigma}{2} \left( \Phi^{-1}\left( p_A \right) - \Phi^{-1}\left( p_B \right) \right)
第一个公式描述“带噪声投票的平滑分类器”:对输入加高斯噪声后采样多次,取出现频率最高的类别作为输出。第二个公式给出认证半径:如果最可能类别 A 的概率 p_A 显著高于第二类别 B 的概率 p_B,就能证明在半径 R 内分类器的输出不会翻转。
  1. 噪声投票\boldsymbol{\delta} 从高斯分布中采样,f 对每个加噪副本给出预测,统计各类别出现频率。这个过程相当于让审查员戴上“加了随机雪花点的眼镜”看同一张图,看多数情况下他认出什么。
    Pδ∼N(0,σ2I)[f(x+δ)=c]\mathbb{P}_{\boldsymbol{\delta} \sim \mathcal{N}(0, \sigma^2 I)} \left[ f(\boldsymbol{x} + \boldsymbol{\delta}) = c \right]
  2. 平滑分类器g(\boldsymbol{x}) 取投票概率最大的类别,它是原始分类器 f 的“平滑版本”,对局部扰动具有天然的稳定性。
    g(x)=arg⁡max⁡c  pc(x)g(\boldsymbol{x}) = \arg\max_{c} \; p_c(\boldsymbol{x})
  3. 认证半径推导p_A 与 p_B 分别为最高票和第二高票的概率,\Phi^{-1} 是标准正态分布分位函数的逆。两类的概率优势越大,可认证的半径越大。
    R=σ2(Φ−1(pA)−Φ−1(pB))R = \frac{\sigma}{2} \left( \Phi^{-1}(p_A) - \Phi^{-1}(p_B) \right)

防御效果评估

做了这么多防御方案,到底有没有用?小赵布置了一场“红蓝对抗演练”:红队使用多种攻击方法轮番轰炸,蓝队记录每一类攻击下的表现,最终形成一份“体检报告”。就像不能只凭跑步成绩判断一个人的健康,评估防御效果也不能只看单一指标。

攻击成功率骤降,可能是防御强了,也可能是攻击者没调好参数。一个科学的评估体系需要覆盖多个维度:鲁棒精度(在扰动下模型保持正确的比例)、自然精度(防御引入后正常样本是否被误伤)、攻击成功的代价(扰动越大才越容易骗过模型,说明防御越强)以及推理时延与算力开销。

鲁棒精度是核心指标之一,定义如下:

基准评测库(如 RobustBench)统一了模型结构、攻击预算与评估流程,让不同防御方案的结果可以直接对比。小赵最终向领导汇报时写道:对抗样本防御不是一劳永逸的改装,而是一场持续的攻防迭代。只有不断训练、净化、组队、验证、体检,内容审核系统才能在看不见的战场上守住底线。

RobustAcc(fθ;ε)=1N∑i=1N1{fθ(Att⁡ε(xi))=yi}\displaystyle \text{RobustAcc}\left( f_{\theta}; \varepsilon \right) = \frac{1}{N} \sum_{i=1}^{N} \mathbb{1}\left\{ f_{\theta}\left( \operatorname{Att}_{\varepsilon}(\boldsymbol{x}_i) \right) = y_i \right\}
这里 \operatorname{Att}_{\varepsilon} 表示一个扰动预算为 \varepsilon 的攻击方法。鲁棒精度计算的是:对所有测试样本施加攻击后,模型仍然给出正确标签的比例。这个指标要把攻击者、扰动预算和数据集都固定下来,才能在不同防御方案间横向比较。
  1. 攻击生成\operatorname{Att}_{\varepsilon}(\boldsymbol{x}_i) 表示对样本 \boldsymbol{x}_i 施加扰动预算为 \varepsilon 的攻击,得到一个对抗样本。
    xiadv=Att⁡ε(xi),∥xiadv−xi∥∞≤ε\boldsymbol{x}_i^{\text{adv}} = \operatorname{Att}_{\varepsilon}(\boldsymbol{x}_i), \quad \| \boldsymbol{x}_i^{\text{adv}} - \boldsymbol{x}_i \|_{\infty} \le \varepsilon
  2. 正确性判定\mathbb{1}\{\cdot\} 是示性函数,当模型对对抗样本的预测等于真实标签时为 1,否则为 0。
    1{fθ(xiadv)=yi}\mathbb{1}\left\{ f_{\theta}(\boldsymbol{x}_i^{\text{adv}}) = y_i \right\}
  3. 平均准确率对所有测试样本的判定结果取平均,得到该攻击下的鲁棒精度。
    1N∑i=1N1{fθ(xiadv)=yi}\frac{1}{N} \sum_{i=1}^{N} \mathbb{1}\left\{ f_{\theta}(\boldsymbol{x}_i^{\text{adv}}) = y_i \right\}

AI 应用场景

内容审核红蓝对抗演练

阶段:安全测试与模型加固

解决的问题:审核系统上线前缺乏对抗鲁棒性验证,传统功能测试只能发现“规则漏洞”,无法发现“视觉幻术”类的算法漏洞。红队用对抗攻击工具生成对抗样本库,对审核模型进行“视力体检”,找出可能在攻防中失守的薄弱环节。

具体案例:某 UGC 平台在季度巡检中发现,合规系统被用户通过叠加像素扰动的方式绕过了“违禁品识别”。安全团队随即用 FGSM 和 PGD 生成对抗样本,在回归测试集上评估,发现模型鲁棒精度仅 62%。据此启动对抗训练加固,两周后鲁棒精度提升至 91%,正常内容误判率仅上升 0.8%。

电商平台违禁商品图片检测加固

阶段:模型训练与部署监控

解决的问题:电商平台的商品图片检测模型可能被卖家通过轻微调色、加噪声、局部压缩等方式“打扮”成合规图片。对抗训练让模型对这类低成本篡改更鲁棒,从源头减少违禁商品漏检。

具体案例:某跨境电商平台对毒品类违禁品检测器做 PGD 对抗训练,在每轮训练中混入 10% 的对抗样本。治理后,刻意篡改的违禁图片拦截率从 71% 提升至 96%,正常商品图误判率仅上升 1.2%,模型推理耗时变化可忽略。

大模型对话安全防护

阶段:防御策略配置

解决的问题:大模型客服系统常面临“提示注入 + 对抗后缀”攻击。攻击者在不改变语义的前提下,附加一串精心构造的字符,让安全分类器把恶意指令判为无害。通过输入随机化与多分类器集成,可显著削弱这类攻击。

具体案例:某金融客服机器人在违规检测链路中加入“同义词随机替换”模块,对输入文本做轻度扰动后再送入敏感词分类器。实测对对抗后缀攻击的拦截率从 65% 提升至 92%,正常用户文本的误拦截率保持稳定。

Python 演示

python78 行
# -*- coding: utf-8 -*-"""对抗样本生成与对抗训练防御演示"""import numpy as np  class SimpleModel:    """简化的线性审核模型, 用于演示攻击与防御"""    def __init__(self, seed=42):        rng = np.random.default_rng(seed)        self.w = rng.random(8)        self.b = rng.random()     def predict(self, x):        return np.dot(x, self.w) + self.b     def fit(self, X, y, epochs=3):        for _ in range(epochs):            preds = np.dot(X, self.w) + self.b            err = y - (preds > 0.5).astype(float)            self.w += 0.1 * np.dot(X.T, err) / len(X)            self.b += 0.1 * np.mean(err)     def __call__(self, x, return_grad=False):        z = np.dot(x, self.w) + self.b        if return_grad:            return self.w        return z  def fgsm_attack(model, x, eps=0.5):    """快速梯度符号法: 沿损失增大方向生成对抗样本"""    grad = model(x, return_grad=True)    delta = eps * np.sign(grad)    return np.clip(x + delta, 0.0, 1.0)  def pgd_attack(model, x, eps=0.5, alpha=0.05, steps=5):    """投影梯度下降: 迭代攻击并投影回L_inf球"""    x_adv = x.astype(np.float64).copy()    for _ in range(steps):        grad = model(x_adv, return_grad=True)        x_adv = x_adv + alpha * np.sign(grad)        x_adv = np.clip(x_adv, x - eps, x + eps)        x_adv = np.clip(x_adv, 0.0, 1.0)    return x_adv  def adversarial_training(model, X, y, eps=0.5, epochs=3):    """对抗训练: 用对抗样本扩充训练集再重新训练"""    X_aug, y_aug = [], []    for i in range(len(X)):        X_aug.append(X[i])        X_aug.append(fgsm_attack(model, X[i], eps=eps))        y_aug.append(y[i])        y_aug.append(y[i])    model.fit(np.array(X_aug), np.array(y_aug), epochs=epochs)    return model  def main():    rng = np.random.default_rng(42)    X = rng.random((100, 8))    y = (X[:, 0] + X[:, 1] > 1).astype(int)     model = SimpleModel()    model.fit(X, y)     x_sample = X[0]    print("原始logits:", round(model(x_sample), 4))    print("攻击后logits:", round(model(fgsm_attack(model, x_sample)), 4))    print("PGD攻击后logits:", round(model(pgd_attack(model, x_sample)), 4))     model = adversarial_training(model, X, y)    print("加固后FGSM攻击logits:", round(model(fgsm_attack(model, x_sample)), 4))  if __name__ == "__main__":    main()
目的:用最小可运行的线性模型演示 FGSM/PGD 攻击如何改变模型输出,以及对抗训练如何降低攻击影响。
  1. grad = model(x, return_grad=True)请求模型的梯度,线性模型的梯度就是权重向量本身,用于构造扰动方向。
  2. delta = eps * np.sign(grad)只保留方向并限制幅度,这是 FGSM 攻击的核心一步。
  3. x_adv = x_adv + alpha * np.sign(grad)PGD 每步沿梯度方向前进一小步,比 FGSM 更精细。
  4. np.clip(x_adv, x - eps, x + eps)把迭代结果投影回 L∞ 球内,保证扰动不超过预算。
  5. X_aug.append(fgsm_attack(model, X[i], eps=eps))在对抗训练中为每个样本生成对抗版本,让模型看到“骗术”。
  6. model.fit(np.array(X_aug), np.array(y_aug), epochs=epochs)用原样本与对抗样本混合训练,提升模型鲁棒性。

常见误区

误区对抗扰动看起来像噪点,我用高斯滤波、中值滤波把图片“磨皮”一下,不就把幻术纹路抹掉了吗?

正解对抗扰动是沿着模型梯度方向精心计算的,与随机噪声有本质区别。它的能量虽小,但方向恰好致命。如果攻击者知道防御方会做滤波,可以把扰动设计成“滤波后仍然存在”的形式,例如把扰动隐藏在低频区域,或者把预处理过程纳入攻击优化目标,生成“抗压缩”的对抗样本。因此预处理防御只能提高攻击成本,不能保证绝对安全。

为何常见:人眼看到的对抗样本确实像一层细微颗粒,很容易被直观理解成“可清除的噪点”。

误区模型已经用对抗样本训练过了,以后任何对抗攻击都逃不过它的火眼金睛。

正解对抗训练只对“训练时见过的扰动类型”有效。如果扰动预算 ε 更大、攻击方法更强(如从 FGSM 换成 PGD 或 CW),或者扰动被做成物理世界的贴纸,模型依然可能被绕过。此外对抗训练会引起鲁棒性与自然精度的权衡,训练过头会牺牲正常场景的体验。

为何常见:人们容易把“看过很多走遍天下的样本”误解为“看过了全世界”,忽略了对抗样本所在的输入空间是无限且连续的高维空间,训练只能覆盖其中非常有限的子集。

误区我的审核模型不对外开源,攻击者不知道权重和梯度,肯定没法生成对抗样本。

正解黑盒攻击有两条被广泛验证的路径:一是迁移攻击,攻击者用公开的预训练模型做代理,在其上生成对抗样本,再投放到目标黑盒模型;二是查询攻击,攻击者反复提交输入、观察输出变化,逐步估计梯度。真实世界的大量绕过事件正是利用公开模型生成的扰动直接投放到业务系统。

为何常见:把“不知道内部参数”等同于“无法被攻击”,忽略了模型输入输出关系本身就是可以被观测和建模的。

误区对抗攻击的成功率从 98% 降到 5%,说明我的防御方案非常成功。

正解攻击成功率低可能只是攻击者没调好参数。科学评估需要同时报告鲁棒精度(多种攻击下)、自然精度(防御后正常样本是否被误伤)、攻击者的扰动预算 ε 以及计算开销。如果为了防御把正常图片的误判率推到 30%,那审核系统的真实可用性已经崩溃,即使攻击成功率再低也没有意义。

为何常见:人们喜欢用单一数字做绩效判断,但“安全收益”与“业务损失”往往是一对需要显式权衡的指标。

面试题

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

单选题 · easy

  • A.肉眼无法察觉的微小扰动
  • B.能显著改变模型预测结果← 正确答案
  • C.只在图像识别领域出现
  • D.必须使用深层神经网络

答案:B。对抗样本的本质是“小扰动 + 模型误判”,B 最准确。A 只是表象,C 错在文本、语音领域同样存在对抗样本,D 更是无依据的误解。

Q2. FGSM 攻击生成对抗样本时利用了什么信息?

单选题 · easy

  • A.模型损失的负梯度方向
  • B.模型损失的正梯度方向← 正确答案
  • C.训练数据的类别分布
  • D.网络的权重初始化值

答案:B。FGSM 沿损失增大的方向(正梯度方向)给输入叠加扰动,公式为 x_adv = x + ε·sign(∇L)。负梯度方向会使损失减小,属于“误导”而非攻击;类别分布与权重初始化与攻击无关。

Q3. 以下哪些属于对抗防御的常用手段?

多选题 · mid

  • A.对抗训练扩充样本← 正确答案
  • B.输入缩放与去噪← 正确答案
  • C.增加模型参数量
  • D.随机化输入与投票← 正确答案

答案:ABD。对抗训练让模型见过扰动样本,输入缩放与去噪破坏扰动结构,随机化输入与投票让攻击者难以精确瞄准。增加参数量并不能直接提升鲁棒性,有时反而会加剧过拟合。

Q4. 对抗训练的核心优化目标是什么?

单选题 · mid

  • A.最小化正常样本的交叉熵
  • B.最小化扰动后的置信度
  • C.最小化最坏扰动下的损失← 正确答案
  • D.最大化对扰动的敏感度

答案:C。对抗训练是 min-max 优化:内层求最坏扰动,外层让模型在该扰动下损失最小化。只最小化正常样本的损失是普通训练;最大化敏感度与防御目标完全相反。

Q5. 模型蒸馏能帮助提升鲁棒性的主要原因是?

单选题 · mid

  • A.学生模型参数量更少
  • B.学到更平滑的决策边界← 正确答案
  • C.教师模型输出更多高频信息
  • D.学生模型天然免疫攻击

答案:B。蒸馏通过温度 T 软化教师模型的输出分布,让学生学到类别间相似关系,从而形成平滑决策边界,小扰动不容易造成大幅翻转。参数量减少只是伴随现象,不是鲁棒性来源;学生模型并不能天然免疫攻击。

Q6. 黑盒场景下攻击者有哪些可行路径?

多选题 · mid

  • A.使用代理模型生成迁移样本← 正确答案
  • B.根据置信度反馈估计梯度← 正确答案
  • C.直接获取模型原始梯度
  • D.反复查询输入输出对← 正确答案

答案:ABD。黑盒攻击常用迁移攻击(代理模型)和查询攻击(观察输出规律)。直接获取原始梯度是白盒攻击的特权,黑盒场景下做不到。

Q7. 随机平滑认证鲁棒性提供保证的前提是什么?

单选题 · extreme

  • A.攻击者的扰动服从均匀分布
  • B.基分类器对所有样本判断正确
  • C.噪声采样投票满足统计置信← 正确答案
  • D.模型必须使用卷积结构

答案:C。随机平滑通过大量加噪采样估计类别概率,只有在采样量足够大、置信度计算满足统计学要求时,才能给出可靠的认证半径。攻击扰动不需要服从特定分布;基分类器允许犯错,只是需要多数类概率优势。

Q8. 为什么 JPEG 压缩不能作为完美的对抗防御?

单选题 · hard

  • A.压缩后图片无法被系统识别
  • B.攻击者可自适应压缩过程← 正确答案
  • C.压缩只对灰度图片有效
  • D.压缩会引入不可消除冗余

答案:B。若攻击者知道防御流程包含 JPEG 压缩,可以把压缩操作也纳入梯度计算,生成“压缩后依然有效”的扰动。此时压缩不仅不能防御,反而可能被利用。A、C、D 均不符合实际机制。

Q9. 关于鲁棒性与自然精度的权衡,下列说法正确的有?

多选题 · hard

  • A.对抗训练通常带来自然精度下降← 正确答案
  • B.TRADES 通过损失加权控制权衡← 正确答案
  • C.评估防御只用看攻击成功率
  • D.输入预处理几乎不影响自然精度← 正确答案

答案:ABD。对抗训练把模型参数向“对扰动不敏感”的方向调整,常以自然精度下降为代价。TRADES 显式权衡两项损失。预处理在输入侧操作,不改变模型权重,通常自然精度损失较小。C 错在单一指标无法全面评估。

Q10. 内容审核场景中“对抗补丁”是指什么?

单选题 · easy

  • A.在图片角落贴可打印的小图案← 正确答案
  • B.用随机噪声覆盖整张图片
  • C.删除图片的 EXIF 元数据
  • D.对图片做无损压缩处理

答案:A。对抗补丁是经过优化生成的物理可打印图案,贴在图片局部即可让检测器产生误判。用噪声覆盖整图会破坏内容,删除 EXIF 与压缩属于常规操作而非攻击手段。