【论文快读】DeepFool(2016)

标题:DeepFool: a simple and accurate method to fool deep neural networks
作者:Seyed-Mohsen Moosavi-Dezfooli等
链接:https://arxiv.org/abs/1511.04599
摘要:
这里写图片描述
本文内容:
对于robustness的量化与计算;
DeepFool算法。

形式化

图像 x ∈ \textbf{x}\in x图像空间 R n \mathbb{R}^n Rn
分类器 k ^ ( x ) \hat{k}(\textbf{x}) k^(x)在点 x x x处的鲁棒性 Δ ( x ; k ^ ) \Delta(\textbf{x};\hat{k}) Δ(x;k^):(几何意义是 x \textbf{x} x到分类边界的距离)
Δ ( x ; k ^ ) : = min ⁡ r ∣ ∣ r ∣ ∣ 2    s . t . k ^ ( x + r ) ≠ k ^ ( x ) \Delta(\textbf{x};\hat{k}):=\min_{\textbf{r}}\left||\textbf{r}|\right|_2 \ \ s.t.\hat{k}(\textbf{x}+\textbf{r})\neq\hat{k}(\textbf{x}) Δ(x;k^):=rminr2  s.t.k^(x+r)̸=k^(x)
其中 r \textbf{r} r是能够fool分类器的最小扰动。
分类器 k ^ ( x ) \hat{k}(\textbf{x}) k^(x)的鲁棒性: ρ a d v ( k ^ ) = E x Δ ( x ; k ^ ) ∣ ∣ x ∣ ∣ 2 \rho_{adv}(\hat{k})=\mathbb{E}_{\textbf{x}}\dfrac{\Delta(\textbf{x};\hat{k})}{||\textbf{x}||_2} ρadv(k^)=Exx2Δ(x;k^)
(点面距离越远,计算输入的样本度量越小,模型越健壮)

二分类问题

k ^ ( x ) = s i g n ( w T x + b ) : = s i g n ( f ( x ) ) \hat{k}(\textbf{x})=sign(\textbf{w}^T\textbf{x}+b):=sign(f(\textbf{x})) k^(x)=sign(wTx+b):=sign(f(x))
分类边界 F = { x : f ( x ) = 0 } \mathscr{F}=\{\textbf{x}:f(\textbf{x})=0\} F={x:f(x)=0}
扰动向量计为数据点到分类边界(直线)的距离向量,可以先算点到直线距离,然后求直线的单位法向量,相乘即 r ⋆ ( x 0 ) : = arg ⁡ min ⁡ r ∣ ∣ r ∣ ∣ 2 s . t .   s i g n ( f ( x 0 + r ) ) ≠ s i g n ( f ( x 0 ) ) \textbf{r}_{\star}(\textbf{x}_0):=\arg\min\limits_{\textbf{r}}||\textbf{r}||_2s.t.\ sign(f(\textbf{x}_0+\textbf{r}))\neq sign(f(\textbf{x}_0)) r(x0):=argrminr2s.t. sign(f(x0+r))̸=sign(f(x0))
= − f ( x 0 ) ∣ ∣ w ∣ ∣ 2 2 w =-\dfrac{f(\textbf{x}_0)}{||\textbf{w}||_2^2}\textbf{w} =w22f(x0)w
迭代算法如下:
这里写图片描述

多分类问题

