1 引言
该论文是关于神经网络鲁棒性理论类的文章。类似有Sigmoid激活函数的神经网络,由于其非线性,使得在进行神经网络鲁棒验证评估时,不可避免地会引入了不精确性。当前的一个研究方向是寻找更严格的近似值以获得更精确的鲁棒验证结果。然而,现有的紧密度定义是启发式的,缺乏理论基础。在该论文中,作者对现有的神经元紧密度表征进行了全面的实证分析,并揭示它们仅在特定的神经网络上具有优势。另外,作者基于神经网络紧密度的概念重新提出了一个统一的神经网络紧密度定义,并表明计算神经网络紧密度是一个复杂的非凸优化问题。为了能够更好地理解该论文原理,文末给出了论文中一些原理示例的相关代码。
论文链接:https://arxiv.org/abs/2208.09872
2 预备知识
神经网络是遵循逐层传播的,输入层上的每个神经元都接受一个输入值,该输入值乘以权重系数,然后传递给下一层的后续神经元。所有传入的数字相加。总和被馈送到激活函数σ\sigmaσ,并且σ\sigmaσ的输出与偏差bbb相加。然后将结果传播到下一层,直到到达输出层。
给定一个kkk层神经网络f:Rn→Rmf:\mathbb{R}^n\rightarrow \mathbb{R}^mf:Rn→Rm,即fk∘σk−1∘⋯∘σ1∘f1f^k\circ \sigma^{k-1}\circ\cdots\circ\sigma^1\circ f^1fk∘σk−1∘⋯∘σ1∘f1,其中σt\sigma^tσt是一个第ttt层非线性可微激活函数。ftf^tft可以是仿射变换或卷积操作中的其中一个:f(x)=Wx+b,(Affine Transformation)f(x)=W∗x+b,(Convolutional Operation)\begin{array}{lr}f(x)=W x + b, &(\mathrm{Affine\text{ } Transformation})\\f(x)=W * x + b, &(\mathrm{Convolutional \text{ } Operation}) \end{array}f(x)=Wx+b,f(x)=W∗x+b,(Affine Transformation)(Convolutional Operation)其中WWW,bbb和∗*∗分别表示权重矩阵,偏置向量和卷积操作。在该论文中,作者主要关注的是Sigmoid\mathrm{Sigmoid}Sigmoid,Tanh\mathrm{Tanh}Tanh和Arctan\mathrm{Arctan}Arctan的激活函数如下所示:σ(x)=11+e−x,σ(x)=Tanh(x)=ex−e−xex+e−x,σ(x)=arctan−1(x)=Arctan(x)\sigma(x)=\frac{1}{1+e^{-x}},\quad \sigma(x)=\mathrm{Tanh}(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}},\quad \sigma(x)=\mathrm{arctan}^{-1}(x)=\mathrm{Arctan}(x)σ(x)=1+e−x1,σ(x)=Tanh(x)=ex+e−xex−e−x,σ(x)=arctan−1(x)=Arctan(x) 神经网络fff的输出是一个mmm维的值为000到111之间的向量,每一个维度其对应的是属于该类别的概率。令SSS是一个mmm类分类标签集合,L(f(x))\mathcal{L}(f(x))L(f(x))表示的是输入xxx的输出标签L(f(x))=argmaxs∈Sf(x)[s]\mathcal{L}(f(x))=\arg\max\limits_{s \in \mathcal{S}}f(x)[s]L(f(x))=args∈Smaxf(x)[s]上公式直观地发现,L(f(x))\mathcal{L}(f(x))L(f(x))返回了一个集合SSS中的标签sss,f(x)[s]f(x)[s]f(x)[s]是个输出向量中最大值。
因为神经网络本质上是由计算机通过根据训练数据微调网络中的权重而组成的“程序”。与程序员开发的手工程序不同,神经网络缺乏形式化表示,几乎无法解释,这使得形式化和验证其属性非常具有挑战性。如果对神经网络的输入的合理扰动不会改变分类结果,则神经网络该扰动是鲁棒的。扰动通常通过扰动输入xxx和原始输入xxx之间的距离来测量,使用ℓp\ell_pℓp范数来表示,其中ppp可以是111、222或∞\infty∞。一般的情况情况下,使用的度量范数是ℓ∞\ell_\inftyℓ∞。
神经网络的鲁棒性可以通过界ϵ\epsilonϵ进行量化截断,ϵ\epsilonϵ是一个安全的扰动距离,使得任何低于ϵ\epsilonϵ的扰动都具有与神经网络的原始输入相同的分类结果。
定义1(局部鲁棒性): 给定一个神经网络fff,一个输入x0x_0x0和一个在ℓ∞\ell_\inftyℓ∞下的边界ϵ\epsilonϵ。𝑓𝑓f关于x0x_0x0是鲁棒的,当且仅当L(f(x))=L(f(x0))\mathcal{L}(f(x)) = \mathcal{L}(f(x_0))L(f(x))=L(f(x0))对每个xxx成立,使得∥x−x0∥p≤ϵ\|x − x_0\|_p \le \epsilon∥x−x0∥p≤ϵ。这样的ϵ\epsilonϵ被称为认证下界。
验证fff的鲁棒性有如下两个问题:
- 需要证明对于每个xxx满足∥x−x0∥p≤ϵ\|x − x_0\|_p \le \epsilon∥x−x0∥p≤ϵ,则有fs0(x)−fs(x)>0f_{s_0}(x)-f_s(x)>0fs0(x)−fs(x)>0其中对于每个s∈S−{s0}s\in \mathcal{S} − \{s_0\}s∈S−{s0}成立,其中𝑠0=L(f(x0))𝑠_0 = \mathcal{L}(f(x_0))s0=L(f(x0)),且fs(x)f_s(x)fs(x)返回概率P(L(f(x))=s)P(\mathcal{L}(f(x)) = s)P(L(f(x))=s),即将xxx分类到类别sss中;
- 计算可验证的下界,一个大的可验证的下界意味着更精确的鲁棒性验证结果。由于约束的非线性,会导致直接计算ϵ\epsilonϵ很困难,大多数最先进的方法都采用高效的二分搜索算法。
由于包含非线性激活函数,所以神经网络fff是高度非线性的。证明公式fs0(x)−fs(x)>0f_{s_0}(x)-f_s(x)>0fs0(x)−fs(x)>0的计算成本很高,即使对于最简单的全连接ReLU\mathrm{ReLU}ReLU网络也是NP-hard的。目前已经研究了许多方法来提高验证效率的,但同时也牺牲了完整性。具有代表性的方法包括区间分析、解释中的抽象和输出范围估计等。这些方法的基础技术是使用线性约束来过度逼近非线性激活函数,这可以比原始约束更有效地解决计算复杂度的问题。基于近似的方法不是直接证明公式fs0(x)−fs(x)>0f_{s_0}(x)-f_s(x)>0fs0(x)−fs(x)>0,而是通过两个线性约束过度近似fs0(x)f_{s_0}(x)fs0(x)和fs(x)f_s(x)fs(x),并证明fs0(x)f_{s_0}(x)fs0(x)的线性下界fL,s0(x)f_{L,s_0}(x)fL,s0(x)是大于fs(x)f_s(x)fs(x)的线性上界fU,s(x)f_{U,s}(x)fU,s(x)。显然,fL,s0(x)−fU,s(x)>0f_{L,s_0}(x)-f_{U,s}(x)>0fL,s0(x)−fU,s(x)>0是公式fs0(x)−fs(x)>0f_{s_0}(x)-f_s(x)>0fs0(x)−fs(x)>0的充分条件,证明或反证的效率明显更高。
定义2(上下线性界): 令σ(x)\sigma(x)σ(x)是xxx在区间[l,u][l,u][l,u]的非线性函数。已知系数αL,αU,βL,βU∈R\alpha_L,\alpha_U,\beta_L,\beta_U\in\mathbb{R}αL,αU,βL,βU∈R,则有
hU(x)=αUx+βU,hL(x)=αLx+βLh_U(x)=\alpha_U x+\beta_U,\quad h_L(x)=\alpha_L x +\beta_LhU(x)=αUx+βU,hL(x)=αLx+βL当以下条件成立时∀x∈[l,u],hL(x)≤σ(x)≤hU(x)\forall x \in [l,u],\quad h_L(x)\le \sigma(x) \le h_U(x)∀x∈[l,u],hL(x)≤σ(x)≤hU(x)
则hU(x)则h_U(x)则hU(x)和hL(x)h_L(x)hL(x)分别是σ(x)\sigma(x)σ(x)的上下线性界。
使用线性上下界过度逼近非线性激活函数是神经网络逼近的关键。对于区间[l,u][l,u][l,u]上的每个激活函数σ\sigmaσ,作者定义了一个线性上界hUh_UhU和一个线性下界hLh_LhL以确保对于区间[l,u][l,u][l,u]中的所有xxx,使得σ(x)\sigma(x)σ(x)包含在[hL(x),hU(x)][h_L(x), h_U(x)][hL(x),hU(x)]。给定定义 1中的输入范围,网络的输出范围是通过传播每个网络的输出区间来计算的定义2中的神经元到输出层。
如下图所示考虑一个简单基于近似验证神经网络的示例,最初的验证问题是证明对于任何输入(x1,x2)(x_1,x_2)(x1,x2),其中x1∈[−1,1]x_1\in[-1,1]x1∈[−1,1]和x2∈[−1,1]x_2\in[-1,1]x2∈[−1,1],它总是被分类为神经元标签x5x_5x5。这相当于证明辅助神经元的输出$x_7 = (x_5 −x_6) $总是大于000。作者定义线性上/下界xU,3,xL,3x_{U,3}, x_{L,3}xU,3,xL,3和xU,4,xL,4x_{U,4}, x_{L,4}xU,4,xL,4分别近似神经元x3x_3x3和x4x_4x4。由上图可知,xL,5−xU,6x_{L,5}-x_{U,6}xL,5−xU,6的输出区间为[0.177,5.817][0.177, 5.817][0.177,5.817],从而证明网络对所有输入在[−1,1]×[−1,1][−1, 1] \times [−1, 1][−1,1]×[−1,1]区间中是鲁棒的。
需要注意的是也可以考虑由一系列线段组成的分段线性边界来更紧密地逼近激活函数。然而,这种分段方式会导致约束的数量在逐层传播时呈指数级增长。这将大大降低验证的可扩展性。因此,使用一个线性上界和一个线性下界逼近激活函数是基于逼近的鲁棒性验证方法的最有效和广泛采用的选择。
3 神经网络紧密近似
在更严格的近似会产生更精确的验证结果的假设下,现有的紧密度表征是一种启发式的方法。但现有例子表明这个假设并不总是成立。这意味着定义每个单独神经元的紧密度对于实现紧密近似既不充分也不必要。那是因为神经元上的紧密度不能保证神经网络的输出间隔总是精确的。但是,输出区间是判断网络是否鲁棒的基础。为了表征神经网络中激活函数的近似紧密度,作者引入了神经网络紧密度的概念,确保通过对激活函数的网络方式更紧密的逼近,使得神经网络产生更精确的输出间隔,从而产生更精确的验证结果。
定义3(神经网络紧密度): 给定神经网络f:Rn→Rmf:\mathbb{R}^n\rightarrow \mathbb{R}^mf:Rn→Rm,x∈Bp(x0,ϵ)x\in\mathbb{B}_p(x_0,\epsilon)x∈Bp(x0,ϵ)。令(fL,fU)(f_L,f_U)(fL,fU)是fff的线性近似,且fUf_UfU和fLf_LfL分别表示fff的上下界。如果(fL,fU)(f_L,f_U)(fL,fU)是神经网络fff的最紧密逼近,则对于任意不同的线性逼近(f^L,f^U)(\hat{f}_L,\hat{f}_U)(f^L,f^U)有∀s∈S,minx∈Bp(x0,ϵ)fL,s(x)≥minx∈Bp(x0,ϵ)f^L,s(x)\forall s \in S,\quad \min\limits_{x \in \mathbb{B}_p(x_0,\epsilon)}f_{L,s}(x)\ge \min\limits_{x\in\mathbb{B}_p(x_0,\epsilon)}\hat{f}_{L,s}(x)∀s∈S,x∈Bp(x0,ϵ)minfL,s(x)≥x∈Bp(x0,ϵ)minf^L,s(x)∀s∈S,maxx∈Bp(x0,ϵ)fU,s(x)≤maxx∈Bp(x0,ϵ)f^U,s(x)\forall s \in S,\quad \max\limits_{x \in \mathbb{B}_p(x_0,\epsilon)}f_{U,s}(x)\le \max\limits_{x\in\mathbb{B}_p(x_0,\epsilon)}\hat{f}_{U,s}(x)∀s∈S,x∈Bp(x0,ϵ)maxfU,s(x)≤x∈Bp(x0,ϵ)maxf^U,s(x)其中fL,s(x)f_{L,s}(x)fL,s(x)和fU,s(x)f_{U,s}(x)fU,s(x)分别表示fL(x)f_L(x)fL(x)和fU(x)f_U(x)fU(x)的第sss个元素。
定理1: 由定义3可知,如果(fL,fU)(f_L,f_U)(fL,fU)比(f^L,f^U)(\hat{f}_L,\hat{f}_U)(f^L,f^U)更紧密,则神经网络的近似(fL.fU)(f_L.f_U)(fL.fU)比(f^L,f^U)(\hat{f}_L,\hat{f}_U)(f^L,f^U)有更精确的鲁棒性。
证明: 令s0=L(f(x0))s_0=\mathcal{L}(f(x_0))s0=L(f(x0))有固定的扰动ϵ\epsilonϵ。需要验证对于任意sss有以下不等式成立
minx∈Bp(x0,ε)fL,s0(x)>maxx∈Bp(x0,ε)fU,s(x)\min\limits_{x\in\mathbb{B}_p(x_0,\varepsilon)} f_{L,s_0}(x)>\max\limits_{x\in\mathbb{B}_p(x_0,\varepsilon)}f_{U,s}(x)x∈Bp(x0,ε)minfL,s0(x)>x∈Bp(x0,ε)maxfU,s(x)根据定义3可知,可得以下不等式minx∈Bp(x0,ε)fL,s0(x)≥minx∈Bp(x0,ε)f^L,s0(x)>maxx∈Bp(x0,ε)f^U,s(x)≥maxx∈Bp(x0,ε)fU,s(x)\min\limits_{x\in\mathbb{B}_p(x_0,\varepsilon)} f_{L,s_0}(x)\ge \min\limits_{x\in\mathbb{B}_p(x_0,\varepsilon)} \hat{f}_{L,s_0}(x)>\max\limits_{x\in\mathbb{B}_p(x_0,\varepsilon)} \hat{f}_{U,s}(x)\ge \max\limits_{x\in\mathbb{B}_p(x_0,\varepsilon)} f_{U,s}(x)x∈Bp(x0,ε)minfL,s0(x)≥x∈Bp(x0,ε)minf^L,s0(x)>x∈Bp(x0,ε)maxf^U,s(x)≥x∈Bp(x0,ε)maxfU,s(x)显然可知(fL,fU)(f_L,f_U)(fL,fU)是比(f^L,f^U)(\hat{f}_L,\hat{f}_U)(f^L,f^U)更紧密的近似。
给定一个kkk层神经网络f:Rn→Rmf:\mathbb{R}^n \rightarrow \mathbb{R}^mf:Rn→Rm,使用ϕt\phi_tϕt来表示在应用第ttt个激活函数之前fff层的复合函数,即ϕt=ft∘σt−1∘ft−1∘⋯∘σ1∘f1\phi^t = f^t \circ \sigma^{t-1}\circ f^{t-1}\circ \cdots \circ \sigma^1 \circ f^1ϕt=ft∘σt−1∘ft−1∘⋯∘σ1∘f1第ttt层有ntn^tnt个神经元,ϕrt(x)\phi^t_r(x)ϕrt(x)表示输出的第rrr个元素。对于每个激活函数σ(x),x∈[l,u]\sigma(x),x\in[l,u]σ(x),x∈[l,u],其上和下线性界分别为hU(x)=αUx+βUh_U(x)=\alpha_Ux+\beta_UhU(x)=αUx+βU和hL(x)=αLx+βLh_L(x)=\alpha_Lx+\beta_LhL(x)=αLx+βL。然后可以将计算神经网络最紧密近似的问题形式化为以下优化问题:max(minx∈B∞(x0,ϵ)(AL,skx+BL,sk))min(maxx∈B∞(x0,ϵ)(AU,skx+BU,sk))s.t.∀r∈Z,1≤r≤nt,∀t∈Z,1≤t<k\begin{aligned}&\max\left(\min\limits_{x\in \mathbb{B}_\infty(x_0,\epsilon)}(A^k_{L,s}x+B^k_{L,s})\right)\\&\min\left(\max\limits_{x\in \mathbb{B}_\infty(x_0,\epsilon)}(A^k_{U,s}x+B^k_{U,s})\right)\\&\mathrm{s.t.}\quad \forall r\in \mathbb{Z},1\le r\le n^t,\forall t\in \mathbb{Z},1\le t<k\end{aligned}max(x∈B∞(x0,ϵ)min(AL,skx+BL,sk))min(x∈B∞(x0,ϵ)max(AU,skx+BU,sk))s.t.∀r∈Z,1≤r≤nt,∀t∈Z,1≤t<k{aL,rtzrt+βL,rt≤σminx∈B∞(x0,ϵ)AL,rtx+BL,rt≤zrt≤maxx∈B∞(x0,ϵ)AU,rtx+BU,rt\left\{\begin{aligned}&a^t_{L,r}z_r^t +\beta^t_{L,r}\le \sigma\\&\min\limits_{x\in\mathbb{B}_\infty(x_0,\epsilon)}A^t_{L,r}x+B^t_{L,r}\le z^t_r \le \max\limits_{x\in\mathbb{B}_\infty(x_0,\epsilon)}A_{U,r}^t x+B^t_{U,r}\end{aligned}\right.⎩⎨⎧aL,rtzrt+βL,rt≤σx∈B∞(x0,ϵ)minAL,rtx+BL,rt≤zrt≤x∈B∞(x0,ϵ)maxAU,rtx+BU,rt其中AL,rtx+BL,rtA^t_{L,r}x+B^t_{L,r}AL,rtx+BL,rt和AU,rtx+BU,rtA^t_{U,r}x+B^t_{U,r}AU,rtx+BU,rt分别表示ϕrt(x)\phi^t_r(x)ϕrt(x)的上下界,且AL,rtA^t_{L,r}AL,rt,AU,rtA^t_{U,r}AU,rt,BL,rtB^t_{L,r}BL,rt和BU,rtB^t_{U,r}BU,rt表示定义在权重WtW^tWt和偏置btb^tbt的常数值,具体的定义如下所示:AL,rt={Wrt,t=1W≥0tαLt−1⊙ALt−1+W<0,rtαUt−1⊙ALt−1,t≥2A^t_{L,r}=\left\{\begin{array}{lr}W^t_r,&t=1\\W^t_{\ge 0}\alpha^{t-1}_L \odot A^{t-1}_L+W^t_{<0,r}\alpha_U^{t-1}\odot A^{t-1}_L,&t \ge 2\end{array}\right.AL,rt={Wrt,W≥0tαLt−1⊙ALt−1+W<0,rtαUt−1⊙ALt−1,t=1t≥2BL,rt={brt,t=1W≥0,rt(αLt−1⊙BLt−1+βLt−1)+W<0,rt(αUt−1⊙BLt−1⊙+βLt−1)+brt,t≥2B_{L,r}^t=\left\{\begin{array}{lr}b_r^t,&t=1\\W_{\ge 0,r}^t(\alpha^{t-1}_L\odot B^{t-1}_L+\beta_L^{t-1})+&\\W^{t}_{<0,r}(\alpha_U^{t-1}\odot B^{t-1}_L\odot+\beta^{t-1}_L)+b_r^t,&t \ge 2\end{array}\right.BL,rt=⎩⎨⎧brt,W≥0,rt(αLt−1⊙BLt−1+βLt−1)+W<0,rt(αUt−1⊙BLt−1⊙+βLt−1)+brt,t=1t≥2AU,rt={Wrt,t=1W≥0tαUt−1⊙AUt−1+W<0,rtαLt−1⊙AUt−1,t≥2A^t_{U,r}=\left\{\begin{array}{lr}W^t_r,&t=1\\W^t_{\ge 0}\alpha^{t-1}_U \odot A^{t-1}_U+W^t_{<0,r}\alpha_L^{t-1}\odot A^{t-1}_U,&t \ge 2\end{array}\right.AU,rt={Wrt,W≥0tαUt−1⊙AUt−1+W<0,rtαLt−1⊙AUt−1,t=1t≥2BL,rt={brt,t=1W≥0,rt(αUt−1⊙BUt−1+βUt−1)+W<0,rt(αLt−1⊙BUt−1⊙+βUt−1)+brt,t≥2B_{L,r}^t=\left\{\begin{array}{lr}b_r^t,&t=1\\W_{\ge 0,r}^t(\alpha^{t-1}_U\odot B^{t-1}_U+\beta_U^{t-1})+&\\W^{t}_{<0,r}(\alpha_L^{t-1}\odot B^{t-1}_U\odot+\beta^{t-1}_U)+b_r^t,&t \ge 2\end{array}\right.BL,rt=⎩⎨⎧brt,W≥0,rt(αUt−1⊙BUt−1+βUt−1)+W<0,rt(αLt−1⊙BUt−1⊙+βUt−1)+brt,t=1t≥2需要注意的是,以上优化形式可能无法保证单个激活函数的近似值相对于现有的紧密度定义是最紧密的。
4 近似单隐层网络
对于单层网络,优化问题可以进一步简化如下:
max(minx∈B∞(x0,ϵ)(AL,sx+BL,s)),min(maxx∈B∞(x0,ϵ)(AU,sx+BU,s))\max\left(\min\limits_{x\in\mathbb{B}_\infty(x_0,\epsilon)}(A_{L,s}x+B_{L,s})\right),\quad \min\left(\max\limits_{x\in\mathbb{B}_\infty(x_0,\epsilon)}(A_{U,s}x+B_{U,s})\right)max(x∈B∞(x0,ϵ)min(AL,sx+BL,s)),min(x∈B∞(x0,ϵ)max(AU,sx+BU,s))s.t. {αL,rzr+βL,r≤σ(zr)≤αU,rzr+βU,r,minx∈B∞(x0,ϵ)W1x+b1≤zr≤maxx∈B∞(x0,ϵ)W1x+b1,∀r∈Z,1≤r≤n.\mathrm{s.t.}\text{ } \left\{\begin{aligned}&\alpha_{L,r}z_r+\beta_{L,r}\le \sigma(z_r)\le \alpha_{U,r}z_r+\beta_{U,r},\\&\min\limits_{x\in\mathbb{B}_\infty(x_0,\epsilon)}W^1 x+b^1 \le z_r \le\max\limits_{x\in\mathbb{B}_\infty(x_0,\epsilon)}W^1x+b^1, \\&\forall r \in \mathbb{Z},\quad 1\le r\le n.\end{aligned}\right.s.t. ⎩⎨⎧αL,rzr+βL,r≤σ(zr)≤αU,rzr+βU,r,x∈B∞(x0,ϵ)minW1x+b1≤zr≤x∈B∞(x0,ϵ)maxW1x+b1,∀r∈Z,1≤r≤n.其中AL,s=W≥0,s2(αL⊙W1)+W<0,s2(αU⊙W1)A_{L,s}=W^2_{\ge 0,s}(\alpha_L \odot W^1)+W^2_{<0,s}(\alpha_U \odot W^1)AL,s=W≥0,s2(αL⊙W1)+W<0,s2(αU⊙W1),BL,s=W≥0,s2(αL⊙b1+βL)+W<0,s2(αU⊙b1+βU)+bs2B_{L,s}=W^2_{\ge 0,s}(\alpha_L\odot b^1+\beta_L)+W^2_{<0,s}(\alpha_U\odot b^1+\beta_U)+b^2_sBL,s=W≥0,s2(αL⊙b1+βL)+W<0,s2(αU⊙b1+βU)+bs2,nnn表示的是隐层的数量。优化问题是一个凸变体,因此可以通过利用基于梯度下降的搜索算法来求解该问题,以下算法流程图为计算单隐层近似相关算法的伪代码。对于隐层神经元上的每个激活函数,首先确定穿过两个端点的线ω\omegaω可以是上线性界还是下线性界。然后选择激活函数的切线作为上线性界或下线性界,其截断点可以是优化变量。最后用梯度下降法去优化目标函数,并进一步更新系数αL\alpha_LαL,αU\alpha_UαU,βL\beta_LβL和βU\beta_UβU。
对于具有两个或更多隐层的神经网络,由于其非凸性使得求解相关的优化问题而变得不切实际。对于任何隐藏层,激活函数的输入间隔都受到前一个隐藏层激活函数的近似值的约束。在该论文中,作者提出了可计算的神经元最紧密近似,并确定了当神经网络中的所有权重都为非负时,神经元最紧密近似导致网络最紧密。
5 实验结果
如下表格所示为没有非负权重的Sigmoid模型的对比结果。在关于精度验证结果中,论文中提出的NEWISE计算可验证下界方法要比所有其它方法都要出色。尤其是针对于在Fashion Mnist数据集的训练出的模型,该方法甚至一度实现了验证结果高达 96.22%的精度。另外,NEWISE也相应对标准差的精度提高了129.33%。这也表明,跟其它方法相比,论文的方法可以对输入更加敏感。
如下表格所示为不同评估方法在具有混合权重的Sigmoid激活关于全连接神经网络和卷积神经网络对比结果。依然可以发现论文中提出的NEWISE计算可验证下界方法要比所有其它方法在提高评估精度和标准差方面都要出色。
6 实验程序
以下两个程序分别画出了单个sigmoid函数上下线性界以及论文中实例2的示意图。
from matplotlib import pyplot as plt
import numpy as np
x = np.linspace(-10,10,10000)
Sigmoid_x = 1/(1 + np.exp(-x))
X_U3 = 0.104 * x + 0.670
X_L3 = 0.104 * x + 0.329
plt.plot(x, Sigmoid_x, label='Sigmoid(x)')
plt.plot(x, X_U3, label='X_U3')
plt.plot(x, X_L3, label='X_L3')
plt.xlabel('x')
plt.ylabel('y')
plt.legend(loc='best')
# # plt.text(-0.5,3,r"$Loss=(w^8 - 1)^2$",fontsize=20,color="red")
plt.show()

以下两个程序分别画出了单个arctan函数上下线性界以及论文中关于arctan实例的示意图。
import numpy as np
import mpl_toolkits.axisartist as ast
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
data = np.linspace(-1, 1, 20)
x1, x2 = np.meshgrid(data, data)
x3_sigmoid = 1 / (1 + np.exp(-x1 - x2))
xu3 = 0.104 * (x1 + x2) + 0.670
xl3 = 0.104 * (x1 + x2) + 0.329
x4_sigmoid = 1 / (1 + np.exp(-x1 + x2))
xu4 = 0.104 * (x1 - x2) + 0.670
xl4 = 0.104 * (x1 - x2) + 0.329
x5 = 2 * x3_sigmoid + 2 * x4_sigmoid
xu5 = 2 * xu3 + 2 * xu4
xl5 = 2 * xl3 + 2 * xl4
x5 = 2 * x3_sigmoid + 2 * x4_sigmoid
x6 = 3 * x3_sigmoid - 5 * x4_sigmoid
xu6 = 3 * xu3 - 5 * xl4
xl6 = 3 * xl3 - 5 * xu4
x7 = xl5 - xu6
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(x1, x2, x7)
# ax.plot_surface(x1, x2, xu6)
# ax.plot_surface(x1, x2, xl6)
# ax.plot_surface(x1, x2, xl5)
# ax.plot_surface(x1, x2, x5)
plt.show()

from matplotlib import pyplot as plt
import numpy as np
x = np.linspace(-3,-1,10000)
Arctan_x = np.arctan(x)
X_U3 = 0.232 * x - 0.554
X_L3 = 0.200 * x - 0.707
plt.plot(x, Arctan_x, label='Arctan(x)')
plt.plot(x, X_U3, label='X_U3')
plt.plot(x, X_L3, label='X_L3')
plt.xlabel('x')
plt.ylabel('y')
plt.legend(loc='best')
# # plt.text(-0.5,3,r"$Loss=(w^8 - 1)^2$",fontsize=20,color="red")
plt.show()

import numpy as np
import mpl_toolkits.axisartist as ast
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
data1 = np.linspace(-2, -1, 20)
data2 = np.linspace(-1, 0, 20)
x1, x2 = np.meshgrid(data1, data2)
x3_arctan = np.arctan(x1 + x2)
xu3 = 0.232 * (x1 + x2) - 0.554
# xl3 = 0.200 * (x1 + x2) - 0.707
xl3 = 0.100 * (x1 + x2) - 0.949
x4_arctan = np.arctan(x1 - x2)
xu4 = 0.554 * (x1 - x2)
# xl4 = 0.500 * (x1 - x2) - 0.285
xl4 = 0.200 * (x1 - x2) - 0.707
x5 = x3_arctan + 2 * x4_arctan
xu5 = xu3 + 2 * xu4
xl5 = xl3 + 2 * xl4
x6 = - x3_arctan + 2 * x4_arctan
xu6 = - xl3 + 2 * xu4
xl6 = - xu3 + 2 * xl4
x7 = xl5 - xu6
print(x7.max())
print(x7.min())
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x8 = 0 *(x1 + x2)
ax.plot_surface(x1, x2, x7)
ax.plot_surface(x1, x2, x8)
# ax.plot_surface(x1, x2, xl6)
# ax.plot_surface(x1, x2, xl5)
# ax.plot_surface(x1, x2, x5)
plt.show()
