跳到正文
AI 知识地图 0.18 · 2026-07-30
关于与纠错文字目录 / Search
理解原理

对抗鲁棒性:在明确扰动集合内寻找最坏情况,而非宣称模型“抗攻击”

从决策边界、FGSM/PGD、鲁棒优化和认证半径,到自适应攻击、分布外变换与系统级损失控制,理解保证的适用域。

核心命题 鲁棒性必须相对于攻击者能力定义:输入可改哪些维度、预算多大、知道模型多少、目标是什么。一个防御只在特定扰动集合和评测攻击下有效,不能自动外推到现实语义攻击。
读完你应该能:写出威胁模型与扰动集合;手算一次梯度符号攻击;解释鲁棒优化的内外层;识别梯度遮蔽和自适应评测缺陷;区分经验鲁棒与可认证保证。
  1. 定义资产、攻击目标、知识与可修改集合
  2. 建立自然性能和随机腐败基线
  3. 从FGSM到多步多重启寻找反例
  4. 检查攻击收敛和梯度遮蔽
  5. 用内层强攻击训练或选择防御
  6. 以自适应、迁移和集合外攻击复测
  7. 在系统层增加冗余、拒绝和损失限制
  8. 持续报告范围内保证与范围外残余风险

1自然准确率只测数据分布附近,不测主动最坏情况问题定义

一个在测试集上达到 99% 准确率的分类器,为什么会被一个肉眼几乎看不出变化的输入翻转预测结果?关键在于测试集与攻击者采样方式之间存在根本差异:自然准确率衡量的是模型在自然数据分布附近的平均表现,而攻击者并不随机抽样,而是主动沿着决策边界去搜索那些最能让模型出错的输入。

先看模型学到了什么。高维模型在训练时未必只依赖人类可识别的语义特征,它同样会捕捉到大量人类不敏感、却与训练标签统计相关的脆弱特征。这些特征在高维空间中数量庞大,足以支撑模型在常规测试上取得高分。问题是,它们对标签的“相关性”只是训练分布内的统计关联,并不代表对语义的真正理解,更不保证在输入被有目的地扰动后仍然成立。

再看测试集为什么发现不了这些脆弱点。普通测试从自然分布中独立抽样,绝大多数样本落在数据分布的稠密区域,距离决策边界较远。攻击者的做法则完全不同:他不需要改变样本的语义,只需要沿决策边界的法方向推进一点点,让样本跨过边界。自然采样几乎永远不会恰好落在这些精心构造的方向上,所以高准确率与易受攻击可以同时成立。

这里必须澄清一个常见混淆:对抗样本不是随机噪声。随机噪声在所有方向上均匀扰动,能否翻转类别取决于运气;对抗样本则是根据模型的梯度信息或查询反馈专门优化的结果。攻击者可以选择让损失函数增大,从而把原本正确的类别推翻,也可以直接抬升某个目标类别的输出概率,实现定向误导。每一次扰动都朝着“让模型最难受”的方向前进,因此效果远超等量随机噪声。

最后要界定这条结论的适用范围。一个对抗样本能否构成现实威胁,并不只取决于模型是否会在某个构造输入上出错,而是取决于三个条件是否同时成立:攻击者能否在现实环境中实际实现这样的扰动;模型输出是否直接触发高影响动作;下游是否缺少独立的验证环节来拦截错误结果。如果攻击者无法把扰动施加到真实输入上,或者模型输出只是被记录而不影响决策,那么实验室里的攻击成功率就不会自动转化为现实危害。

同时也要注意研究代理与真实威胁之间的距离。图片上以像素范数衡量的扰动,只是衡量“输入变化很小”的一种数学代理,它并不等价于所有物理攻击或语义攻击。打印一张贴纸、改变光照角度、在语义层面替换物体,这些都可能在不产生大像素范数的情况下改变模型行为,也可能在产生大像素范数的情况下仍然被人类轻易识别为同一物体。像素范数只是研究中的一个可计算标准,不能单独代表攻击的现实难度或危害程度。

2威胁模型先于攻击算法和鲁棒分数范围

