想象你是一家大型快递公司的分拣中心主管。传送带靠扫描标签把包裹送到不同仓库,可总有人用几乎看不出来的小污点改动标签,让“猫粮”被送进“狗粮”仓库——这就是对抗样本。你试过加清洁工(对抗训练)、贴警示牌(防御蒸馏),但每个新污点都可能绕过这些防线。于是你签下一份合同:只要污点不超过米粒大小(扰动半径 ε),分拣系统必须保证把包裹送到正确仓库。问题来了:污点的形状有无限多种,怎么证明?区间界限传播(IBP)给出的办法是“逐站核算”:把包裹重量的可能范围(记作 [最轻,最重])写在单据上,每过一道分拣设备,就用一套固定的算术更新这个范围,最后检查“真实仓库的重量范围最低值”是否依然高于“其他所有仓库的重量范围最高值”。是,合同成立;否,合同作废。本文就带你从零看懂这套逐站核算的方法,以及它为什么是 AI 认证防御的地基。

岗位关联

学完本讲,你将掌握 AI 安全领域“可证明鲁棒性”的第一块基石:区间界限传播——这是认证防御工程师、模型风控算法师和可信 AI 研究者绕不开的核心技能。

目录
  1. 可视化演示
  2. 一、问题背景:对抗样本与认证防御
  3. 二、区间运算基础:称重台的记账规则
  4. 三、传播流程:从入口到出口的接力
  5. 四、认证判定:两排号码牌的较量
  6. 五、界松弛挑战:核算员太悲观
  7. 六、紧界方法:分情况精算的核算员
  8. 七、实践应用:让合同真正落地
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示系统处理流水线、实时性能指标曲线及多方案对比分析,包含数据流转、吞吐延迟监控与方案评估。

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

系统可视化 处理流程:输入→处理→模型→输出 性能监控:实时指标 P=L×T

一、问题背景:对抗样本与认证防御

假如你是快递分拣中心的负责人。传送带末端接往各个仓库,分拣机靠扫描包裹标签上的图案判断该去哪。一天你发现,有人用笔在标签上点了一个比米粒还小的污点,分拣机立刻把标着“猫粮”的包裹送进了“狗粮”仓库。这个微小污点就是对抗扰动,被污点骗过的包裹就是对抗样本。更麻烦的是,污点可以贴在任意位置、画成任意形状,你根本数不清有多少种。

你第一反应是派保安盯住传送带,或者总结“哪种污点会被骗”然后针对性修补——这就是以对抗训练为代表的启发式防御。可保安总有打盹的时候,新样式的污点永远可能漏网。于是你决定签一份数学合同:只要污点在米粒大小(扰动半径 ε)以内,分拣系统必须保证把包裹送到正确仓库。要兑现这份合同,你需要的不是“多盯几次”,而是一次穷举所有可能性的证明。

这份合同用数学语言可以写成如下形式:对任意扰动向量 δ,只要它每一维的最大改动不超过 ε,网络 f 输出的最高分类别都必须还是真实标签。直接验证无穷多个 δ 是不可能的,但区间界限传播(IBP)提供了一个妙招:不去枚举单个 δ,而是把 x 周围半径 ε 的整块区域当作一个“区间盒子”喂进网络,看这个盒子经过每一层变换后,是否还稳稳落在正确类别的领地内。

回到分拣中心:你需要的是一个核算员,把“包裹可能的重量区间”从入口一路记到出口,最后对比号码牌。这个核算员就是 IBP。它不关心具体是哪个污点,只关心整个“可能输入盒子”的命运——这正是对抗鲁棒性研究从“打地鼠”升级为“签合同”的关键一步。

∀ δ∈Rd,∥δ∥∞≤ϵ  ⟹  arg⁡max⁡ifi(x+δ)=ytrue\displaystyle \forall\, \boldsymbol{\delta} \in \mathbb{R}^d,\quad \|\boldsymbol{\delta}\|_\infty \le \epsilon \;\Longrightarrow\; \arg\max_{i} f_i(\boldsymbol{x} + \boldsymbol{\delta}) = y_{\text{true}}
通俗解释:只要扰动“最厉害的那一维”不超过 ε,网络把扰动后的样本判给真实标签 y_tru 这件事,就必须板上钉钉。
  1. 任意扰动向量δ 的每个分量都是任意实数,覆盖了“污点贴在哪、长什么样”的全部可能。
    ∀δ∈Rd\forall \boldsymbol{\delta} \in \mathbb{R}^d
  2. 无穷范数条款‖δ‖∞ 是所有分量中绝对值最大的那个,合同只约束它不超过 ε,这就是“米粒大小”的正式定义。
    ∥δ∥∞≤ϵ\|\boldsymbol{\delta}\|_\infty \le \epsilon
  3. 分类结果锁定arg max 表示取分数最高的类别,要求扰动后最高分仍是真实标签,而不是“也在前三名”之类的宽松条件。
    arg⁡max⁡ifi(x+δ)=ytrue\arg\max_i f_i(\boldsymbol{x} + \boldsymbol{\delta}) = y_{\text{true}}

