Neural network 如何验证一个简单的神经网络?我想将图层转换成数学方程,然后使用解算器,例如SAT解算器

Neural network 如何验证一个简单的神经网络?我想将图层转换成数学方程,然后使用解算器,例如SAT解算器,neural-network,conv-neural-network,verification,formal-verification,sat,Neural Network,Conv Neural Network,Verification,Formal Verification,Sat,我看过很多关于验证神经网络的论文。要么他们试图检查对手的稳健性,要么发现模型预测错误的输入。他们试图将一个图层转换为一个布尔表达式的数学方程。然后通过可用的解算器(MicrosoftZ3、Gurobi)进行求解。但我找不到任何教程或起始代码 你能帮我开始这个过程吗?例如,共享一个代码以转换一个完全连接的层,并激活MNIST数据的ReLu。然后我可以在上面构建一个更复杂的层 谢谢,我试试看。一种方法是将网络结构表示为整数线性规划(ILP)。首先让我们考虑线性激活更容易的情况。具有输入x的完全连接层

我看过很多关于验证神经网络的论文。要么他们试图检查对手的稳健性,要么发现模型预测错误的输入。他们试图将一个图层转换为一个布尔表达式的数学方程。然后通过可用的解算器(MicrosoftZ3、Gurobi)进行求解。但我找不到任何教程或起始代码

你能帮我开始这个过程吗?例如,共享一个代码以转换一个完全连接的层,并激活MNIST数据的ReLu。然后我可以在上面构建一个更复杂的层


谢谢,我试试看。一种方法是将网络结构表示为整数线性规划(ILP)。首先让我们考虑线性激活更容易的情况。具有输入x的完全连接层则具有输出y=Wx+b,其中W是该层的每个神经元的权重矩阵,b是偏差向量

假设层具有输入维度n和输出维度m。在ILP公式中,我们需要为图层输入和输出定义一个连续变量:


  • x_i,对于0,注意Z3是SMT解算器;古罗比是关于数学优化的。就我所知,神经网络的形式验证是当今的一个热门研究课题;因此,你会发现大部分的研究论文。也许你觉得谈话很有趣。我认为它们是基于SAT和#SAT@tphilipp谢谢你的更正。我一定会看录像的。你能解释一下解算器和优化器在应用方面的区别吗?谢谢你的详细回答。在方程中:y_i=b_i+W_i0*x_0+W_i1*x_1+。。。我所有的输入(x)、权重和偏差都是变量吗?解算器试图通过随机选取所有变量的值来确定y_i是否有解。我想对了吗?那么我如何比较我训练过的模型和这个模型的可验证准确性呢?我想比较使用这个解算器和经过训练的模型的分类精度。这取决于您的用例。例如,如果要计算预训练网络的对抗性示例,则权重和偏差应为常数,等于该网络的权重。输入x可能是代表网络输入的变量,也可能是前一层的输出变量。@Paul你的回答对我的研究很有帮助,如果网络出现非线性,应如何调整activation@FarabiAbdelwahed乙状结肠或tanh激活之类的东西不能直接用于这种ILP方法。我不熟悉目前在这方面的进展,但发现了一个关于使用一般激活函数验证健壮性属性的方法,这可能是进一步研究的起点