同一个“鲁棒准确率”数字,为什么不能跨论文或产品直接比较?因为鲁棒性的含义完全取决于在测评之前先划定的威胁模型。所谓“鲁棒”,永远只能是“在某个明确限定下的鲁棒”;离开了这个限定,任何单个百分比都不携带可比较的信息。威胁模型必须在攻击算法和鲁棒分数之前被确定下来,它是后续一切测量和结论的前提。

威胁模型由五个维度共同界定,任何一个维度不同,得出的数字就不可通约。

第一是攻击目标。攻击可以是非定向的——只要让模型把正确类别判错即可;也可以是定向的——指定一个具体的目标类别,要求模型把它误判成那一类;还可以是置信度操纵,即不要求类别改变,只要求某个输出概率被压低或抬高。不同目标对“成功”的定义不同,非定向攻击的成功率自然无法与定向攻击的成功率相提并论。

第二是攻击者对模型的知识。白盒攻击下,攻击者拥有模型的完整权重和梯度,可以精确计算损失上升最快的方向;分数查询攻击下,攻击者只能反复提交输入、拿到模型输出的置信度分数,需要用这些分数去估计梯度;仅标签攻击下,攻击者连分数都看不到,只知道最终预测类别;迁移攻击下,攻击者根本不接触目标模型,而是在一个自己训练好的替代模型上生成对抗样本,再拿去攻击目标。知识越多,攻击者能利用的信息越丰富,可投入的有效预算也越不同。

第三是扰动的定义,也就是“接近”是什么意思。L∞ 范数限制每个像素最多改变多少;L2 范数限制所有像素变化的平方和;L0 范数限制被修改的像素个数;此外还有旋转、贴纸补丁、语义替换等完全不按像素范数衡量的扰动类型。同一个模型可能在 ε 很小的 L∞ 攻击下崩溃,却在 L0 攻击下依然稳健,因为两种扰动根本不同类。

第四是预算,即攻击者被允许投入多少。它可以是一个 ε 上限,也可以是攻击者最多能发起的查询次数,还可以是物理攻击中贴纸允许占据的面积。预算直接决定攻击强度:允许改动的幅度越大、允许查询的次数越多,攻击自然越强,测出的鲁棒准确率自然越低。

第五是系统的边界,也就是攻击到底作用于什么。有的测评只针对孤立的模型本身;有的则包含预处理、检测器、拒绝机制以及模型输出之后触发的业务动作。一个在裸模型上被攻破的样本,可能在进入完整系统后就被预处理滤掉,或者因为下游动作没有实际影响而不构成危害。只测模型和测完整系统,衡量的是两件不同的事。

正因为这五个维度会同时变化,一篇论文报告的鲁棒准确率只有在完整写出“针对什么目标、攻击者知道什么、扰动如何定义、预算多少、系统边界在哪”之后才有意义。一个孤立的百分比,既不能说明模型到底抵御了什么,也不能用来和另一个测评直接排序。

维度选择影响
目标非定向/定向/置信操纵成功条件不同
知识白盒/分数查询/仅标签/迁移可用梯度和预算不同
扰动L∞、L2、L0、旋转、补丁、语义“接近”的定义不同
预算ε、查询次数、物理面积攻击强度不同
系统仅模型/含预处理与业务动作真实影响不同

3数值例子:FGSM沿损失梯度符号走一步手算

为什么每个像素只改那么一点点,总损失却还能明显上升?答案藏在“沿着梯度的符号方向同时移动所有维度”这件事里。快速梯度符号法(FGSM)用一个二维数值例子把这条机制展示得很清楚。

设输入为 x = [0.40, 0.70],模型对这个真实标签的损失梯度是 ∇xL = [−0.8, 1.6],L∞ 预算 ε = 0.05。梯度告诉我们每个坐标该如何变化才能最快地增加损失:第一维的梯度为 −0.8,意味着把 x₁ 往负方向移动会提高损失;第二维的梯度为 1.6,意味着把 x₂ 往正方向移动会提高损失。FGSM 不关心梯度的具体大小,只取每个坐标的符号,于是得到 sign(∇xL) = [−1, +1]。再乘以预算 ε,每一步的扰动就是 [−0.05, +0.05],得到对抗输入 x_adv = clip(x + ε sign(∇xL)) = [0.40 − 0.05, 0.70 + 0.05] = [0.35, 0.75]。clip 的作用是保证最终结果仍落在合法输入范围内。