二、区间运算基础:称重台的记账规则

分拣中心的每台设备前都有一个称重台,记录两个数:这箱货最轻可能是多少、最重可能是多少。比如单据上写着 9.8~10.2 公斤,大家就知道真实重量一定落在这个范围里。数学上把这种“夹在两个数之间”的取值称为区间 [l, u],l 是下界、u 是上界。神经网络里每个神经元在扰动下的输出,同样可以用这样的区间来描述。

第一个要掌握的运算是线性层 z = Wz′ + b。它像一条传送带,把上一站的区间按权重放大或缩小。难点在于权重有正有负:正权重会把“大”的变得更大,负权重却会把“大”的变成更小。如果直接把区间端点一窝蜂地塞进公式,就会算错谁才是真正的“最坏情况”。

解决办法是把权重拆成两半:正部分 W⁺ = max(W, 0),负部分 W⁻ = min(W, 0)。对第 k 个输出神经元,它的输出界可以这样算:为了凑出输出下界(对分类最不利的情况),正权重要配上输入的下界,负权重则要配上输入的上界;凑上界时正好反过来。公式里的求和符号说明每个输入维度都在贡献宽度——这也埋下了后面“界越传越宽”的伏笔。

线性层之后通常还跟着激活函数。ReLU 是神经网络里最常见的激活之一,它单调不减、非负数照抄、负数归零。单调函数有一个好性质:区间的最小值出现在左端点、最大值出现在右端点。因此 ReLU 层的传播规则极其简洁——两端点各自过一遍 ReLU 即可:

称重台的新规矩一点也不复杂:非负数照抄、负数记 0。但就是这条朴素规矩,加上正负权重的拆分,构成了整个区间传播大厦的两块基石。

z‾k=∑i=1d(Wki+ z‾i′+Wki− z‾i′)+bk,z‾k=∑i=1d(Wki+ z‾i′+Wki− z‾i′)+bk\displaystyle\underline{z}_k = \sum_{i=1}^{d}\left( W_{ki}^{+}\,\underline{z}'_i + W_{ki}^{-}\,\overline{z}'_i \right) + b_k,\qquad\overline{z}_k = \sum_{i=1}^{d}\left( W_{ki}^{+}\,\overline{z}'_i + W_{ki}^{-}\,\underline{z}'_i \right) + b_k
通俗解释:ReLU 是一台“负重量就归零”的秤。最轻记录写成 max(最轻,0),最重记录写成 max(最重,0),单调函数保证了端点就是极值。
  1. 单调端点定理ReLU 是单调不减函数,所以区间最小值必然出现在左端点、最大值必然出现在右端点。
    min⁡z∈[l,u]ReLU⁡(z)=ReLU⁡(l)\min_{z\in[l,u]}\operatorname{ReLU}(z) = \operatorname{ReLU}(l)
  2. 跨零压平当左端点为负、右端为正时,下界被压成 0,上界仍是右端点;当区间整体为负时,上下界都变成 0。
    z‾=ReLU⁡(l)=0,z‾=ReLU⁡(u)=u\underline{z}=\operatorname{ReLU}(l)=0,\quad \overline{z}=\operatorname{ReLU}(u)=u
  3. 逐元素实现写成代码就是两次逐元素的 max(x, 0),几乎零成本。
    ReLU⁡(x)=max⁡(x,0)\operatorname{ReLU}(x) = \max(x, 0)

三、传播流程:从入口到出口的接力

包裹从入口进入流水线:第一站是检重台,第二站是“负数归零”台,然后又是检重台、归零台……每一站只向上游要两个数字(最轻、最重),完全不关心包裹的真实样貌。神经网络的深度结构,正是这样一层一层的接力。

IBP 的传播流程就是这套接力的数学化。给定干净样本 x 和扰动半径 ε,输入层每个像素的取值都被限定在 [xᵢ − ε, xᵢ + ε],构成一个初始区间盒子。接下来,对网络的前 L 层逐层套用第二节的规则:先过线性层算出激活前的界 a,再过 ReLU 得到该层的界 z。写成递推式如下:

这套递推最迷人的地方在于:它不需要任何优化器、不需要采样,只需要和普通前向传播几乎相同的计算量,就能得到整个网络输出的上下界。快递流水线的账本就是这样一路滚下去:上一站传下来的区间,就是下一站核算的唯一依据;无论网络多深多宽,规则不变。

z‾(0)=x−ϵ,z‾(0)=x+ϵa‾(l)=W+(l)z‾(l−1)+W−(l)z‾(l−1)+b(l),a‾(l)=W+(l)z‾(l−1)+W−(l)z‾(l−1)+b(l)z‾(l)=ReLU⁡ ⁣(a‾(l)),z‾(l)=ReLU⁡ ⁣(a‾(l))\displaystyle\begin{aligned}\underline{\boldsymbol{z}}^{(0)} &= \boldsymbol{x} - \boldsymbol{\epsilon}, & \overline{\boldsymbol{z}}^{(0)} &= \boldsymbol{x} + \boldsymbol{\epsilon} \\[4pt]\underline{\boldsymbol{a}}^{(l)} &= W^{+(l)}\underline{\boldsymbol{z}}^{(l-1)} + W^{-(l)}\overline{\boldsymbol{z}}^{(l-1)} + \boldsymbol{b}^{(l)}, & \overline{\boldsymbol{a}}^{(l)} &= W^{+(l)}\overline{\boldsymbol{z}}^{(l-1)} + W^{-(l)}\underline{\boldsymbol{z}}^{(l-1)} + \boldsymbol{b}^{(l)} \\[4pt]\underline{\boldsymbol{z}}^{(l)} &= \operatorname{ReLU}\!\left(\underline{\boldsymbol{a}}^{(l)}\right), & \overline{\boldsymbol{z}}^{(l)} &= \operatorname{ReLU}\!\left(\overline{\boldsymbol{a}}^{(l)}\right)\end{aligned}
通俗解释:流水线从入口开始,每一站都只按上一站传来的“最轻、最重”两个数继续算,一直传到最后一道工序,得到输出 logits 的上下界。
  1. 初始化区间输入层把干净样本 x 逐维加减 ε,得到初始上下界向量,这是整个递推的起点。
    z‾(0)=x−ϵ,z‾(0)=x+ϵ\underline{\boldsymbol{z}}^{(0)} = \boldsymbol{x} - \boldsymbol{\epsilon},\quad \overline{\boldsymbol{z}}^{(0)} = \boldsymbol{x} + \boldsymbol{\epsilon}
  2. 仿射下界第 l 层先做线性变换,用正部乘上一层下界、负部乘上一层上界,得到激活前的下界。
    a‾(l)=W+(l)z‾(l−1)+W−(l)z‾(l−1)+b(l)\underline{\boldsymbol{a}}^{(l)} = W^{+(l)}\underline{\boldsymbol{z}}^{(l-1)} + W^{-(l)}\overline{\boldsymbol{z}}^{(l-1)} + \boldsymbol{b}^{(l)}
  3. 仿射上界同样规则交换配对方式,得到激活前的上界。
    a‾(l)=W+(l)z‾(l−1)+W−(l)z‾(l−1)+b(l)\overline{\boldsymbol{a}}^{(l)} = W^{+(l)}\overline{\boldsymbol{z}}^{(l-1)} + W^{-(l)}\underline{\boldsymbol{z}}^{(l-1)} + \boldsymbol{b}^{(l)}
  4. 激活收束对 a 的上下界分别做 ReLU,得到第 l 层的最终区间,准备传给下一层。
    z‾(l)=ReLU⁡(a‾(l)),z‾(l)=ReLU⁡(a‾(l))\underline{\boldsymbol{z}}^{(l)} = \operatorname{ReLU}(\underline{\boldsymbol{a}}^{(l)}), \quad \overline{\boldsymbol{z}}^{(l)} = \operatorname{ReLU}(\overline{\boldsymbol{a}}^{(l)})

四、认证判定:两排号码牌的较量

当包裹走到最后一个分拣口,核算员要做最后一次判断:真实目的地那条通道的“最轻可能重量”,是否依然比所有其他通道的“最重可能重量”更大?如果是,那么不管包裹实际多重,都不可能被分到其他通道——合同成立。

神经网络里同理。输出层有 C 个类别的 logits,每个类别都是一个区间。认证判定只需要看一个不等式:真实类别 logits 的下界是否大于其余类别 logits 上界的最大值。严格大于才算数,等于也不行,因为 arg max 要求唯一的最高分。把所有测试样本过一遍这个判定,统计通过比例,就得到认证精度(certified accuracy)——它和普通准确率是两本账:前者回答“这次送对了吗”,后者回答“随便怎么改都不可能送错吗”。

