假设你是AI城的市长。城里有自动驾驶巴士、AI红绿灯、机器护士,它们看起来聪明又灵活。开业前你问:“我凭什么相信它们永远不闯祸?”测试员说:“我们试开了十万公里,没出事故。”但城市道路是无限的,总有一条你没试过的岔路可能通向悬崖。这时,一位工程师递上一张蓝图,上面用数学语言写道:只要符合这些条件,整座城市每一条可能的路径都不会离开安全区。这就是形式化方法——不给AI“考经验”,而是给AI“盖数学章”。本文会从一张蓝图讲起,带你理解它如何验证神经网络、如何用抽象地图压缩复杂度,以及为什么严格的数学保证和AI的灵活性需要互相让步。

岗位关联

对AI从业者而言,形式化方法是从“用起来不错”走向“敢签安全责任书”的关键技能,能帮你证明系统在关键场景下为什么不会出错。

目录
  1. 可视化演示
  2. 形式化验证总览:一张数学安全蓝图
  3. 神经网络鲁棒性验证:给识别系统找茬
  4. 抽象解释:把大海画成粗铅笔地图
  5. 混合系统验证:连续与离散的合奏
  6. 复杂度挑战:地图太大画不动
  7. 灵活性平衡:严格蓝图与自由街区
  8. 工程落地:从图纸到施工队
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示神经网络鲁棒性验证、对抗攻击认证与安全区域、以及形式化约束下的可信训练过程。

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

'+_captions.robust+'

形式化验证总览:一张数学安全蓝图

你是AI城的市长,城里的自动驾驶巴士、AI红绿灯和机器护士都在等待开业许可。测试员跑了几万公里,但道路组合近乎无限;你真正需要的是一张数学蓝图,能在开工前就证明:城市所有合法路径都不会进入禁区。形式化方法正是这样的蓝图——它不靠“试过了没事”来给您信心,而是把安全变成一条可以被证明的定理。

在AI系统里,模型可以看作一个函数 \(f\),它把输入 \(x\) 映射成决策 \(f(x)\)。所谓安全属性 \(P\),就是一句评判“这个决策是否安全”的话。传统测试只检查有限个 \(x\),形式化验证却要求对输入范围内的每一个 \(x\) 都成立。它逼着我们把“安全”从口号写成精确规范,再交给数学去裁决。

这份蓝图不是万能的。如果市长给的城区地图本身画错了,比如漏掉一条地下通道,那么再漂亮的证明也保证不了真实安全。形式化方法的价值,恰恰在于逼我们把“AI 应该满足什么”这个模糊问题,变成数学上可以争论、可以证明的清晰命题。

∀x∈Xin,P(f(x))\displaystyle \forall x \in X_{\text{in}},\quad P(f(x))
这条公式的意思是:只要输入落在约定范围内,系统的安全性质就必须成立。
  1. 输入集合\(X_{\text{in}}\) 表示系统允许接收的所有输入,相当于城市里所有合法道路。
    Xin\displaystyle X_{\text{in}}
  2. 全称量词\(\forall\) 读作“对于所有”,这是形式验证与测试最本质的区别。
    ∀x\displaystyle \forall x
  3. 模型输出\(f(x)\) 表示AI模型对输入 \(x\) 的决策结果,相当于车辆最终到达的位置。
    f(x)\displaystyle f(x)
  4. 安全性质\(P(\cdot)\) 是判定条件,输出满足它才算安全,相当于“没有开进禁区”。
    P(f(x))\displaystyle P(f(x))

神经网络鲁棒性验证:给识别系统找茬

AI城路口的摄像头认出了“停车”标志,可有人往标志上贴了一张小贴纸,它就看成了“限速”。这种微小改动让模型出错的情形,就是对抗样本。一张靠谱的安全蓝图不能只保证原图正确,还要保证“稍微变一点”的图片也不会闯祸。于是验证目标变成:在原始输入附近的一个小邻域内,所有输入都必须得到相同且正确的判断。