这个扰动为什么有效?对损失做一阶泰勒近似,损失的变化量约等于梯度与扰动向量的点乘。把数字代进去:(−0.8) × (−0.05) + 1.6 × (0.05) = 0.04 + 0.08 = 0.12。注意两个分量对损失增加的贡献方向是一致的——第一维贡献了 0.04,第二维贡献了 0.08,二者相加而非相互抵消。这正是“取符号”的用意:符号能保证每个维度的移动都与对应梯度分量同号,让每一项贡献都为正,从而让一阶近似下的损失单调增加。

单个维度上 0.05 的改动微不足道,但在高维空间中,成千上万个坐标同时贡献一点点同向的损失增量,累积起来就是一个可观的总量。这就是“每个像素只改很小、总损失却明显上升”的原因:攻击的力量来自维度的数量,而不是单个维度的幅度。

这个例子的边界同样值得说清。FGSM 只走一步,用的是损失的一阶近似,因此它快,却不保证到达预算球内真正使损失最大的那个点。一步之后损失可能已经上升,也可能因为线性近似的误差而并未充分翻转类别。更彻底的攻击会用多步迭代,每走一小步就重新计算梯度,再投影回预算球内,这正是 PGD 的做法。FGSM 可以理解为 PGD 在只迭代一次时的特例,它适合用来直观理解“沿梯度符号移动”这一核心思想,而不是最强攻击的终点。

xadv=clip(x+εsign(xL))=[0.35,0.75]

4完整示例:交通标志分类从数字攻击到打印贴纸案例推演

在像素空间里能成功的攻击,怎样才能验证它真的会变成物理世界的风险?交通标志分类提供了一个完整的例子:从数字扰动到真实贴纸,中间是一条必须逐环验证的证据链,任何一环都不能跳步。

第一步是定义资产,也就是说清楚“模型出错到底意味着什么”。在辅助驾驶中,标志误分类会影响车辆对该路段的理解,但最终控制还依赖地图、轨迹规划和驾驶员等多个环节,模型并不是唯一的决策来源。这一步划定了后续所有验证的边界:我们关心的是模型错误是否真的传导成业务损失,而不仅仅是模型是否在某个输入上出错。

第二步是在数字空间用白盒 L∞ 攻击检查模型的局部边界,同时记录自然准确率和鲁棒准确率两个数字。自然准确率说明模型在正常数据上的表现,鲁棒准确率说明它在被主动攻击时的表现,二者合起来才能描述模型在边界附近的脆弱程度。

第三步是把攻击从单纯的像素扰动扩展到真实世界常见的变换:旋转、亮度变化、图像压缩和不同拍摄距离。这一步测试的是攻击在离开“精确复现原图”的理想条件后,是否还能在各种变换下保持有效,从而排除那些只在特定像素排列下成立、一旦环境稍变就失效的攻击。

第四步才进入真正的物理贴纸。攻击者在一个受面积和颜色约束的条件下优化贴纸图案,然后在不同的打印机、相机、拍摄角度和天气条件下重复采集图像来测试。为什么要换这么多条件?因为物理攻击的成功必须对制作工艺和拍摄环境稳健,而不是只在某一次特定采集中碰巧有效。

第五步是防止对单一环境过拟合。用于最终验证的设备和路线必须没有参与贴纸的优化过程。如果同一台相机、同一条路线既用来优化又用来验证,那么贴纸可能只是拟合了这套特定设备的成像特性,换个环境就失效,这样的“成功”不能推广。

第六步是回到系统层面。即使模型确实把标志判错了,还要验证系统的多源融合是否会拒绝这个不一致的标志——例如地图和轨迹信息与识别结果冲突时是否会触发纠正——以及模型的错误是否真的改变了车辆的后续动作。如果下游环节把错误拦住了,那么模型层面的攻击就没有转化成实际危害。

最后一步针对部署后的情况:模型在训练或更新之后,不应该只重放旧贴纸来验证,而要针对新模型用自适应攻击重新优化贴纸。因为模型一旦改变,旧的攻击样本可能已经不再有效,只有重新优化才能真正检验当前模型的最坏情况表现。