对快递公司来说,普通准确率是口碑,认证精度是合同;对 AI 系统来说,两者缺一不可,所以认证防御的论文里总是同时报告这两个数。

认证通过  ⟺  z‾ytrue(L)>max⁡j≠ytrue z‾j(L),CertAcc=1N∑n=1N1 ⁣[z‾yn(L)(xn)>max⁡j≠ynz‾j(L)(xn)]\displaystyle\text{认证通过} \iff \underline{z}_{y_{\text{true}}}^{(L)} > \max_{j \neq y_{\text{true}}}\ \overline{z}_{j}^{(L)},\qquad\text{CertAcc} = \frac{1}{N} \sum_{n=1}^{N} \mathbb{1}\!\left[ \underline{z}_{y_n}^{(L)}(\boldsymbol{x}_n) > \max_{j \neq y_n} \overline{z}_{j}^{(L)}(\boldsymbol{x}_n) \right]
通俗解释:真实类下界是一个“门槛”,其余类上界是“天花板”。门槛高于所有天花板,合同就成立;门槛被天花板压过,合同作废。
  1. 认证通过判据真实类 y_true 的 logits 下界必须严格大于其余所有类别上界的最大值,差一点都不行。
    z‾y(L)>max⁡j≠yz‾j(L)\underline{z}_{y}^{(L)} > \max_{j \neq y} \overline{z}_{j}^{(L)}
  2. 认证精度定义N 个测试样本中,认证通过样本所占的比例,衡量的是“可证明安全”的覆盖率。
    CertAcc=1N∑n=1N1[⋅]\text{CertAcc} = \frac{1}{N} \sum_{n=1}^{N} \mathbb{1}[\cdot]
  3. 指示函数方括号里的条件成立记 1、不成立记 0,求和取平均后就是一个 0 到 1 之间的比例。
    1[ z‾yn(L)>max⁡j≠ynz‾j(L) ]\mathbb{1}[\,\underline{z}_{y_n}^{(L)} > \max_{j \neq y_n} \overline{z}_{j}^{(L)}\,]

五、界松弛挑战:核算员太悲观

快递公司同时发往同一城市的两个包裹,重量大概率差不多;但核算员记账时,总是假设最惨情况:第一个取最轻、第二个取最重,两者组合起来算出最宽的区间。这种把相关性抛到脑后的悲观记账,就是“界松弛”。

神经网络里,同一层不同神经元的输出都来自同一个输入,彼此高度相关;但 IBP 的盒状区间假设每个神经元可以独立地在自己的区间内任意取值,于是传播出来的盒子总比真实的“可达集合”大一圈。更糟的是,这种虚胖会逐层放大:线性层传播时,区间宽度按权重的绝对值加权求和,宽度只增不减。

到了输出层,真实类下界与其余类上界常常就重叠了——合同作废。注意:合同作废不等于真的出错,只能说明“这套核算方法太粗糙,给不出保证”。这就像核算员说“我无法确认”,而包裹其实可能毫发无损地到了正确仓库。虚胖的根源,是盒状区间把神经元当成了互不相干的个体,要挽救合同,就得让核算员更聪明。

\displaystylew_k^{(l)} = \overline{z}_k^{(l)} - \underline{z}_k^{(l)} = \sum_{i=1}^{d} \left| W_{ki}^{(l)} \right| \left( \overline{z}_i^{(l-1)} - \underline{z}_i^{(l-1)} \right)
通俗解释:宽度就像滚雪球,每过一层就乘上权重的绝对值再累加。权重越大、层数越多,雪球滚得越大,盒子越“虚胖”。
  1. 宽度定义第 l 层第 k 个神经元的区间宽度等于上界减下界,衡量“不确定范围”有多大。
    wk(l)=z‾k(l)−z‾k(l)w_k^{(l)} = \overline{z}_k^{(l)} - \underline{z}_k^{(l)}
  2. 权重绝对值累积上一层各神经元的宽度乘上对应权重绝对值再求和,负权重取绝对值后同样放大不确定性。
    ∑i∣Wki(l)∣ (z‾i(l−1)−z‾i(l−1))\sum_i |W_{ki}^{(l)}|\,(\overline{z}_i^{(l-1)} - \underline{z}_i^{(l-1)})
  3. 逐层放大效应只要权重不为零,宽度就会不断膨胀;ReLU 虽然有时能把跨零区间压窄一些,但整体趋势是越传越宽。
    w(l)≈∣W(l)∣ w(l−1)w^{(l)} \approx |W^{(l)}|\, w^{(l-1)}