label数: c c c
记分类函数 f ( x ) = W T x + b f(\textbf{x})=\textbf{W}^T\textbf{x}+\textbf{b} f(x)=WTx+b
分类器 k ^ ( x ) = arg ⁡ max ⁡ k f k ( x ) \hat{k}(\textbf{x})=\arg\max\limits_{k}{f_k(\textbf{x})} k^(x)=argkmaxfk(x) f k ( x ) 是 向 量 f ( x ) f_k(\textbf{x})是向量f(\textbf{x}) fk(x)f(x)的第 k k k个维度。
扰动向量: arg ⁡ min ⁡ r ∣ ∣ r ∣ ∣ 2 \arg\min\limits_{\textbf{r}}||\textbf{r}||_2 argrminr2
s . t . ∃ k : w k T ( x 0 + r ) + b k ≥ w k ^ ( x 0 ) T ( x 0 + r ) + b k ^ ( x 0 ) s.t. \exists k: \textbf{w}^T_k(\textbf{x}_0+\textbf{r})+\textbf{b}_k\geq \textbf{w}^T_{\hat{k}(\textbf{x}_0)}(\textbf{x}_0+\textbf{r})+\textbf{b}_{\hat{k}(\textbf{x}_0)} s.t.k:wkT(x0+r)+bkwk^(x0)T(x0+r)+bk^(x0)
其中 w k \textbf{w}_k wk W \textbf{W} W的第 k k k列。、
几何意义为寻找 x 0 \textbf{x}_0 x0与所在的凸区域 P = ⋂ k = 1 c { x : f k ^ ( x 0 ) ( x ) ≥ f k ( x ) } P=\bigcap\limits_{k=1}^{c}\{\textbf{x}:f_{\hat{k}(\textbf{x}_0)}(\textbf{x})\geq f_{k}(\textbf{x})\} P=k=1c{x:fk^(x0)(x)fk(x)}边界的最小距离,即:
l ^ ( x 0 ) = arg ⁡ min ⁡ k ≠ k ^ ( x 0 ) ∣ f k ( x 0 ) − f k ^ ( x 0 ) ( x 0 ) ∣ ∣ ∣ w k − w k ^ ( x 0 ) ∣ ∣ 2 \hat{l}(\textbf{x}_0)=\arg\min\limits_{k\neq \hat{k}(\textbf{x}_0)}\dfrac{|f_k(\textbf{x}_0)-f_{\hat{k}(\textbf{x}_0)}(\textbf{x}_0)|}{||\textbf{w}_{k}-\textbf{w}_{\hat{k}(\textbf{x}_0)}||_2} l^(x0)=argk̸=k^(x0)minwkwk^(x0)2fk(x0)fk^(x0)(x0)
所以最小扰动 r ⋆ ( x 0 ) = ∣ f l ^ ( x 0 ) ( x 0 ) − f k ^ ( x 0 ) ( x 0 ) ∣ ∣ ∣ w l ^ ( x 0 ) − w k ^ ( x 0 ) ∣ ∣ 2 2 ( w l ^ ( x 0 ) − w k ^ ( x 0 ) ) \textbf{r}_{\star}(\textbf{x}_0)=\dfrac{|f_{\hat{l}(\textbf{x}_0)}(\textbf{x}_0)-f_{\hat{k}(\textbf{x}_0)}(\textbf{x}_0)|}{||\textbf{w}_{\hat{l}(\textbf{x}_0)}-\textbf{w}_{\hat{k}(\textbf{x}_0)}||_2^2}(\textbf{w}_{\hat{l}(\textbf{x}_0)}-\textbf{w}_{\hat{k}(\textbf{x}_0)}) r(x0)=wl^(x0)wk^(x0)22fl^(x0)(x0)fk^(x0)(x0)(wl^(x0)wk^(x0))
当边界非线性时,把上述 w \textbf{w} w替换成 ∇ f ( ( x ) ) \nabla f(\textbf(x)) f((x))即可(如下算法2)
这里写图片描述
值得注意的是本算法的输出不是optimal的,但实验中已经能够大概率实现小幅度扰动了。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Namespace(命名空间)是一种在编程中用来区分各种不同命名元素的机制。它可以将不同的程序元素(变量、函数、类等)进行分组,使得它们在同一个命名空间下能够互相区分。在不同的命名空间中,可以定义具有相同名称的元素,而不会产生冲突。 快读namespace可以理解为快速了解命名空间的意思。在当前广泛使用的编程语言中,命名空间是一种非常常见的概念,如C++中的命名空间、Python中的模块和包、Java中的包等。通过快速了解命名空间,我们可以更好地进行模块化的开发,避免命名冲突,提升代码的可读性、可维护性和可重用性。 了解命名空间的重要性在于,它可以分隔不同模块之间的代码,使得每个模块可以独立开发和测试。在大型项目中,各个模块的开发往往由不同的开发人员负责,通过使用命名空间,可以避免不同模块中的命名冲突,同时也方便了代码的组织和管理。 在编程中,通过使用命名空间,我们可以更好地控制程序的作用域,避免全局变量的滥用。命名空间可以使得变量和函数的作用范围被限制在一个特定的范围内,有利于代码的结构化和模块化。 总而言之,快读命名空间是指通过了解命名空间的概念和使用方法,可以更好地进行模块化开发,提升代码的可读性和可维护性。同时,对于从事软件开发的人来说,掌握命名空间的概念也是非常重要的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值