这条证据链的整体逻辑是:数字攻击只是起点,每一步都在回答“这个攻击在更接近现实的条件还成不成立”,而最终要回答的问题是“模型错误是否真的变成业务损失”。跳过中间任何一环,都会把数字空间的现象误当成物理世界的风险。

5原创图:鲁棒性结论被威胁模型边界包围可视化

防住了某一个攻击算法,为什么不能据此推出“防住了同一预算内的所有攻击”?这幅图把鲁棒性结论与威胁模型边界的关系画了出来。

图的中心是一个自然输入,它周围有一个由威胁模型划定的扰动集合——例如所有满足某个 ε 约束的输入。集合内部是攻击被允许活动的范围,集合外部则是攻击不被允许、或者根本不受这个数学定义管辖的区域。模型的决策边界穿过或贴近这个集合,决定了哪些点会被误分类。

在集合内部,经验攻击找到的点只是一个个孤立的下界证据。某个攻击算法成功了,说明模型在这个点被攻破,鲁棒性至多不超过这个点对应的扰动幅度;但另一个没被尝试的攻击算法可能走一条不同的路径,在更小的扰动处就跨过决策边界。因此,经验攻击的成功率只能告诉我们“模型至少这么脆弱”,不能告诉我们“模型最多这么坚固”。

认证半径试图反过来给出上界保证:在某个严格的数学假设内,它宣称在这个半径之内的任何点都不会被误分类。但认证半径同样被它自己的假设框住——它只对它所用的范数和它证明所依赖的条件成立,换了范数、换了攻击目标,这个保证就不再适用。所以图里经验攻击点和认证半径共同界定了“我们能证明多少”和“我们已经观察到多少”之间的地带,而不是一个能覆盖所有攻击的完整结论。

真正让这幅图完整的是集合之外的语义攻击。一个在语义上明显不同的输入——换了物体、加了遮挡、改变了光照含义——可能根本不落在任何像素范数的 ε 球内,也就完全逃过了这个扰动集合的约束。集合内测得的一切鲁棒性结论,对这类攻击没有任何发言权。

于是图表达的核心关系是:任何鲁棒性结论都被它所在的威胁模型边界包围着。经验攻击给出的是下界,认证半径给出的是它数学假设内的上界,而集合外的攻击完全不受二者约束。防住一个攻击算法只能证明这一个算法在这个预算下没有成功,并不能推广到同一预算内所有可能的攻击路径,更不能推广到集合之外。

自然输入 xPGD找到的失败未测方向声明的L∞扰动集合认证半径集合外攻击补丁/语义/物理/查询红线:决策边界
图 1 经验攻击只提供下界;认证半径也只对其数学假设内成立。

6PGD把攻击写成约束内的迭代最优化机制

为什么多步小更新通常比一次大步更强?因为攻击本质上是一个带约束的最优化问题,而一步法只是它的最粗糙近似。PGD 把这个最优化过程显式写了出来:在扰动集合 S 内部,找到那个使损失最大的点。

每一次迭代做两件事。先沿当前点的损失梯度方向上升一小步,步长为 α,方向取梯度的符号,得到 xₜ + α·sign(∇L);然后把结果投影回 x 周围的扰动集合 S。投影这一步至关重要,它保证扰动始终不越出威胁模型允许的预算,无论梯度方向把点推向哪里,最终都会落到集合内部。整个迭代可以写成 xₜ₊₁ = Π_S(xₜ + α·sign(∇L)),其中 Π_S 表示向集合 S 的投影。与 FGSM 相比,PGD 在每一步之后都重新计算梯度,而不是只依据起点处的一次梯度,因此它能够沿着一条不断修正的路径逼近局部最坏点。

多步为什么强于单步?因为损失曲面不是平面。一步法依赖起点处的线性近似,一旦曲面弯曲,那个方向就不再是最优的;多步法则每走一小段就重新评估方向,逐步修正,能在曲面上走出更有效的路径。

还有两个细节会显著影响攻击质量。一是随机起点:如果每次都从 x 本身出发,可能反复落在局部平坦区域而停滞不前;从一个随机扰动的起点出发能降低这种概率。二是多次重启:从不同起点重复整个优化过程,探索不同的路径,最后取其中最成功的结果。这两者共同让攻击更接近真实的“最坏情况”。