六、紧界方法:分情况精算的核算员

新来的精算员不再只记“最轻最重”,而是会翻看流水线上的历史记录:某些包裹虽然标着重 9.8~10.2 公斤,但结合上游数据,实际只可能是 10.0 或 10.1。利用这个额外信息,他画出的区间大幅缩小。CROWN 系列方法做的正是这件事。

CROWN(及 α-CROWN)把跨零的 ReLU 用一条“安全直线”替换:用一条过原点的直线 α·a 作为下界,用连接两个端点的弦作为上界。α 是可以在 [0,1] 之间选择的斜率——α=0 时退化成 IBP 的粗糙盒,选得好就能得到比 IBP 紧得多的界;再配合从输出层向输入层反向传播整个界,估计精度显著提升。

工程上常用的组合是“IBP 训练 + CROWN 验证”:IBP 训练让模型在区间传播下也保持高精度,CROWN 在部署时给出更紧的界,二者取长补短。从“矩形盒子”到“线性包络”,再到“可调斜率的线性包络”,每多一分精细,合同能签的范围就大一分。

ReLU⁡(a)≥α a,∀ a∈[l,u], α∈[0,1],ReLU⁡(a)≤uu−l (a−l),∀ a∈[l,u]\displaystyle\operatorname{ReLU}(a) \ge \alpha\, a,\quad \forall\, a \in [l,u],\ \alpha \in [0,1],\qquad\operatorname{ReLU}(a) \le \frac{u}{u-l}\,(a-l),\quad \forall\, a \in [l,u]
通俗解释:IBP 用矩形盒子包住 ReLU,CROWN 用直线包络包住 ReLU。矩形像大号的集装箱,直线像贴身裁剪的包装,包装越贴身,核算越精确。
  1. 线性下界任取斜率 α ∈ [0,1],直线 α·a 始终压在 ReLU 曲线下方,α=0 就是 IBP 的粗糙下界。
    ReLU⁡(a)≥αa,α∈[0,1]\operatorname{ReLU}(a) \ge \alpha a,\quad \alpha \in [0,1]
  2. 弦线上界连接 (l, 0) 与 (u, u) 两点的弦,因为 ReLU 是凸函数,弦永远在曲线之上,是最紧的线性上界。
    ReLU⁡(a)≤uu−l(a−l)\operatorname{ReLU}(a) \le \frac{u}{u-l}(a-l)
  3. 斜率可调α-CROWN 把 α 当作可优化变量,通过梯度优化找到每条 ReLU 的最优松弛斜率,从而让整条传播链的界更紧。
    α∗=arg⁡min⁡α∈[0,1]z‾(α)\alpha^{\ast} = \arg\min_{\alpha \in [0,1]} \overline{z}(\alpha)

七、实践应用:让合同真正落地

分拣中心敢于承诺“医药包裹绝不送错”,是因为它既有核算规则,又按核算规则训练过操作员。AI 落地同理:光有验证工具还不够,模型必须从一开始就按“能被认证”的方向培养。

可认证训练(IBP training)的核心思想是:把 IBP 算出的最坏情况直接写进损失函数。真实类别用它的下界、其他类别用它们的上界,拼成一个“最不利的 logits 向量”去算交叉熵——相当于给模型发一张“最差成绩单”,逼它在最坏情况下也尽量答对。总损失再把这份“最差成绩单”和普通准确率损失按比例加权,λ 会随训练过程逐步衰减。

这项技术已经走进真实世界:自动驾驶公司用它认证交通标志识别模型,支付厂商用它评估活体检测在光照、遮挡扰动下的稳定性,工业质检用它在零件图像上给出“小扰动不改变判定”的证明。当前前沿聚焦在如何把认证扩展到更大模型(如视觉 Transformer)和更复杂的扰动模型上,计算成本与界紧度之间的赛跑仍在继续。从“看懂污点”到“签下合同”,再到“按合同培养员工”,这是认证防御走过的三步;区间界限传播作为第一步的基石,是所有更精密方法绕不开的地基。