这个“小邻域”通常用一个以 \(x_0\) 为球心、\(\epsilon\) 为半径的球 \(B_\epsilon(x_0)\) 表示。形式化验证要证明的是,球里每一个点经过模型 \(f\) 后都保持原来的分类结果。为了实现这一点,工程上会借助 SMT 求解器这类工具,把问题编码成逻辑公式,然后尝试寻找违反条件的反例。如果找不到反例,鲁棒性就得到了数学保证。

对AI城来说,这张“邻域证明”就像给每个重要路口装上隐形护栏:允许车辆在小范围内晃动,但无论如何都别想撞上另一条车道的车。难点在于这个球是连续、无穷的,测试永远试不完,只有形式化方法能一次证明完整片区域。

∀x′∈Bϵ(x0):f(x′)=f(x0)\displaystyle \forall x' \in B_\epsilon(x_0):\quad f(x') = f(x_0)
这句话说的是:在允许的扰动范围内,无论输入怎么变,模型都给出和原来相同的答案。
  1. 原始输入\(x_0\) 是我们要保护的样本,比如一张干净的停车标志图片。
    x0\displaystyle x_0
  2. 扰动邻域\(B_\epsilon(x_0)\) 是与 \(x_0\) 距离不超过 \(\epsilon\) 的所有输入集合,相当于允许车辆偏离原路线的最大范围。
    Bϵ(x0)\displaystyle B_\epsilon(x_0)
  3. 任意扰动输入\(x'\) 表示邻域内任意一个可能被构造出来的输入。
    x′\displaystyle x'
  4. 输出相等\(f(x') = f(x_0)\) 要求模型对扰动前后给出相同分类,这是鲁棒性的核心要求。
    f(x′)=f(x0)\displaystyle f(x') = f(x_0)

抽象解释:把大海画成粗铅笔地图

给整座城市画万分之一的精细地图太昂贵,工程师改用粗铅笔:把一条条街道画成街区色块。这样做会丢掉细节,但好处是很快能圈出“整片区域是否安全”。这就是抽象解释——与其逐个检查精确状态,不如把每个状态“揉”成一个区间或形状,然后分析整个区间的行为。

形式化上,我们用 \(\alpha\) 把精确性质 \(P\) 抽象成更粗糙的结构,再用 \(\gamma\) 把它映射回精确世界。只要映射回来的集合包含原来的所有真实行为,那么这个“过近似”就是安全的:如果粗糙地图都显示安全,真实道路一定安全;如果粗糙地图显示可能危险,则不一定真危险,可能是抽象太粗造成的误报。

抽象解释是AI城地图绘制员的生存智慧:地图可以粗,但边界必须保守。用一点精度损失,换来能在大规模网络上完成的验证,这是它在神经网络鲁棒性检查中被广泛使用的原因。

γ(α(P))⊇P\displaystyle \gamma(\alpha(P)) \supseteq P
这条公式说明:抽象后的结果必须覆盖全部真实情况,宁可多画一块空地,也不能漏掉一座山峰。
  1. 精确性质\(P\) 是系统的真实可达状态集合,比如车辆所有可能经过的精确位置。
    P\displaystyle P
  2. 抽象映射\(\alpha(P)\) 把精确集合转换成粗糙表示,比如把每个点扩展成区间。
    α(P)\displaystyle \alpha(P)
  3. 具体化映射\(\gamma(\cdot)\) 把粗糙表示转回精确世界的范围。
    γ(α(P))\displaystyle \gamma(\alpha(P))
  4. 包含关系\(\supseteq P\) 表示抽象后的结果必须覆盖全部真实状态,保证不漏报危险。
    γ(α(P))⊇P\displaystyle \gamma(\alpha(P)) \supseteq P

混合系统验证:连续与离散的合奏

自动驾驶汽车不是只活在数字世界里的程序。它的物理运动是连续的,刹车、转向都由微分方程描述;但决策逻辑是离散的,比如“当前状态切换到变道模式”。这种连续动力学与离散跳变交织的系统,就是混合系统。给AI城做安全蓝图时,不能只画程序流程图,还要把汽车速度、位置这些连续量一起画进去。

可达性分析是解决这个问题的核心工具:从一组初始状态出发,逐步计算出所有可能到达的状态集合,然后检查这个集合是否与危险区域相交。如果可达集合和事故区域没有公共点,系统就是安全的。这相当于把“未来所有可能的车迹”投影到地图上,看它会不会擦过悬崖边。

混合系统验证让AI城的蓝图既能算物理账,也能算逻辑账。它并不替代仿真,而是补上仿真的短板:仿真只能演示几条路线,可达性分析却能覆盖连续状态空间里无穷多条轨迹。

Reach(S0)∩Unsafe=∅\displaystyle \mathrm{Reach}(S_0) \cap \mathrm{Unsafe} = \emptyset
这条公式说的是:从初始状态出发所有能到达的状态,和危险状态集合之间没有交集。
  1. 初始状态集合\(S_0\) 是系统启动时所有可能的状态,比如车辆在某个时间段内的位置和速度区间。
    S0\displaystyle S_0
  2. 可达集合\(\mathrm{Reach}(S_0)\) 是系统从 \(S_0\) 出发能够到达的全部状态,相当于把所有可能路线画在一张图上。
    Reach(S0)\displaystyle \mathrm{Reach}(S_0)
  3. 危险集合\(\mathrm{Unsafe}\) 是明确不允许进入的状态,比如与行人区域重叠的位置。
    Unsafe\displaystyle \mathrm{Unsafe}
  4. 交集为空\(\cap = \emptyset\) 表示可达状态与危险区域没有任何重叠,证明系统不会进入危险区。
    Reach(S0)∩Unsafe=∅\displaystyle \mathrm{Reach}(S_0) \cap \mathrm{Unsafe} = \emptyset

复杂度挑战:地图太大画不动

当AI城越来越大,道路、行人、红绿灯、车辆状态组合在一起,可达状态数量会爆炸式增长。验证一下也许要枚举数亿种情况,这就是状态爆炸。神经网络的非线性激活函数更让问题雪上加霜:ReLU这类分段函数会让精确推理变得极其复杂,很多验证问题在最坏情况下是指数级难度。

抽象解释可以缓解一部分压力,但无法根治。假设系统里有 \(n\) 个相互独立的二值开关,所有可能状态的数量就已经是 \(2^n\)。当网络有几十万参数时,任何“逐一枚举”的想法都不现实。这就是为什么形式化方法在理论上很漂亮,工程上却常常被算力墙挡住。

面对这堵算力墙,AI城工程师不再追求一张“全知”的超级地图,而是学会分块、分层、用近似做取舍。理解复杂度挑战,才能明白为什么现实中的形式验证往往要牺牲完整细节,换取能够在有限时间内回答“是否安全”的工程答案。

∣Sreach∣≤2n\displaystyle |S_{\text{reach}}| \le 2^n
这条公式说明:即使每个组件只有开/关两种状态,它的组合规模也会随组件数量指数增长。
  1. 可达状态数\(|S_{\text{reach}}|\) 表示系统所有可能状态的数量,对应地图上需要画的路径条数。
    ∣Sreach∣\displaystyle |S_{\text{reach}}|
  2. 二值变量数\(n\) 是参与组合的独立开关数量,比如车辆是否超速、传感器是否失效。
    n\displaystyle n
  3. 指数上限\(2^n\) 是这些开关组合出的最大状态数目,变量每增加一个,状态数量就翻倍。
    2n\displaystyle 2^n

灵活性平衡:严格蓝图与自由街区

如果给AI城每一条街道都钉死固定路线,城市会丧失应对突发路况的灵活性。形式化方法也是一样:安全属性写得越严格,模型可探索的行为空间就越窄,性能可能下降。过于僵化的验证约束,会让AI在正常场景下也变得畏手畏脚。

于是设计者开始寻找平衡点:把必须绝对安全的模块交给形式验证,把追求体验和效率的模块交给统计方法。这个权衡可以写成带约束的优化问题——我们希望模型性能损失最小,同时必须满足验证成功这一硬性条件。换句话说,不是“要么完全证明,要么完全放弃”,而是“在可证明的边界内,尽量放开灵活性”。

好的城市设计不会把每个角落都焊死,而是把医院、电站这类关键设施用严格蓝图保护起来,让商业区保持活力。AI安全也是同理:关键决策用数学保证托底,非关键场景用统计方法感受世界,这样的混合架构才是现实世界的答案。

min⁡θL(θ)s.t.Verify(fθ)=true\displaystyle \min_{\theta} \mathcal{L}(\theta) \quad \text{s.t.} \quad \mathrm{Verify}(f_\theta) = \text{true}
这条公式的意思是:在模型必须通过验证的约束下,寻找让损失函数最小的参数。
  1. 优化目标\(\min_{\theta} \mathcal{L}(\theta)\) 表示我们希望模型在训练数据上的损失尽量小。
    min⁡θL(θ)\displaystyle \min_{\theta} \mathcal{L}(\theta)
  2. 模型参数\(\theta\) 是神经网络的权重和偏置,相当于城市交通规则的调节旋钮。
    θ\displaystyle \theta
  3. 约束条件\(\text{s.t.}\) 后面是必须满足的硬性条件,不能为了性能牺牲安全。
    s.t.\displaystyle \text{s.t.}
  4. 验证通过\(\mathrm{Verify}(f_\theta) = \text{true}\) 表示当前模型必须通过形式化验证。
    Verify(fθ)=true\displaystyle \mathrm{Verify}(f_\theta) = \text{true}

工程落地:从图纸到施工队

形式化方法不能只停留在论文里,它需要变成工地上的施工队。如今已经有一批工具能承担部分工作:Z3 这样的 SMT 求解器处理逻辑约束,Marabou 等工具专门验证神经网络鲁棒性,SpaceEx 和 NNV 面向混合系统做可达性分析。工具链让工程师不必从零证明每一条定理。

面对大型AI系统,另一个工程策略是模块化验证:把系统拆成小模块,分别证明每个模块的安全性质,再把局部证明组合成整体保证。这种组合推理依赖模块之间的清晰接口,就像城市先把每栋楼验收合格,再相信整条街不会倒塌。再加上行业标准和认证流程的推动,形式化方法才能从少数专家的手艺变成规模化工程能力。

从图纸到工地,AI城的每一栋建筑都要有施工队、验收标准和使用说明。形式化方法走向工程落地,靠的正是工具、分解和标准这三根支柱——它们一起把“数学上可证明”变成“工业上可交付”。

Safe(System)=⋀i=1kSafei(Modulei)\displaystyle \mathrm{Safe}(System) = \bigwedge_{i=1}^{k} \mathrm{Safe}_i(\mathrm{Module}_i)
这条公式说明:整个系统安全,等价于所有模块都满足自己的安全性质。
  1. 系统安全\(\mathrm{Safe}(System)\) 是整个AI系统最终是否安全的结论。
    Safe(System)\displaystyle \mathrm{Safe}(System)
  2. 合取连接\(\bigwedge_{i=1}^{k}\) 表示“所有模块必须同时成立”,任何一个模块不安全,整体就不安全。
    ⋀i=1k\displaystyle \bigwedge_{i=1}^{k}
  3. 模块集合\(\mathrm{Module}_i\) 是拆分出来的第 \(i\) 个组件,比如感知模块、规划模块、控制模块。
    Modulei\displaystyle \mathrm{Module}_i
  4. 局部性质\(\mathrm{Safe}_i(\mathrm{Module}_i)\) 表示每个模块在自己的职责范围内满足安全要求。
    Safei(Modulei)\displaystyle \mathrm{Safe}_i(\mathrm{Module}_i)

AI 应用场景

自动驾驶的“可达域”安全审计

阶段:部署前安全验证

解决的问题:自动驾驶路测无法覆盖所有天气、车速和障碍物组合,传统仿真只能验证有限场景。使用混合系统可达性分析,可以在部署前计算出车辆在连续物理世界中的全部可达范围,检查是否会与行人、障碍物的危险区域重叠。

具体案例:一家自动驾驶公司要批准一个新的跟车控制器上线,工程师把传感器延迟、刹车响应和路面摩擦系数建模成状态区间,通过可达性分析证明即使在前车突然急刹时,车辆轨迹也不会撞上前车边界。

医疗影像AI的鲁棒性认证

阶段:模型注册与合规

解决的问题:医疗影像AI可能因扫描设备噪声、患者轻微移动而产生输入扰动,单靠测试集上的准确率无法说明对微小扰动是否稳定。用抽象解释对模型输入区间做鲁棒性验证,可以证明在一定噪声范围内分类结论不变。

具体案例:某肺结节筛查系统在提交医疗器械认证时,验证团队挑选一组成像参数扰动范围,用区间传播方法分析整个扰动邻域,最终证明模型不会因正常的设备抖动把良性结节误判为恶性。

工业机器人的安全联锁验证

阶段:安全联锁设计

解决的问题:工业机器人同时包含连续运动轨迹和离散任务切换,一旦逻辑跳变与物理位置配合失误,可能撞伤工人。形式化验证可以把“机器人当前模式”和“机械臂位置区间”联合建模,检查所有可达状态是否避开人员禁区。

具体案例:工厂引入人机协作机械臂,工程师用混合系统模型描述机械臂速度和模式切换规则,通过可达性分析确认在工人进入围栏后,任何模式下的机械臂都不会进入碰撞区域。

Python 演示

python55 行
def relu_interval(low, high):    new_low = [max(0.0, v) for v in low]    new_high = [max(0.0, v) for v in high]    return new_low, new_high  def layer_bounds(weights, bias, low, high):    new_low = []    new_high = []    for j in range(len(bias)):        lo = bias[j]        hi = bias[j]        for i, w in enumerate(weights[j]):            if w >= 0:                lo += w * low[i]                hi += w * high[i]            else:                lo += w * high[i]                hi += w * low[i]        new_low.append(lo)        new_high.append(hi)    return new_low, new_high  class SmallNN:    def __init__(self, w1, b1, w2, b2):        self.w1 = w1        self.b1 = b1        self.w2 = w2        self.b2 = b2     def interval_verify(self, x0, eps):        low = [v - eps for v in x0]        high = [v + eps for v in x0]        low, high = layer_bounds(self.w1, self.b1, low, high)        low, high = relu_interval(low, high)        low, high = layer_bounds(self.w2, self.b2, low, high)        return low, high  if __name__ == "__main__":    nn = SmallNN(        [[1.0, -1.0], [0.5, 0.5], [-1.0, 1.0]],        [0.0, 0.0, 0.0],        [[1.0, 1.0, 0.0], [0.0, 1.0, 1.0]],        [0.0, 0.0],    )    x0 = [1.0, -0.5]    for eps in [0.0, 0.1, 0.5, 1.0]:        low, high = nn.interval_verify(x0, eps)        safe = high[0] < low[1] or high[1] < low[0]        print("eps=", eps,              "class0=(", low[0], high[0], ")",              "class1=(", low[1], high[1], ")",              "safe=", safe)
目的:用区间抽象解释一个两层ReLU网络在不同扰动半径下是否保持安全,演示形式化验证中最核心的区间传播思想。
  1. def layer_bounds(weights, bias, low, high):每一层都接收输入区间的下界和上界,逐层计算输出区间。
  2. if w >= 0:权重正负决定区间端点怎么组合,这是区间运算的关键规则。
  3. low, high = relu_interval(low, high)ReLU激活函数在区间上用“夹到非负”的方式处理,得到过近似区间。
  4. safe = high[0] < low[1] or high[1] < low[0]如果两个输出类别的区间完全分开,说明扰动不会改变分类结果。
  5. low, high = nn.interval_verify(x0, eps)给定扰动半径后,一次性计算出输出区间,验证这个半径下是否安全。

常见误区

误区我以为只要用了形式化方法,系统就绝对不会出任何问题,可以放心签字上线。

正解形式验证只能证明“在模型和假设范围内”的性质。如果模型没有考虑传感器失效、数据分布漂移或攻击者使用超出扰动范围的干扰,这些风险依然存在。就像蓝图能证明建筑在设定载荷下不塌,却无法证明它能扛住从未入模的十级地震。

为何常见:因为“数学证明”听起来像终极答案,人容易忘记证明的前提是建模,而建模本身就是对现实世界的简化。

误区我以为把测试数据量加大到几十亿条,覆盖足够多场景,效果就和形式验证差不多。

正解测试再密也只是有限个点,形式验证要考虑的是无限个可能输入。哪怕测试了一万条路,也证明不了第一万零一条路一定安全。形式验证的价值不是“多测一些”,而是用逻辑覆盖整片区域。

为何常见:现实中AI效果通常用测试集指标衡量,大家习惯把“样本准确率”等同于“系统安全”,忽略了样本之外仍是未知区域。

误区我觉得抽象解释既然会产生误报,那它的验证结果就不可信,不如不用。

正解抽象解释是“保守”而非“乱报”,它宁可多画一块地也不会漏掉真实危险。如果抽象后的结果说安全,真实系统一定安全;如果说过不安全,则需要进一步细化分析。这种可证明的保守性,恰恰是工程中最需要的信任基础。

为何常见:因为人们习惯了精确计算,看到“近似”两个字就本能地认为不严谨,忽略了过近似在安全性上是有方向、有边界的。

误区我认为验证和AI天生矛盾,要安全就只能牺牲所有灵活性,要灵活就无法做形式验证。

正解二者可以通过混合架构和“可验证设计”共存。关键模块用严格证明,非关键模块用统计方法,再配合模块化验证,既能获得数学保证,又不至于把所有AI能力锁死。

为何常见:很多介绍把“安全”和“性能”描述成零和博弈,但实际工程更关心在哪个层面上做取舍,而不是非此即彼。

面试题

Q1. 形式化方法相较于传统测试的核心优势是什么?

单选题 · easy

  • A.把无数可能输入纳入数学证明← 正确答案
  • B.让模型训练过程显著加速
  • C.保证模型输出结果全部正确
  • D.完全替代所有安全测试步骤

答案:A。形式化方法通过逻辑推理覆盖全部可能输入,而不是抽样测试。测试只能验证有限样例,无法给出无限集合的保证。选B与验证无关,选C把“证明安全属性”夸大成了“输出全部正确”,选D则混淆了验证与测试的关系。

Q2. 神经网络鲁棒性验证中的“epsilon球”表示什么?

单选题 · mid

  • A.允许输入扰动的邻域范围← 正确答案
  • B.模型输出类别的总数
  • C.训练时使用的学习率大小
  • D.测试数据集的样本数量

答案:A。epsilon球是以原始输入为中心、半径不超过epsilon的所有扰动输入集合,用于描述“稍微变化一点”的范围。它和类别数、学习率、样本数无关,因此其余选项都不正确。

Q3. 抽象解释中的“过近似”可能带来哪些后果?

多选题 · hard

  • A.产生虚假的不安全警告← 正确答案
  • B.漏掉真实存在的攻击路径
  • C.让验证结论更加偏保守← 正确答案
  • D.帮助证明所有的安全性质

答案:AC。过近似会额外圈入一些实际不会发生的行为,因此可能报告虚假的不安全警告,也让验证结论更保守。但它不会漏掉真实风险,因为真实行为集合始终被包含在近似结果内。D错误,任何验证方法都不能凭空证明所有性质。

Q4. 混合系统由哪两类行为共同构成?

单选题 · easy

  • A.连续动力学与离散跳变← 正确答案
  • B.监督学习与强化学习
  • C.数据预处理与特征提取
  • D.模型训练与模型推理

答案:A。混合系统的特点是物理过程连续变化、控制逻辑离散切换,例如汽车速度连续变化而驾驶模式发生跳变。其余选项描述的是机器学习流程,不是系统行为模型。

Q5. 可达性分析的核心任务是什么?

单选题 · mid

  • A.从初态枚举可能到达状态并检查危险区← 正确答案
  • B.减少训练数据中的噪声干扰
  • C.提升模型推理阶段的运行速度
  • D.调整神经网络模型的层数

答案:A。可达性分析从初始状态集合出发,计算所有可能到达的状态,再判断这些状态是否与危险集合相交。它不关心训练、提速或改网络结构,因此B、C、D都属于干扰项。

Q6. 为什么形式化验证在工程中常遇到“状态爆炸”?

多选题 · hard

  • A.状态组合随变量数量指数增长← 正确答案
  • B.非线性激活函数带来分析困难← 正确答案
  • C.抽象解释的结果必然精确
  • D.所有验证问题都能线性求解

答案:AB。状态数量会随变量数指数增长,ReLU等非线性激活又让精确推理变得复杂,两者共同导致状态爆炸。抽象解释本身就是近似,不一定精确;验证问题通常是指数级困难,因此C、D错误。

Q7. 在“形式保证与灵活性平衡”中,混合架构通常指什么?

单选题 · mid

  • A.关键模块形式验证,其余模块统计验证← 正确答案
  • B.所有模块都必须进行完整形式验证
  • C.完全依赖黑盒测试来保证系统安全
  • D.放弃验证,只靠模型自我修正能力

答案:A。混合架构把资源集中在关键安全模块上做形式验证,非关键部分用测试和统计方法控制风险,这是一种工程折中。B过于绝对,C失去数学保证,D放弃验证更不安全。

Q8. 模块化组合验证成立的重要前提是什么?

单选题 · hard

  • A.模块之间具有清晰接口与独立性← 正确答案
  • B.训练数据的规模足够大
  • C.模型参数量尽可能多
  • D.随机采样能够覆盖所有情况

答案:A。把整体安全分解成模块性质之和,需要每个模块的输入输出接口清晰、行为可独立分析,否则局部证明无法组合成全局结论。数据规模、参数量和随机采样都不是组合推理的前提。

Q9. 下列哪些做法有助于缩小形式化方法理论到工程的差距?

多选题 · mid

  • A.发展自动化的验证工具链← 正确答案
  • B.制定行业安全验证标准← 正确答案
  • C.放弃形式化方法只用测试
  • D.把系统拆成模块分别验证← 正确答案

答案:ABD。工具链降低使用门槛,标准让验证流程可复制,模块化拆分缓解状态爆炸,这些都是落地关键。C完全放弃形式化方法会失去数学保证,不是缩小差距的办法。

Q10. “测试证明不了安全”的根本原因是什么?

单选题 · easy

  • A.输入空间常常无限或极大← 正确答案
  • B.测试用例的编写成本太高
  • C.模型训练过程非常耗时
  • D.缺少足够干净的标注数据

答案:A。因为输入空间通常是连续且无限的,测试只能采样有限点,无法排除未测点上的风险。成本、训练耗时和数据质量都是现实困难,但不是“证明不了安全”的根本原因。