这些细节反过来定义了攻击测评的陷阱。步长、步数和重启次数不足,都会让攻击停在半路,从而高估防御能力——不是模型真的稳健,而是攻击没跑到位。反过来,过大的步长又会让点在约束边界上来回跳动而无法收敛。判断攻击是否足够强,要看收敛曲线:不断增加计算量后,攻击成功率不再明显上升,才说明它已接近这个算法的能力上限。不过即便收敛曲线平了,也仍然只是“这个算法的最坏情况”,不能等同于全局最优的证明——这正是威胁模型边界那幅图所说的下界含义。

7对抗训练近似求解内层最坏扰动、外层更新模型鲁棒优化

把对抗样本加入训练,为什么会提高模型在特定预算内的稳健性?对抗训练把“训练”和“攻击”放进同一个目标函数,让二者交替进行,而不是先训练再被动地测试。

这个目标可以近似写成:min_θ E[ max_{δ∈S} L(f_θ(x+δ), y) ]。它由内外两层组成。内层的 max 表示对每一个输入 x,在当前模型参数 θ 下,去扰动集合 S 里寻找使损失最大的那个 δ——也就是用一次攻击为当前模型找到高损失输入。外层的 min 表示模型参数要朝着让这些被找出来的最坏输入也得到正确预测、从而压低损失的方向更新。内层攻击和外层更新交替进行:攻击器不断针对“此刻的模型”找最坏点,模型不断针对“此刻的最坏点”加固自己。

这正是对抗训练能提高稳健性的原因:普通训练只让模型在自然样本上正确,决策边界附近仍然脆弱;对抗训练则持续把决策边界附近被攻击器打开的口子暴露出来并修补掉,相当于把边界从这些局部最坏点上推开,使模型在扰动集合 S 内部更稳健。

但这条收益有严格的前提。内层攻击必须足够强。如果内层只用一个很弱的攻击,模型可能会找到一条捷径——学会让这个特定攻击器失效,而不是真正在集合 S 内稳健,这就是“欺骗攻击器”而非“变稳健”。此外,训练时用的扰动集合必须与实际部署时面临的攻击一致:如果训练时只防 L∞ 的小像素扰动,真实威胁却是打印贴纸或语义替换,那么训练的收益不会外推到这些攻击上。

对抗训练还有成本。它需要反复运行攻击器,算力消耗明显增加,而且通常会在自然准确率上有所牺牲——模型为了在扰动集内稳健,可能放弃一些自然分布上的边缘正确性。判断它是否值得,不能只看鲁棒准确率单点上升,而要与相同容量、相同数据、相同计算预算的基线做比较,再结合具体业务的目标风险来决定:如果最坏情况一旦发生就会造成高影响损失,那么付出这些代价是合理的;如果错误本身无足轻重,那么为鲁棒性牺牲自然准确率反而可能得不偿失。

8梯度遮蔽制造“攻击失败”的假安全评测陷阱

梯度遮蔽描述的是一种假安全:防御让攻击器拿到的梯度变得无用,攻击看起来失败了,但模型底层的决策边界依旧脆弱。它并没有真正提高稳健性,只是切断了攻击器依赖的梯度信号。

这种遮蔽通常来自三类操作。不可微操作让反向传播无法穿越,直接反传得到的是无意义的梯度;随机操作为同一个输入引入随机扰动,使单次反传的梯度无法反映真实曲面;饱和操作把输出推到激活函数的平坦区,梯度趋近于零。无论哪种,攻击器沿着这些被污染的梯度走,都会停在原地或乱走,于是“攻击失败”。但决策边界并没有因为这些操作而变得更坚固,它只是不再通过梯度暴露给攻击器。

有几个迹象可以识别这种假安全。一步攻击反而强于多步攻击,说明多步迭代被坏梯度带偏了;黑盒迁移攻击比白盒攻击更强,说明攻击器在模型内部拿到的梯度还不如从别处估计的;不断增大扰动预算,鲁棒准确率却几乎不下降,说明测评根本没有触碰到真实的决策边界;去掉随机性后攻击突然变强,说明随机性才是让攻击失效的原因,而非边界本身稳固。

