作者:Elena Botoeva, Panagiotis Kouvaros, Jan Kronqvist, Alessio Lomuscio, Ruth Misener
单位:英国伦敦帝国理工学院计算机系
摘要
本文引入了一种高效的方法来验证基于ReLU的前馈神经网络。我们推导了一种利用ReLU节点之间的依赖关系的自动程序,从而修剪了需要由基于MILP的验证问题公式考虑的搜索树。我们用输入域分割和符号区间传播的方法增强了所得到的算法。我们介绍了Venus,即由此产生的验证工具包,并在ACAS避撞网络和MNIST和CIFAR-10数据集上训练的模型上进行评估。获得的实验结果表明,与目前最先进的工具相比,有相当大的提升。
背景知识
符号含义
我们用 s i s_i si表示第 i 层的节点数量, n i , q n_{i,q} ni,q表示第 i 层的第 q 个节点,给定神经网络一个输入 x x x, x ^ i , q ( x i , q ) \hat{x}_{i,q}(x_{i,q}) x^i,q(xi,q)表示 n i , q n_{i,q} ni,q的预激活(输出)。对于有界域上的一组输入,每个节点都和上下预激活和激活边界是关联的, l ^ i , q \hat{l}_{i,q} l^i,q和 u ^ i , q \hat{u}_{i,q} u^i,q( l i , q l_{i,q} li,q和 u i , q u_{i,q} ui,q)分别表示预激活(输出)的下边界和上边界。
x ^ i \hat{x}_i x^i和 x i x_i xi分别表示域 [ l ^ i , u ^ i ] [\hat{l}_i,\hat{u}_i] [l^i,u^i]中第 i 层的预激活和域 [ l i , u i ] [l_i,u_i] [li,ui]中第 i 层的输出,其中 x 0 = x x_0=x x0=x。 l 0 l_0 l0和 u 0 u_0 u0是输入的下边界和上边界。
一个ReLU节点 n i , q n_{i,q} ni,q有两种状态:
- 严格活跃状态:必须满足 l ^ i , q ≥ 0 \hat{l}_{i,q}\ge0 l^i,q≥0,表示为 s t ( n i , q ) = ⊤ st(n_{i,q})=\top st(ni,q)=⊤
- 严格非活跃状态:必须满足 u ^ i , q ≤ 0 \hat{u}_{i,q}\le0 u^i,q≤0,表示为 s t ( n i , q ) = ⊥ st(n_{i,q})=\bot st(ni,q)=⊥
- 一个严格活跃节点或严格非活跃节点被称为稳定节点,否则这个节点就是不稳定的,表示为 s t ( n i , q ) = ? st(n_{i,q})=? st(ni,q)=?
验证问题
给定一个网络 f : R s 0 → R s k f:R^{s_0}→R^{s_k} f:Rs0→Rsk和一个规范 ( χ 0 , χ k ) ⊆ R s 0 × R s k (\chi_0,\chi_k) \sube R^{s_0} \times R^{s_k} (χ0,χk)⊆Rs0×Rsk,验证问题决定是否 ∀ x 0 ⊂ χ 0 : x k ⊂ χ k \forall x_0 \sub \chi_0:x_k \sub \chi_k ∀x0⊂χ0:xk⊂χk
MILP表达方法
验证问题允许通过大M编码方法将其精确表示为混合整数线性程序(MILP)。
如果节点是严格活跃的,则可编码为
x
i
,
q
=
x
^
i
,
q
x_{i,q}=\hat{x}_{i,q}
xi,q=x^i,q;如果节点是严格非活跃的,则可编码为
x
i
,
q
=
0
x_{i,q}=0
xi,q=0;否则,节点的编码为
x
i
,
q
≥
0
,
x
i
,
q
≥
x
^
i
,
q
,
x
i
,
q
≤
u
^
i
,
q
⋅
δ
i
,
q
,
x
i
,
q
≤
x
^
i
,
q
−
l
^
i
,
q
⋅
(
1
−
δ
i
,
q
)
,
x_{i,q}\ge0, \quad x_{i,q}\ge\hat{x}_{i,q},\\ x_{i,q}\le\hat{u}_{i,q}·\delta_{i,q}, \quad x_{i,q}\le\hat{x}_{i,q}-\hat{l}_{i,q}·(1-\delta_{i,q}),
xi,q≥0,xi,q≥x^i,q,xi,q≤u^i,q⋅δi,q,xi,q≤x^i,q−l^i,q⋅(1−δi,q),
其中
δ
i
,
q
\delta_{i,q}
δi,q是一个二元变量,
δ
i
,
q
=
0
i
f
f
x
i
,
q
=
0
\delta_{i,q}=0\ iff\ x_{i,q}=0
δi,q=0 iff xi,q=0,
δ
i
,
q
=
1
i
f
f
x
i
,
q
=
x
^
i
,
q
\delta_{i,q}=1\ iff\ x_{i,q}=\hat{x}_{i,q}
δi,q=1 iff xi,q=x^i,q
对于一个由一组二元变量集合 Δ \Delta Δ组成的MILP程序,一个部分配置是一个函数 h : Δ → { 0 , 1 } h:\Delta→\{0,1\} h:Δ→{0,1},所有可能的部分配置集合被称为程序的配置空间。
求解MILP程序的主要方法是分枝定界法。在分枝定界法中,每个完整性约束 δ i , j ∈ { 0 , 1 } \delta_{i,j}∈\{0,1\} δi,j∈{0,1}放松为线性约束 δ i , j ∈ [ 0 , 1 ] \delta_{i,j}∈[0,1] δi,j∈[0,1],从而定义了可在多项式时间内求解的线性规划。
依赖性分析
本文引入了一种技术,利用我们在下面定义的网络依赖关系来减少解决验证问题时需要考虑的配置空间。
依赖关系的定义
通俗的说法:当可以通过一个节点的稳定状态来来确定另一个节点的稳定状态时,那么这两个节点间存在依赖关系。
当节点 n i , q n_{i,q} ni,q是严格活跃或者严格非活跃时,节点 n j , r n_{j,r} nj,r也是严格活跃或者严格非活跃,那么就称节点 n j , r n_{j,r} nj,r依赖 n i , q n_{i,q} ni,q。
我们可以将依赖关系表示为四个不相干的联合体:
此外,我们还区分层内依赖和层间依赖,这需要不同的算法处理。
层内依赖
如果 i = j i=j i=j,则依赖 ( n i , q , n j , r ) (n_{i,q},n_{j,r}) (ni,q,nj,r)被称为层内依赖。
对于一对节点 n i , q , n i , r n_{i,q},n_{i,r} ni,q,ni,r,当 n i , r n_{i,r} ni,r的预激活值等于0时,我们定义 x ^ i , q , r = 0 \hat{x}_{i,q,r=0} x^i,q,r=0为 n i , q n_{i,q} ni,q的预激活值的集合,即
引理1. 对于神经网络 f f f和一对不稳定节点 ( n i , q , n i , r ) (n_{i,q},n_{i,r}) (ni,q,ni,r),有以下结论:
连续层依赖和层间依赖
如果 i ≠ j i\ne j i=j,则依赖 ( n i , q , n j , r ) (n_{i,q},n_{j,r}) (ni,q,nj,r)被称为层间依赖。层间依赖的一种特殊情况是由 j = i + 1 j=i+1 j=i+1定义的,我们称之为连续层依赖。
引理2. 设S是给定网络配置空间中满足所有连续层依赖的子集。那么,S中的每个配置满足任何层间依赖 ( j − i > 1 ) (j-i>1) (j−i>1)。
因此,连续层依赖足以确定最小配置空间,下面给出连续层依赖的计算
引理3. 对于神经网络 f f f和一对不稳定节点 ( n i , q , n j , r ) (n_{i,q},n_{j,r}) (ni,q,nj,r),其中 j = i + 1 j=i+1 j=i+1,有以下结论:
基于上述情况,我们现在提出了一个依赖性分析过程来减少配置 h 的扩展数量,算法1列举了该过程的步骤。
首先,它根据 h 稳定ReLU节点,并重新计算在h下不稳定的ReLU节点的边界。在边界的基础上,它根据引理3和引理1确定依赖项。然后将这些依赖项表示为约束,称为依赖项切割,这些约束在运行时添加到MILP程序中。
Venus验证工具
Venus是一个验证工具包,实现了依赖性分析过程,并使用符号区间算法和域分割技术对其进行了扩展。域分割方法将输入域划分为子域,从而收紧了节点的边界区间,而符号区间算法则使后者能够高效而严密地逼近。
验证过程
Venus所基于的验证程序在算法2中进行了概述。该程序遵循一种分治方法,通过该方法递归分割输入域直到满足某些启发式标准并解决与每个子域相关的验证子问题。
如果相关验证问题的答案为“否”,则MILP程序是可行的。如果至少有一个子问题的答案为“否”,则原始问题的答案为“否”。因此,如果发现这些子问题中的任何一个是可行的,则程序终止,而不用分析剩余的MILP程序。
输入域分割
算法 3 概述了拆分过程。该过程通过在每一步选择一个输入维度并将其范围一分为二来递归地拆分输入域。
维度是根据我们所说的稳定性比率启发式选择的,稳定性比率是输入域中稳定节点数与节点总数的比率。对于每个输入维度,我们将输入域沿维度二等分,分别计算两个子域中的稳定性比率并计算平均值,选择最大化了稳定性比率的那个维度。
显然,需要执行的分割数量随着维度数量的增加而呈指数增长。因此,虽然低输入维网络的验证问题可以有效地划分为许多更容易解决的子问题,但高输入维网络的问题使这种划分变得难以处理。
而Venus的优势在于,对于高维度问题,它可以利用 MILP 求解器与依赖分析器相结合的手段来减少配置空间。
对于一个问题是否应该分割,本文提出了一个标准,该标准表示对拆分前验证问题的难度与拆分后的难度的估计。
P是原始验证问题,score越大,我们预估验证问题的难度越小。m 是分裂参数,分裂参数控制分裂深度带来的惩罚的“折扣”程度。
在输入维数低的网络上出现问题的情况下,分裂参数应保持较高以利于分裂;高维输入则相反。
给定一个分割深度为 d 的问题 p,以及分割 p 的输入域的选定维度所产生的子问题 p1 和 p2,只有当(p1, d + 1) 和 (p2, d + 1) 的平均值大于(p, d) 的分数时,才进行分割。
Venus的体系结构
如图3所示:
实验结果与评估
我们用Venus与最先进的神经网络验证工具进行比较,目前,领先的验证工具是Marabou(Katz et al.2019),Neurify(Wang et al.2018a)和NSVerify(Akintunde et al.2018)。
测试数据集有:ACAS Xu(机载防撞系统),MINIST(手写数字识别),CIFAR-10(来自10个不同类别的图像,飞机、汽车、鸟类等)
图4给出了每个工具可以完成的验证查询总数岁时间变化的图形表示。
事实上,Venus在MNIST和CIFAR-10上比NSVerify表现出的性能提升主要是依赖性分析和理想公式相结合的结果。