基于符号区间的神经网络形式化安全分析
摘要
- 随着深度神经网络(DNNs)在现实安全关键领域(包括自主车辆和避碰系统)的日益广泛应用,对DNNs的安全特性,特别是在不同的攻击能力下,进行形式化的检测变得越来越重要。大多数现有的dnn安全测试技术都试图找到对抗性的例子,而没有提供任何关于不存在这种对抗性例子的正式安全保证。近年来,已有多个项目使用不同类型的可满足模理论(SMT)求解器来形式化地检验DNNs的安全性。然而,所有这些方法都受到由解算器引起的高开销的限制。
- 本文提出了在不使用SMT求解器的情况下,对DNNs的安全性进行形式化检查的新方向。相反,我们利用区间算法来计算DNN输出的严格边界。与现有的基于求解器的方法不同,我们的方法易于并行化。我们进一步提出了符号区间分析和其他一些优化,以最小化输出界的高估。
- 我们设计、实现和评估我们的方法,作为ReluV al的一部分,Relu al是一个正式检查基于Relu的DNNs安全属性的系统。我们广泛的经验结果表明,ReluV-al平均比Reluplex(一种基于解算器的先进系统)好200倍。在没有GPU的单个8核机器上,在4小时内,ReluV al能够验证一个安全属性,该属性在运行5天以上后由于超时而被Reluplex认为不确定。实验表明,符号区间分析是严格分析DNNs不同安全特性的一个很有前途的新方向。
介绍
- 在过去的五年里,深神经网络(DNNs)在语音识别、图像分类和游戏等许多任务中都取得了巨大的进展,达到或超过了人类的水平。我们已经在安全和任务关键领域采用了dnn,如碰撞避免和自动驾驶。例如,无人飞机避碰系统X(ACAS-Xu)使用DNNs根据攻击者/入侵者飞机在附近的位置和速度来预测最佳行动。美国国家航空航天局和美国联邦航空局成功地对其进行了测试,并按计划在全球超过30000架客货两用飞机[40]和美国海军舰队[3]上进行了安装。
- 不幸的是,尽管我们越来越依赖DNN,但它们仍然容易受到不正确的极端情况的影响:对抗性的例子,测试输入的小的、可人为干预的扰动,意外地、任意地改变DNN的预测。在像ACAS Xu这样的安全关键系统中,一个错误处理的角落案例很容易被攻击者利用,造成重大损害,造成数千人死亡。
现有的针对角落案例测试DNN的方法侧重于寻找对抗性案例,而不提供关于即使在非常小的输入范围内也不存在对抗性输入的正式保证。在本文中,我们着重于形式化地检查DNN在给定的输入范围内(例如,攻击飞机的速度在0到500英里/小时之间)对于攻击者提供的任何恶意输入从不违反安全属性(例如,没有碰撞)。
- 由于像ReLU这样的非线性激活函数,DNN计算的一般函数是高度非线性和非凸的。因此很难准确估计输出范围。为了应对这些挑战,以往所有关于神经网络形式安全分析的工作[6,12,21,25]都依赖于不同类型的可满足性模理论(SMT)求解器,因此受到求解器效率的严重限制。
- 我们提出了ReluV-al,这是在不使用SMT求解器的情况下正式检查DNNs安全性的一个新方向。我们的方法利用区间算法[45]计算DNN输出的严格界。给定操作数的范围(例如,a1∈[0,1]和a2∈[2,3]),区间算法仅使用操作数的上下界有效地计算输出范围(例如,a2-a1∈[1,3],因为2-1=1和3-0=3)。与SMT求解器相比,我们发现区间算法对于DNN安全性的形式化分析具有更高的效率和灵活性。
- 操作上,给定一个输入范围x和安全属性P,ReluV al将其逐层传播以计算输出范围,应用各种优化以提高精度。ReluV al以两种可能的结果结束:(1)X中没有值违反P(“secure”);和(2)X中的敌对示例违反P(“secure”)。可选地,ReluV al还可以保证X的一组子区间中没有值违反P(“安全子区间”),并且所有剩余的子区间中每个都包含至少一个P的具体对抗示例(“不安全子区间”)。
- ReluVal中的一个关键挑战是当区间算法应用于复杂函数时,由输入相关性引起的固有高估[8,45]。具体地说,每个隐藏神经元的操作数依赖于DNN的相同输入,但是区间算法假设它们是独立的,因此可以计算比真实范围大得多的输出范围。例如,考虑一个简化的神经网络,其中输入x分别输入到两个分别计算2x和−x的神经元,中间输出求和以生成最终输出f(x)=2x−x。如果x的输入范围为[0,1],则f(x)的真输出范围为[0,1]。尽管如此,朴素区间算法将f(x)的范围计算为[0,2]-[0,1]=[-1,2],引入了巨大的高估误差。我们的大部分研究工作都集中在缓解这一挑战上;下面我们将描述两种有效的优化方法来收紧限制。
- 首先,ReluVal尽可能使用符号间隔来跟踪每个神经元的符号上下界。在前面的示例中,ReluV al象征性地跟踪中间输出(分别为[2x,2x]和[-x,-x]),以将最终输出的范围计算为[x,x]。当在DNN上传播符号界约束时,ReluV al正确地处理非线性函数(如ReLUs)并计算适当的符号上下界。当需要保持真实范围的声音近似时,它将符号间隔具体化。符号区间使ReluV al能够准确地处理输入相关性,与基于我们的评估的简单扩展相比,输出界估计误差减少了85.67%。
其次,当DNN的输出范围太大而不能确定时,ReluV al迭代地将输入范围平分,并在较小的输入范围上重复范围传播。我们之所以称之为优化迭代区间求精,是因为它在精神上类似于抽象求精[4,18]。区间优化也适用于大规模并行化,这是ReluV al相对于难以并行化的SMT求解器的额外优势。
- 在数学上,我们证明了只要DNN是Lipschitz连续的,DNN上的区间求精总是以有限步收敛的,这对于任何层数有限的DNN都是正确的。此外,Lipschitz常数值越低,收敛速度越快。已知稳定dnn具有低Lipschitz常数[48],因此对于此类dnn,区间求精算法可以更快地收敛。为了使区间求精更加有效,ReluVal使用额外的优化,通过计算每个层对输入变量的梯度来分析每个输入变量如何影响DNN的输出。例如,当对一个输入范围进行等分时,ReluV al选择对输出影响最大的输入变量范围。此外,它寻找单调地影响输出的输入变量范围,并且仅使用每个这样的范围的下限和上限来对输出范围进行声音分析,避免分割这些范围中的任何一个。
- 我们使用大约3000行C代码实现了ReluV al。我们使用15个安全属性(其中10个与[25]中使用的相同)评估了两个不同dnn(ACAS-Xu和MNIST网络)上的ReluV-al。我们的结果表明ReluV-al可以为所有15个属性提供形式上的保证,并且平均比Reluplex快200倍,Reluplex是一个使用专门解算器的最新DNN验证器[25]。ReluV al甚至能够在4小时内证明Reluplex[25]被视为不确定的安全属性,因为5天后超时。对于MNIST,ReluV al在5000个随机选择的测试图像中验证了39.4%的抗高达5次攻击的鲁棒性。
本文有三个主要贡献。
- 据我们所知,ReluV al是第一个利用区间算法提供DNN安全正式保证的系统。
- 区间算法在DNNs中的简单应用是无效的。我们提出了两种优化方法:符号区间和迭代求精,这两种方法显著提高了DNNs上区间算法的精度。
- 作为ReluV al的一部分,我们设计、实现、评估了我们的技术,并证明它平均比Reluplex快200倍,Reluplex是一种使用专门解算器的最先进DNN验证器[25]。
复现过程
ReluVal(Usenix Security'18)
- ReluVal是一个系统,可通过利用符号间隔分析和迭代优化来正式分析给定神经网络上的自定义属性。
- 您可以在使用符号间隔进行的神经网络形式安全分析的论文中找到ReluVal的详细说明。
- 该存储库包含ReluVal的实现以及本文所述的对ACAS Xu的评估。
- 当前,我们在NIPS 2018论文《神经网络的有效形式安全分析》中提出了一种改进的后续系统,即Neurify 。Neurify的部分改进已合并到此存储库中,与ReluVal相比,ACAS Xu数据集的性能平均成功提高了20倍,与Reluplex相比,性能平均提高了5000倍。Neurify还支持卷积模型和恶意软件检测模型。从Neurify的repo中可以找到Neurify的实现。
先决条件
- OpenBLAS安装
- OpenBLAS库用于矩阵乘法加速。因此,请确保您已成功安装OpenBLAS。您可以按照以下命令安装openblas或在《OpenBLAS安装指南》中找到快速安装指南。
sudo apt-get install libopenblas-base
wget https://github.com/xianyi/OpenBLAS/archive/v0.3.6.tar.gz
tar -xzf v0.3.6.tar.gz
cd OpenBLAS-0.3.6
make
make PREFIX=/path/to/your/installation install
mv OpenBLAS-0.3.6 OpenBLAS
下载本论文代码
git clone https://github.com/tcwangshiqi-columbia/ReluVal
- 编译:请确保OpenBLAS的路径与MakeFile中的路径相同。然后,您可以使用以下命令编译ReluVal:
cd ReluVal
make
结构
- network_test.c:要运行的主文件
- nnet.c:处理网络实例并进行符号间隔分析
- split.c:管理迭代优化和动态线程重新平衡
- matrix.c:OpenBLAS支持的矩阵运算
- nnet /:ACAS徐模型
- 脚本/:用于运行ACAS Xu评估的脚本,报告在论文中
运行
- 主要功能在network_test.c中。要运行该功能,您可以调用二进制./network_test。它期望至少三个参数。这是参数列表:
- 属性:saftety属性要验证
- 网络:要测试的网络
- 目标:属性的通缉标签
- 需要打印= 0:是否需要打印每个拆分的详细信息。0不是,1是。预设值为0。
- 一次运行测试= 0:是否需要估计输出范围而无需拆分细化。0是否,1是。预设值为0。
- 检查模式= 0:选择形式分析的模式。正常拆分和检查模式为0。检查adv模式为1。只要对分深度超过20,检查adv模式将阻止进一步的拆分,以便更快地找到具体的对抗示例。预设值为0。
- 该程序将以两种方式终止:(1)找到一个具体的对手,以及(2)该财产被确认为安全。
- 为了最大化ReluVal的性能,我建议首先快速运行check adv模式。如果没有找到对抗性示例,请运行常规模式。
这是运行ReluVal的示例:
./network_test 5 ./nnet/ACASXU_run2a_1_1_batch_2000.nnet 4
./scripts/run_property5.sh
总结
复现过程太过艰难,详细的见视频吧。