真正能检验防御的是自适应攻击。攻击者不再套用一个默认的攻击库,而是先理解防御机制,再有针对性地设计攻击:把不可微操作换成可微近似,用多次采样的期望梯度替代单次随机梯度,用直通估计让梯度穿过不可微层,或者干脆放弃梯度、改用决策查询或分数查询这类黑盒方法。一旦攻击针对防御本身做了适配,梯度遮蔽带来的“成功”往往迅速消失。

因此对评测者来说,结论是明确且硬性的:必须知道被测模型的完整推理管线——从输入预处理、中间模块到输出后处理——并针对其中的具体防御机制设计攻击。用一个默认攻击库去测一个精心设计的防御,得到的高鲁棒分数不是稳健性的证据,而只是攻击器没有用对方法的证据。

9经验鲁棒与认证鲁棒回答不同问题保证

一个认证半径 0.3,是否意味着现实照片无论怎么改都安全?不是。要回答这个问题,必须先分清经验鲁棒和认证鲁棒各自在说什么,它们回答的是两个不同的问题。

经验鲁棒表示:在我们已经运行过的这些攻击下,还没有找到能翻转预测的失败样本。它的价值在于给出一个下界证据——模型至少在这些具体攻击的搜索范围内没有被攻破。但它永远无法排除“存在一个更强或不同类型的攻击,只是我们还没运行它”。经验鲁棒回答的问题是“我找过了,没找到失败”,而不是“不存在失败”。

认证鲁棒则试图给出一个数学保证:在特定的范数、半径和模型假设内,无论用什么攻击,预测都不会改变。例如随机平滑这类方法可以为模型提供一个 L2 半径的认证,证明在这个半径球内不存在能使类别翻转的扰动。这是一个条件性的数学结论——它绝对成立,但只对它写明的那些条件成立。

两者的差异集中体现在那个 0.3 的问题上。认证半径 0.3 保证的是:在它所采用的范数定义下、在它证明所依赖的模型假设内、在半径 0.3 的球内,预测不变。它不覆盖旋转、贴纸遮挡、语义替换这类不落在该范数球内的变化,也不覆盖实现层面的错误——比如预处理代码里的一处 bug 或部署环境与训练环境的不一致。现实照片上的变化大多并不按这个范数来发生,所以“半径 0.3”绝不等于“现实照片怎么改都安全”。

同样重要的是,单看平均半径会掩盖真实情况。一个模型可能对大多数样本都有较大的认证半径,却对少数高风险样本毫无保证。因此报告时应给出可认证样本的比例、半径的分布,以及自然准确率,而不是只报一个平均半径。平均半径会把那些完全没有保证的样本平均掉,让人误以为整体都很安全。

这层区分最终回到一个工程判断:即使认证鲁棒给出了严格的数学保证,高风险系统仍然需要系统级的冗余和监控。认证保证只覆盖威胁模型之内的扰动,而现实中的失败来源远超这个范围。数学模型能证明的部分和系统实际需要承担的风险之间,永远隔着一段必须由工程手段来填补的距离。

10范数接近不等于人类语义相同,语义相同也可能范数很远边界

一个 L∞ 约束为什么既可能放行肉眼可见的奇怪纹理,又可能把人类毫不在意的轻微旋转排除在外?根本原因在于:逐像素的范数距离度量的是“坐标空间的接近程度”,而人类感知、物理可实现性和任务语义衡量的却是另一套东西。两套度量之间没有对齐关系。

逐像素预算的优点是便于优化和比较。它为攻击提供了一个可计算的搜索范围,让不同方法在同一把尺子下被评估。但它的缺点同样明显:它与感知不一致。一个轻微的平移会把大量像素从原位置移开,按 L2 或 L∞ 范数计算,距离可能非常大,然而对观察者而言标签完全没有变化,语义上它仍然是同一个物体。反过来,一个精心构造的纹理扰动可能每个像素只改动一点点,范数很小,却因为形成了规则的高频图案而被人眼清楚地看见。于是出现了两个相反方向的错位:范数大的变化可能语义相同,范数小的变化却可能语义已被破坏。