LIBP=CE⁡ ⁣(zwc, y),ziwc={z‾ii=yz‾ii≠yL=λ LCEnat+(1−λ) LIBP\displaystyle\begin{aligned}\mathcal{L}_{\text{IBP}} &= \operatorname{CE}\!\left( \boldsymbol{z}^{\text{wc}},\ y \right), & z^{\text{wc}}_i &= \begin{cases} \underline{z}_i & i = y \\ \overline{z}_i & i \neq y \end{cases} \\[6pt]\mathcal{L} &= \lambda\, \mathcal{L}_{\text{CE}}^{\text{nat}} + (1-\lambda)\, \mathcal{L}_{\text{IBP}}\end{aligned}
通俗解释:普通训练看“平均表现”,可认证训练看“最差表现”。把最差表现当成考试分数来优化,模型自然会在区间传播下变得更“守信用”。
  1. 最坏情况向量真实类 logits 取下界、其余类取上界,构造出“最不可能认对”的得分向量。
    ziwc=z‾i (i=y),ziwc=z‾i (i≠y)z^{\text{wc}}_i = \underline{z}_i\ (i = y),\quad z^{\text{wc}}_i = \overline{z}_i\ (i \neq y)
  2. 交叉熵惩罚用这个最坏得分算交叉熵,迫使模型在最坏情况下也把真实类的分数推高。
    LIBP=CE⁡(zwc,y)\mathcal{L}_{\text{IBP}} = \operatorname{CE}(\boldsymbol{z}^{\text{wc}}, y)
  3. 加权融合λ 控制自然精度与鲁棒精度的平衡,训练初期 λ 大、后期 λ 小,逐步把模型“按合同标准”培养成型。
    L=λLCEnat+(1−λ)LIBP\mathcal{L} = \lambda \mathcal{L}_{\text{CE}}^{\text{nat}} + (1-\lambda) \mathcal{L}_{\text{IBP}}

AI 应用场景

场景一:自动驾驶感知模型的部署前认证

阶段:模型评估与安全验证(训练后、部署前)

解决的问题:传统方式用 PGD、FGSM 等攻击算法做压力测试,但“测过没被打穿”不等于“打不穿”。IBP 对感知模型在给定扰动半径 ε(对应雨雾噪点、贴纸污渍、传感器抖动)下给出数学保证:认证通过,则扰动范围内分类结果绝对不变;认证失败,则定位到最脆弱的输入区域,反馈给训练管线。

具体案例:某自动驾驶团队对交通标志识别 CNN 做认证:取 ε=0.02(像素归一化后),在 1 万张测试图上运行 IBP,报告认证精度 97.2%。未通过认证的 280 个样本被标记为“高风险区域”,并在下一训练版本中做针对性数据增强,再认证时精度提升到 98.5%。

场景二:人脸支付活体检测的鲁棒性风控

阶段:模型上线后的持续风险评估

解决的问题:活体检测面对“戴眼镜贴纸、屏幕翻拍、局部遮挡”等对抗式干扰,传统方案靠黑名单加阈值,难以穷举。IBP 可以把“当前帧相对基准帧的像素扰动区间”实时传播,判断该区间内是否存在分类翻转的可能;区间不重叠则自动放行,重叠则转人工核验。

具体案例:某支付 App 在活体检测服务中增加认证模块:每帧计算扰动区间并做一次 IBP 前向,若真实类下界大于其他类上界,判定“本帧附近无攻击空间”,直接放行;否则触发二次人脸核验。上线后对抗性翻拍拦截率提升 41%,正常用户通过率几乎不变。

Python 演示

python53 行
import numpy as np def linear_bounds(W, b, bl, bu):    # 通过线性层传播上下界: z = Wx + b    Wp = np.maximum(W, 0.0)   # 正权重部分    Wn = np.minimum(W, 0.0)   # 负权重部分    ul = Wp @ bl + Wn @ bu + b    uu = Wp @ bu + Wn @ bl + b    return ul, uu  def relu_bounds(al, au):    # 通过 ReLU 传播上下界, 单调函数直接取端点    rl = np.maximum(al, 0.0)    ru = np.maximum(au, 0.0)    return rl, ru  def ibp_forward(weights, biases, x, eps):    # 逐层传播区间, 最后一层返回 logits 的上下界    bl = x - eps    bu = x + eps    for W, b in zip(weights, biases):        al, au = linear_bounds(W, b, bl, bu)        bl, bu = relu_bounds(al, au)    return al, au  def certify(weights, biases, x, y, eps):    # 认证判据: 真实类下界大于其余类上界的最大值    lower, upper = ibp_forward(weights, biases, x, eps)    margin = lower[y] - np.max(np.delete(upper, y))    return margin > 0.0, margin  def main():    rng = np.random.default_rng(0)    w1 = rng.normal(0.0, 0.5, (4, 3))    b1 = np.zeros(4)    w2 = rng.normal(0.0, 0.5, (3, 4))    b2 = np.zeros(3)    weights = [w1, w2]    biases = [b1, b2]    x = np.array([1.0, 0.0, -1.0])    y = 0    for eps in [0.1, 0.3, 0.6]:        ok, margin = certify(weights, biases, x, y, eps)        status = "pass" if ok else "fail"        print("eps=%.1f cert=%s margin=%.3f" % (eps, status, margin))  if __name__ == "__main__":    main()
目的:用 NumPy 手写一个约 50 行的区间界限传播引擎,对一个两层 MLP 执行可证明鲁棒性认证,并观察不同扰动半径 ε 下认证结果从通过变为失败。
  1. Wp = np.maximum(W, 0.0)拆出正权重,负权重一律置 0,这是“正部与负部分别记账”的第一步。
  2. ul = Wp @ bl + Wn @ bu + b下界用正权重乘输入下界、负权重乘输入上界,凑出最坏情况。
  3. uu = Wp @ bu + Wn @ bl + b上界交换配对方式,凑出最好情况。
  4. rl = np.maximum(al, 0.0)ReLU 下界跨零时被压成 0;单调函数保证端点即极值。
  5. bl = x - eps; bu = x + eps输入扰动区间,ε 就是合同里的“米粒大小”。
  6. margin = lower[y] - np.max(np.delete(upper, y))真实类下界减其余类上界最大值,正是认证判据。
  7. for eps in [0.1, 0.3, 0.6]依次放大扰动半径,直观看到界过宽导致 margin 由正转负。

常见误区

误区模型在 IBP 下认证通过了,就可以宣称“任何攻击都无效”,以后再也不用担心安全问题。

正解认证保证只在合同范围内有效:扰动半径 ε、范数类型(如 L∞)、网络结构都必须如实列出。超出 ε 或换成更大的扰动,合同立即失效;此外 IBP 是超集近似,认证通过说明“盒子内无风险”,但真实风险边界可能比盒子更小。就像快递合同只承诺“米粒污点内不送错”,拿钢笔涂改不在此列。

为何常见:把“可证明”误读为“无条件安全”,忽略了证明本身依赖的扰动半径、范数和网络结构等前提条款。

误区既然模型对扰动不敏感,输出的 logits 区间宽一点不正说明它“见多识广”吗?所以区间越宽越安全。

正解恰恰相反。区间宽度反映的是“界估计的松紧”,而不是模型自身的鲁棒性。真正决定认证结果的是真实类下界与其他类上界的间距;区间过宽只会让二者更容易重叠、认证更容易失败。模型鲁棒与否,要看“区间中点的分类正确性”和“界够不够紧”两个因素。

为何常见:把“估计的保守性”和“模型本身的稳定性”混为一谈——盒子大不代表货物稳,只代表核算员不敢下结论。

误区把 [z̲, z̄] 当作网络在扰动下所有可能输出的精确集合,认为区间里的每个点都会真实出现。

正解IBP 给出的是可达集合的超集(包含真实集合但远大于它)。由于忽略了神经元之间的相关性,盒状区间里的大部分点根本不可能被任何实际输入到达;比如两个输出总是一起增大,盒状区间却假设它们可以一个最大、一个最小。超集用于认证不会漏报风险,但会带来误报——把本来安全的样本判成不通过。

为何常见:区间运算的“逐维独立”假设太反直觉,初学者很容易把“包含关系”当成“相等关系”。

误区区间传播是部署前的验证工具,训练时用不上,训完再验就行。

正解普通训练的模型几乎没有一个能通过认证。要获得高认证精度,必须做可认证训练:把真实类下界、其余类上界拼成“最坏 logits”算交叉熵,让模型在训练时就按“最差情况”优化。IBP 训练已经成为认证防御的主流范式,验证与训练是一体两面的关系。

为何常见:看到“verification/proof“字样就以为是纯推理工具,忽略了”可证性”本身可以通过训练目标来塑造。

面试题

Q1. 区间界限传播(IBP)的核心目标是什么?

单选题 · easy

  • A.提升模型在干净样本上的精度
  • B.保证扰动范围内的输出分类稳定← 正确答案
  • C.加速神经网络推理速度
  • D.自动构造对抗样本攻击

答案:B。IBP 的目标不是提升干净精度、加速推理或生成攻击,而是用区间算术对“扰动范围内输出上下界”给出数学保证,相当于快递合同里的逐站核算。A 是普通训练的目标,C 是工程优化,D 是红队攻击方向。

Q2. 输入区间 [x−ε, x+ε] 经过线性层 z = Wx + b 传播时,输出下界的正确计算方式是?

单选题 · easy

  • A.将全部输入下界代入线性层
  • B.W+ 乘输入下界、W− 乘输入上界← 正确答案
  • C.用权重绝对值乘区间中点
  • D.随机采样后取最小输出值

答案:B。权重有正有负,正权重乘输入下界、负权重乘输入上界,才能得到输出最小的最坏情况。A 忽略了负权重会翻转端点;C 只算中点丢失边界信息;D 是采样近似而非严格保证。

Q3. 当 ReLU 的输入区间跨零(l<0<u)时,输出区间的下界是?

单选题 · easy

  • A.保持原下界数值不变
  • B.输出下界直接取 0← 正确答案
  • C.取上界减下界之差值
  • D.保持上界数值本身

答案:B。ReLU 单调不减,区间最小值等于左端点过 ReLU 的值:左端点小于 0 时被压成 0,上界仍是右端点 u。A 保留了负值,C 是宽度,D 是上界而非下界。

Q4. 下列哪些因素会导致 IBP 认证精度下降?

多选题 · mid

  • A.界松弛导致误判认证失败← 正确答案
  • B.ReLU 跨零时下界被放宽← 正确答案
  • C.输入扰动半径设置过大← 正确答案
  • D.输出类别数量设置太少

答案:ABC。界松弛(忽略相关性)、ReLU 跨零导致下界放宽、扰动半径过大,都会让真实类下界更容易跌破其余类上界,使认证通过率下降。类别数越少,类别间竞争越小,认证反而更容易通过,所以 D 不是下降原因。

Q5. 认证精度(certified accuracy)的定义是?

单选题 · mid

  • A.测试集上模型预测正确的比例
  • B.测试集中认证通过样本占比← 正确答案
  • C.对抗样本攻击成功率的倒数
  • D.模型收敛时损失值的大小

答案:B。认证精度统计的是满足“真实类下界 > 其余类上界最大值”的样本占测试集的比例,衡量“可证明安全”的覆盖率。A 是普通准确率,C 是攻击视角的指标,D 与鲁棒性无关。

Q6. 与 IBP 相比,CROWN 方法的主要改进是?

单选题 · mid

  • A.线性化 ReLU 求更紧的界← 正确答案
  • B.增加随机扰动做数据增强
  • C.增大批大小来加速训练
  • D.用更深的网络结构提升精度

答案:A。CROWN 用线性松弛(斜率 α 的直线作下界、弦线作上界)表示跨零 ReLU,再反向传播得到比逐层盒状累积更紧的界。B 是数据增强,C 是工程优化,D 是调结构,都不是 CROWN 的核心贡献。

Q7. IBP 可认证训练的损失函数设计特点是?

单选题 · hard

  • A.只用干净样本交叉熵损失
  • B.用真实类下界与其余类上界← 正确答案
  • C.用对抗样本标签交叉熵损失
  • D.用输出区间宽度作正则项

答案:B。可认证训练把真实类 logits 换成下界、其余类换成上界,拼成“最坏得分”来算交叉熵,逼模型在最坏情况下也分对。A 是普通训练,C 是对抗训练,D 没有直接用边界保证。

Q8. 当 IBP 认证失败时,正确的理解是?

单选题 · hard

  • A.模型必然被对手攻击成功
  • B.扰动范围内必有分类错误样本
  • C.仅说明当前界无法排除错误← 正确答案
  • D.需要全部重新训练数据集

答案:C。认证失败只说明当前盒状界与别的类区间重叠,无法排除出错可能,并不代表一定存在出错的点。它更像是核算员说“合同不能签”,而不是包裹真的送错了;换成更紧的界方法有时就能恢复通过。

Q9. 下列哪些方法可以缓解 IBP 的界松弛问题?

多选题 · mid

  • A.使用 α-CROWN 优化松弛斜率← 正确答案
  • B.使用 IBP 与 CROWN 混合法← 正确答案
  • C.增加全连接隐藏层数量
  • D.使用可认证训练平衡精度← 正确答案

答案:ABD。α-CROWN 优化 ReLU 松弛斜率、IBP 与 CROWN 混合验证、可认证训练都能收紧界或让模型更容易过认证。增加层数通常让宽度按权重绝对值累积更多,反而加剧松弛,所以 C 不对。

Q10. 关于 IBP 输出上下界的性质,下列说法正确的有?

多选题 · hard

  • A.真实可达集是传播区间的子集← 正确答案
  • B.传播区间是真实可达集的子集
  • C.保证成立前提是激活函数单调← 正确答案
  • D.上下界逐层由上一层推导← 正确答案

答案:ACD。IBP 传播的盒状区间是真实可达集的超集,所以 A 对、B 反了;界传播的正确性依赖激活函数单调(ReLU、sigmoid 均可,非单调激活会失效);上下界必须逐层由上一层推导,这正是递推式的要求。