这说明范数只是众多可能的威胁模型之一,而不是“更接近真实”的默认选择。真实评测应当把扰动类型扩展开来,加入自然腐败(噪声、模糊、压缩)、几何变换(旋转、平移、缩放)、风格变化、补丁贴纸、语义改写,以及特定任务领域的约束。每一类都刻画了一种不同的失败方式,也对应一种不同的现实攻击来源。

由此得出的一个重要结论是:不同的攻击集合不是互相替代的“更强版本”。L2 攻击不是 L∞ 攻击的升级,补丁攻击也不是像素攻击的加强版;它们是彼此不同的威胁,各自覆盖决策边界上的一段不同区域。在一个集合上表现稳健,不能推出在另一个集合上同样稳健。因此评测应当组合多个攻击集合分别报告结果,并明确说明还有哪些空间没有被覆盖,而不是用一个集合的数字去代表整体的安全性。

11系统级鲁棒性用冗余、拒绝和损失限制兜住模型失败工程

当无法保证单个分类器不被攻破时,降低事故后果的出路不在模型本身,而在模型之外:用系统级的冗余、拒绝和损失限制,把“模型出错”与“不可逆损失”之间的通道堵住。目标随之发生转移——不再是“模型永不出错”,而是“错误不轻易穿透到不可逆的损失”。

冗余是让多个相互独立的证据彼此校验。独立的传感器可以从不同物理通道观察同一对象,当某个通道被攻击而输出异常时,其他通道的结论可以把它纠正过来。规则约束把物理世界或业务逻辑的先验知识写成硬性条件,筛掉明显违背常识的输出。时间一致性利用连续帧或连续时刻之间的连续性,识别出单帧内突变、无法在时间上维持的异常。异常检测监控输入和输出的分布,发现偏离正常模式的情况。置信校准让模型输出的分数更接近真实概率,从而在分数过低时能够被可靠地拒绝。安全降级则规定:当证据不足或结论不可信时,系统退回到一个更保守、更低风险的默认行为,而不是继续执行原动作。对高影响动作,则要求多证据汇合或人工确认后才执行,不把后果押在单一模型的单次输出上。

损失限制在错误发生后继续发挥作用。限制单次动作的幅度和频率,意味着即使错误输出了,其造成的后果也被限定在可恢复的范围内,不会一次就造成不可逆的破坏。记录可审计的输入和版本,保证事后能够追溯是哪次输入、哪个模型版本导致了错误。快速回滚能力则保证一旦发现部署的模型有问题,可以立即退回到已知安全的旧版本,缩短错误持续的时间。

必须同时认清这些控制的边界:它们本身也可能被协同攻击。攻击者可能不是只骗过一个分类器,而是同时污染多个传感器的输入、绕过异常检测、或利用降级逻辑本身的漏洞。因此这些系统级控制同样要接受端到端的红队测试——把整个系统当作攻击对象,而不是只测其中的模型部件。

最终这条思路的实质是重新定义了成功:不追求某个部件绝对正确,而是保证在任何一个部件被攻破时,错误的后果不会轻易穿透层层防线,变成无法挽回的损失。

12鲁棒评测报告攻击预算曲线和最坏切片验证

只在 ε = 8/255 这一个点上报告鲁棒准确率,会掩盖什么?它把整条风险曲线压成了一个数,让人看不到模型在不同攻击强度下是如何退化的。一个在这个点上恰好过关的模型,可能在稍大一点的预算下迅速崩溃;也可能在更小预算下就已经失守,只是这个点碰巧没暴露出来。因此评测应当报告的是曲线,而不是孤立的点。

完整的鲁棒评测要同时给出多组数字。自然准确率是基准,说明模型在没有攻击时的表现;不同 ε 取值下的鲁棒准确率构成一条随预算变化的曲线,展示稳健性如何随攻击强度衰减;攻击成功率从攻击者的角度说明攻击在多大程度上能够得手;步骤数和重启次数对应的收敛情况说明攻击是否真的跑到位,而非提前停止。此外还要区分目标攻击与非目标攻击,分别报告,因为它们定义的成功不同;要覆盖白盒、迁移、查询等不同的知识假设,因为它们对应的攻击强度不同;还要纳入不同范数以及自然腐败下的表现,因为单一范数无法代表全部威胁。

报告时不能只给全局平均。按类别、按设备、按环境拆开看最坏的切片——某个少数类别可能几乎完全被攻破,某类设备或某种环境下的鲁棒性可能远低于平均水平。平均值会把最脆弱的切片稀释掉,而真实事故往往恰恰发生在这些最坏切片上。同时应给出置信区间,让数字的不确定性也被表达出来,而不是假装它是一个精确值。

评测过程的正确性同样需要审计。攻击代码和模型预处理必须一起被检查:像素尺度是否一致、裁剪和归一化是否在攻击前后都正确应用、随机种子是否固定,这些细节任何一个出错,都可能导致攻击被低估或防御被高估。此外,用于最终评估的自适应攻击集应当对外部隐藏,防止防御方法在公开攻击集上反复调参而过拟合——如果一个防御是因为“知道了测试用的攻击”才显得稳健,那么它面对未知攻击时的表现就不足为凭。隐藏评估攻击集,是为了让评测结果反映的是面对未知威胁的能力,而不是对已知考题的背记。

14把因果链连起来综合

把前面各环节连成一条因果链,可以看到这个概念如何从最初的问题一路走到可验证的实践。

链的起点是定义:明确要保护的资产是什么,攻击者的目标是什么(非定向、定向还是置信操纵),攻击者拥有多少知识(白盒、查询、仅标签还是迁移),以及允许修改的扰动集合是什么。这一步把“鲁棒”的含义钉死在一个具体的威胁模型上,没有它,后面的所有测量都失去可比性。

在此基础上先建立基线:测出自然性能,以及随机腐败下的表现。自然性能回答“模型正常有多好”,腐败基线回答“面对无关的、非针对性的退化它有多稳”。有了基线,才有比较对抗攻击效果的参照。

然后是寻找反例。从一步的 FGSM 出发,进展到多步、多重启的 PGD,去主动搜索预算内使模型失败的最坏输入。找到的反例给出鲁棒性的下界证据——我们至少能证明模型在这些点上是脆弱的。

但反例是否可信,取决于攻击是否真的跑到位。因此要检查攻击的收敛情况和是否存在梯度遮蔽:如果多步反而不如单步、黑盒迁移反而不如白盒,说明攻击被坏梯度带偏了,此时测出的“稳健”是假象。只有用针对防御机制设计的自适应攻击得到的结果,才能作为有效的脆弱性证据。

接下来是加固。用内层强攻击做对抗训练,或据此选择防御方案,让模型在扰动集合内部真正稳健,而不是学会欺骗攻击器。这一步的有效性必须再用自适应攻击、迁移攻击和集合外的攻击复测来验证,因为集合内的成功不自动外推到集合外。

模型层面无法保证的部分,交给系统层面兜底:增加冗余、拒绝机制和损失限制,使模型错误不轻易穿透成不可逆的损失。

最后是持续报告:范围内有保证的部分要写清楚保证的边界,范围外的残余风险也要如实写出,而不是用一个数字掩盖未覆盖的空间。

这条链还需要一个统一的验证层,用来判断每一步的改动是否真的带来了收益。验证时要固定输入——同一批样本、同样的前处理和权限边界——并观察输入哈希、切片标签和拒绝原因,确保比较的是相同的数据。机制上只改变一个核心变量,其余配置全部锁定,观察关键中间状态以及首次偏离预期的位置,从而把收益归因到那个变量。输出侧用同一套验收规则和资源预算来度量,比较质量、成本、延迟和失败率的分层差异,避免只看单一指标。最后保留一个不启用目标机制的对照组作为反证,检查收益是否跨不同样本和随机种子稳定复现。只有通过这层对照的收益,才算真正由所验证的机制带来,而非数据或随机性的偶然结果。

验证层在“对抗鲁棒性:在明确扰动集合内寻找最坏情况,而非宣称模型“抗攻击””中固定什么观察什么证据
输入同一批样本、前处理与权限边界输入哈希、切片标签和拒绝原因
机制仅改变一个核心变量,其余配置锁定关键中间状态及首次偏离预期的位置
输出同一验收规则与资源预算质量、成本、延迟和失败率的分层差异
反证保留不启用目标机制的对照组收益是否跨样本与随机种子稳定复现
资料来源与改编说明
访问日期:2026-07-22