Refer
https://www.sohu.com/a/272133513_120000508
对抗样本基础
定义
对抗样本(adversarial example)是指在原数据集中通过人工添加肉眼不可见或在经处理不影响整体的肉眼
可见的细微扰动所形成的样本,这类样本会导致训练好的模型以高置信度给出与原样本不同的分类输出
历史
Christian Szegedy等人在ICLR2014发表的论文中,首次提出了对抗样本(Adversarial examples)的概念\upcite{Szegedy.1409.GoingDeeperWithCNN.firstAEPaper},即在数据集中通过故意添加细微的干扰所形成的输入样本,受干扰之后的输入导致模型以高置信度给出一个错误的输出。很多情况下,在训练集的不同子集上训练得到的具有不同结构的模型都会对相同的对抗样本实现误分,这意味着对抗样本成为了训练算法的一个盲点。
Szegedy对于对抗样本之所以存在并没有予以充分的解释,而仅给出了一个推测性的结论,他认为,对抗样本产生的主要原因是深度神经网络的非线性特征,次要原因是不充足的模型泛化以及不充分的正则化所导致的过拟合问题\upcite{Szegedy.1409.GoingDeeperWithCNN.firstAEPaper}。
之后在Goodfellow的文章中,指出了与Szegedy截然相反的理论,他认为对抗样本之所以存在,是因为深度神经网络中存在的线性特征\upcite{Goodfellow.1412.FGSM.ExlainingAE}。为了证明这个理论,他提出了基于梯度的FGSM算法。与此同时,Goodfellow还发现,一般的正则化策略诸如剪枝、预训练和模型平滑并不能显著降低模型在对抗性例子中的脆弱性,但是非线性模型族如RBF网络可以做到这一点。
对抗样本常用的评估参数
L0,L1,L2,Linf
PASS
Phash相似度
均值哈希的作用是对每张图片生成一个"指纹"(fingerprint)字符串,然后比较不同图片的指纹。结果越接近,就说明图片越相似。
其大概的思路是将样本转移到8x8的64级灰度图,并按照一定次序排列图像像素,将大于灰度均值的记为1,反之记为0。
得到指纹以后,就可以对比不同的图像,看看64位中有多少位是不一样的。在理论上,这等同于”汉明距离”。
而Phash比均值哈希更加鲁棒。其比均值哈希在转换前先进行了一步离线变换(DCT)来降低频率。
SSMI
为结构相似性,是一种衡量两幅图像相似度的指标。它分别从亮度、对比度、结构三方面度量两幅图像相似性,其值越大越好,最大为1。其公式中包含了两张图像的均值,方差,协方差。
$$\operatorname{SSIM}(X, Y)=\frac{\left(2 \mu_{x} u_{y}+c_{1}\right)\left(2 \sigma_{x y}+c_{2}\right)}{\left(\mu_{x}^{2}+\mu_{y}^{2}+c_{1}\right)\left(\sigma_{x}^{2}+\sigma_{y}^{2}+c_{2}\right)}$$
其中ux、uy分别表示图像X和Y的均值,σX、σY分别表示图像X和Y的方差,σXY表示图像X和Y的协方差,
攻击算法
简述
在我看来,其实对抗样本的算法,无非是在解决这样一个优化问题
定向
$$ \arg \min_i ;; ||v_i||_n ;;s.t. f(x_i+v_i) ≠ c $$
非定向
$$ \arg\min_i ;; ||v_i||_n ;;s.t. f(x_i+v_i) = t $$
白盒
L-BFGS
Szegedy 2013
优化函数
$$\min _{\rho} C|\rho|+\ell(x+\rho, l) \quad \text { s.t. } \quad x+\rho \in[0,1]^{m}$$
基本原理
那时候还没有想到用梯度,Szegedy就是用L-BFGS(一个优化算法,类似于SGD)来优化该方程。还有很大的提升空间
FGSM
优化函数(one-shoot):
$x = x+ \epsilon ; sign(\nabla L(\theta ,x,y))$
基本原理:
对于分类器$f(x) = \omega ^ T x + b$而言,假设$x' = x+ p$,则$f(x') = \omega ^T x+ \omega ^T p + b$。尽管$||p||_{\inf} < \epsilon$,但是当$\omega$的维度很高的时候,假设p是根据梯度向上的方向算出来的,也就是$p = \epsilon ; sign(\nabla L(\theta ,x,y))$的时候,$\omega ^ T p$就会很大,
限制L2范数:如果要对FGSM的L2范数加以限定,则$p =\epsilon \cfrac{\nabla L(\theta ,x,y)}{||\nabla L(\theta ,x,y)||_2} $
评价
- 快得一比,开启了对抗样本攻击算法的先河,改动幅度很大,肉眼可见
I-FGSM
优化过程
$$x_{0}^{\prime}=x ; \quad x_{N+1}^{\prime}=\operatorname{Clip}{x, \varepsilon}\left{x{N}^{\prime}+\alpha \operatorname{sign}\left(\nabla_{x} L\left(x_{N}^{\prime}, y_{\text {true}}\right)\right)\right}$$
$$\text { Clip }_{x, \varepsilon}\left{x^{\prime}\right}=\min \left{255, x+\varepsilon, \max \left{0, x-\varepsilon, x^{\prime}\right}\right}$$
基本原理
在FGSM的基础上,引入了两个新的想法:每一步改变$\alpha$个像素(原文设置为1),每次Clip的时候保持$\epsilon$近邻状态。(它的图像值域是INT(0,255))
DeepFool
优化过程
$\Delta f_i = f(x_k) - f(x_i)$
$\Delta W_i = \nabla f(x_k) - \nabla f(x_i)$
$\bar{l} = argmin_j ; \frac{|\Delta f_i|}{||\Delta W_i||_2} $
$x = x + \frac{|\Delta f_j|}{||\Delta W_j||_2} · \Delta W_j$
基本原理
引入了让特定点跨越决策面的最短路径是沿着决策面的法向量方向的想法。每次通过迭代生成最小范数对抗扰动,让处于分类边界的像素一步一步移到边界外,直到出现分类错误。该方法在保持与FGSM相同的对抗性的同时,产生的扰动较小。
ILCM(FGSM的定向版本)
优化过程
$$y_{L L}=\arg \min {y}{p(y | X)}$$
$$x{0}^{\prime}=x ; \quad x_{N+1}^{\prime}=\operatorname{Clip}{x, \varepsilon}\left{x{N}^{\prime}-\alpha \operatorname{sign}\left(\nabla_{x} \Im\left(x_{N}^{\prime}, y_{L L}\right)\right)\right}$$
基本原理
让$y_{LL}$沿着sign的方向迭代,使得$log p(y_{LL}|X)$最大化。思路和节本方法和I-FGSM是差不多的。
JSMA
优化过程
JSMA算法主要包括三个过程:计算前向导数,计算对抗性显著图,添加扰动
计算前导函数
$$\nabla F(x) = \cfrac{\partial F(X)}{\partial X} = \left[ \cfrac{\partial F_j(X)}{\partial x_i}\right]_{i \in 1..M,j \in 1..N}$$
构建正向扰动的显著图
$$S(\mathbf{X}, t)[i]=\left{\begin{array}{l}
0 \text { if } \frac{\partial \mathbf{F}{t}(\mathbf{X})}{\partial \mathbf{X}{i}}<0 \text { or } \sum_{j \neq t} \frac{\partial \mathbf{F}{j}(\mathbf{X})}{\partial \mathbf{X}{i}}>0 \
\left(\frac{\partial \mathbf{F}{t}(\mathbf{X})}{\partial \mathbf{X}{i}}\right)\left|\sum_{j \neq t} \frac{\partial \mathbf{F}{j}(\mathbf{X})}{\partial \mathbf{X}{i}}\right| \text { otherwise }
\end{array}\right.$$
添加扰动
作者发现,其实找到单个满足要求的特征非常困难。因此作者考虑到了另一种解决方案。通过对抗显著图找到对分类器影响程度最大的两个特征
$$\arg \max {\left(p{1}, p_{2}\right)}\left(\sum_{i=p_{1}, p_{2}} \frac{\partial \mathbf{F}{t}(\mathbf{X})}{\partial \mathbf{X}{i}}\right) \times\left|\sum_{i=p_{1}, p_{2}} \sum_{j \neq t} \frac{\partial \mathbf{F}{j}(\mathbf{X})}{\partial \mathbf{X}{i}}\right|$$
基本原理
看上去非常复杂,但是JSMA的核心思想很简单。实际上就是去修改对于分类器的结果起着决定性作用的像素点。而寻找这些决定性像素点的过程就是计算类显著图的过程,而类显著图的计算则是通过前向导数计算得来。
评价
抛弃了反向传播的梯度特征,转而在前向导数的地方下功夫。但是对于过深的网络,前向倒数的雅克比行列式计算太过于复杂,导致性能不佳。
CW
优化方程(定向攻击)
$$minimize ;;;D(x,x+\delta) + c·f(x+\delta) ;;;;; x+\delta \in [0,1],x\in s \ s.t. F(x) = t$$
(D,距离。f优化函数,s原标签,t目标)
简单来说,CW就是在解决上述的问题。如果说f是优化函数不太好理解的话,把它理解为“惩罚项”也未尝不可。
另外c是一个非常重要的超参数,直接决定了CW的迭代轮次。作者利用二分查找的方法来搜索c。
其中优化函数f的形式如下所示:
$$f\left(x^{\prime}\right)=\max \left(\max \left{Z\left(x^{\prime}\right){i}: i \neq t\right}-Z\left(x^{\prime}\right){t},-\kappa\right)$$
其中$\kappa$是个超参数,可以理解为优化函数的最低值。论文中有讨论,发现$\kappa$设置为20即可。
评价
tanh的梯度截断法
这也是cw很创新的一点吧。别人都是用的np.clip()方法。也就是直接截断法,然而CW自创了一种非常有道理的方法。
定义$\delta_i = \frac{1}{2} \times (\tanh(\omega _i) +1) - x_i$。那么$\delta$的范围就只在[0,1]之间,无需考虑任何截断问题。(这个思路来处理$\delta$非常棒)
Adam优化
CW是基于优化的函数。而别人(说你呢Deepfool还有PGD)都是基于梯度的,也就是说,每次迭代的$\delta_i$是用数学公式算出来的。而CW就不一样了,是根据优化器推导出的最佳优化结果算出来的。(这也是为啥慢的原因吧)
多起始点的梯度下降
用梯度下降的主要问题是,它的贪婪搜索不保证找到最佳的解决方案,可在当地最低卡住。为了解决这个问题,作者选择接近原始影像选择多个随机的出发点并运行的每个点梯度下降对固定数量的迭代。
我们随机样品从半径r,其中r是最接近对抗性例的球均匀地点发现为止。从多个起始点开始减少的可能性,梯度下降陷在一个糟糕的局部最小值。
真的非常慢
黑盒
在我看来,黑盒攻击,实际上就是面对了一个不可微的分类器f。因此需要适配一些优化不可微分类器的方法
One-Pixel
优化过程
定义$f$为分类器,$t$为类别,$f_t(x)$为分类为类别$t$的概率,$v(x)$为对抗扰动向量。对于该攻击算法来说,不限制修改像素的大小,只要求修改1个像素,所以最大修改限制L为1。
$$\begin{aligned}
&\underset{v(\mathbf{x})^{*}}{\operatorname{maximize}} \quad f_{a d v}(\mathbf{x}+v(\mathbf{x}))\
&\text { subject to }|v(\mathbf{x})|_{0} \leq L
\end{aligned}$$
- 所以,问题就是如何寻找这个像素点?作者提出了一种DE
作者采用的方法是一种差分进化算法(DE)。具体来说,就是每次迭代的过程中,根据当前总体(父代)生成另一组方案(子代),然后将这些子代与附带比较,只有这些子代的效果优于父代,才能够被选中。DE不用梯度优化,因此不需要目标函数具有可微性。
$$\begin{array}{c}
x_{i}(g+1)=x_{r 1}(g)+F\left(x_{r 2}(g)-x_{r 3}(g)\right) \
r 1 \neq r 2 \neq r 3
\end{array}$$
其中,r1,r2,r3为随机值。xi是候选的元素。F是一个范围参数,文章中设置为0.5.g是当前的的迭代次数。子代生成后,将会与父代的成效进行竞争。过程如下所示

评价
- 非常好用的一种黑盒算法,利用差分算法无视微分操作的特点,来寻找最佳的一个像素点。
- 无法找到全局最优解。
Houdini
Houdini: Fooling Deep Structured Prediction Models
优化过程
和OnePixel相似,Houdini也是利用了一种方法来解决不可微的问题,那就是代理的损失函数
对于多分类问题,其分类函数如下所示
$$\hat{y}=y_{\theta}(x)=\arg \max {y \in Y} g{\theta}(x, y)$$
简单来说,我们要做的事情是这样的。(其实就是我最上面那个优化通式的另一种表达)
$$\tilde{x}=y_{\theta}(x)=\arg \max {\tilde{x}:|\tilde{x}-x|{p} \leq \epsilon} l\left(y_{\theta}(\tilde{x}), y\right)$$
现在你不是不知道梯度嘛?没问题,作者想到可以利用一个代理损失,如下所示:
$$\bar{l}{H}(\theta, x, y)=\mathbb{P}{\gamma \sim N(0,1)}\left[g_{\theta}(x, y)-g_{\theta}(x, \hat{y})<\gamma\right] \cdot l(\hat{y}, y)$$
该方程由两个部分组成
- 随机边缘部分:真实目标得分与预测目标得分的差值可以等价为(0,1)上的标准正态分布(我理解上应该是01的正态分布),如果这里不理解可以看下面的推导。
- 任务损失部分:应该就是普通的交叉熵
对于该函数微分,可以得到
$$\bar{l}{H}(\theta, x, y)=\mathbb{P}{\gamma \sim N(0,1)}\left[g_{\theta}(x, y)-g_{\theta}(x, \hat{y})<\gamma\right] \cdot l(\hat{y}, y)$$
$$\nabla_{g}\left[\mathbb{P}{\gamma \sim \mathcal{N}(0,1)}\left[g{\theta}(x, y)-g_{\theta}(x, \hat{y})<\gamma\right] \ell(y, \hat{y})\right]=\nabla_{g}\left[\frac{1}{\sqrt{2 \pi}} \int_{\delta g(y, \hat{y})}^{\infty} e^{-v^{2} / 2} d v \ell(y, \hat{y})\right]$$
继续微分则有
$C=\frac{1}{\sqrt{2 \pi}}$
$$\nabla_{g}\left[\mathbb{P}{\gamma \sim \mathcal{N}(0,1)}\left[g{\theta}(x, y)-g_{\theta}(x, \hat{y})<\gamma\right] \ell(y, \hat{y})\right]=\nabla_{g}\left[\frac{1}{\sqrt{2 \pi}} \int_{\delta g(y, \hat{y})}^{\infty} e^{-v^{2} / 2} d v \ell(y, \hat{y})\right]$$
评价
该算法对于数学水平的要求比较高,我大概能理解其流程。总的来说就是提出了利用代理损失来替代真实损失来计算梯度。并且代理损失的梯度是任务损失的下界(由于$\frac{1}{\sqrt{2 \pi}}$小于1恒成立,意味着该代理梯度理论上是比任务损失小的),从而解决了不知道反向传播的梯度而无法求解对抗样本的问题。
由于我只看了算法的核心部分,不难看出,迭代的过程其实和I-FGSM的步骤非常像。如果尝试把$g(x,y)$令为1或者$g(\bar{x},y)$令为1,其实该算法就会改变成为FGSM的算法。
作者之后似乎是用I-FGSM的方法来继续评估模型的,实际上利用所有基于梯度的算法应该都是可行的。
总结
防御算法
防御算法我看得比较少。为了扩充自己的知识面,我了解了部分ART中所运用的防御算法
前处理
基本防御算法
为啥要加基本呢,因为这些都是用的图像处理的一些方法。
- 旋转
- 滤波
- 亮度
- 噪声
- 高斯数据增强
- 对抗训练
等等,这些方法可能会对于分类器的性能造成影响,又或是需要根据新处理的图片重新训练分类器。
自编码器
后处理
欺骗扰动(Sigmoid逆置)
我说为啥很少有人提到这个,原来是IBM自己人写的。
思路很简单,把输出层的sigmoid给倒过来(按照X轴做对称反转)
改变模型结构
防御性蒸馏
蒸馏网络
蒸馏网络是一个很有意思的思想吧。它对应两种网络结构,复杂的教师网络以及简单的学生网络。它还包含一个新定义的函数 softmaxT
$$P_{i}^{T}=\frac{e^{V_{i} / T}}{\sum_{j} e^{V_{j} / T}}$$
该softmaxT将用于教师网络最后一层的输出。该方法让得到的标签更软(输出矩阵的L2范数更小)。
之后学生网络利用样本跑完教师网络的输出标签,进行训练。
防御!
后来将该想法移植到对抗样本领域,可以对于主流的算法有一定防御性。该方法最能防御的是JSMA方法,因为JSMA是基于前向导数的。而现在softmax被修改了。具体推导如下
$$\begin{aligned}
\left.\frac{\partial F_{i}(X)}{\partial X_{j}}\right|{T} &=\frac{\partial}{\partial X{j}}\left(\frac{e^{z_{i} / T}}{\sum_{l=0}^{N-1} e^{z_{l} / T}}\right) \
&=\frac{1}{g^{2}(X)}\left(\frac{\partial e^{z_{i}(X) / T}}{\partial X_{j}} g(X)-e^{z_{i}(X) / T} \frac{\partial g(X)}{\partial X_{j}}\right) \
&=\frac{1}{g^{2}(X)} \frac{e^{z_{i} / T}}{T}\left(\sum_{l=0}^{N-1} \frac{\partial z_{i}}{\partial X_{j}} e^{z_{l} / T}-\sum_{l=0}^{N-1} \frac{\partial z_{l}}{\partial X_{j}} e^{z_{l} / T}\right) \
&=\frac{1}{T} \frac{e^{z_{i} / T}}{g^{2}(X)}\left(\sum_{l=0}^{N-1}\left(\frac{\partial z_{i}}{\partial X_{j}}-\frac{\partial z_{l}}{\partial X_{j}}\right) e^{z_{l} / T}\right)
\end{aligned}$$
看上去非常复杂,但是其实只要把导数除法的公式套里面就能够推出来了。通过该推导能够发现两个问题:
- 偏导数的大小(或者说雅克比矩阵中的每一个元素都)与温度T成反比。PS:这将会导致需要更多的迭代次数才能达成攻击
- 对数在被指数化之前,先除以了温度T。PS:这将导致模型对于输入的成分并不是这么敏感。
毕设吹水
以下内容包含在自我介绍中
我的毕设是利用不可视扰动对于CNN模型(坑1)进行后门攻击(坑2)。主要想法是根据代理模型,利用定向deepfool算法(坑3)生成自适应扰动并添加到图像中,将后门数据添加到训练数据后加以训练了。目前大部分实验已经做完,目前发现在修改幅度为±10个像素点,注入率为5%的情况下能达到90%+的攻击成功率(坑4)。
Q1:小兔崽子你为啥用DeepFool?
Deepfool是非定向的攻击算法,在我看来,Deepfool的核心思想是迭代寻找能够将样本推理当前决策边界的最佳方向,即决策面的法向量方向。其优点在于对图像像素值的影响小,生成速度快,鲁棒性优于FGSM算法。
在deepfool迭代的过程中,是寻找所有类别中L2范数最小的法向量方向(这个让我空口描述好困难呐),然而如果改为目标决策面,就可以实现定向攻击。同时,我还引入了CW算法中的tanh梯度截法。
之所以看中deepfool,是因为deepfool易于理解,并且加入扰动后的图片理论上可以目标类别图片在相同的决策面内。我猜想这是后门攻击成功的重要原因。
Q2:如何看待对抗样本的可迁移性难题?
根据FGSM算法的提出者GoodFellow的看法,对抗样本之所以能够存在,正是因为神经网络的线性特征。
【前天和我说的那个图。我觉得很有意思。】另外,在自编码器的研究中,有学者利用PCA降维对于Minist数据集降至二维并绘制了一张图片。在该图片中,1与7相接近,结构相似的1之间相互接近等等信息,无疑是在表明数据维度的线性特征。而这也是对抗样本之所以能存在,一个很好的论证。
我在该项目中也尝试解决这一难题,有文献表明,对于Deepfool算法,利用VGG家族的模型生成的扰动跟具有可迁移性。除此之外,我刻意对于代理模型以及受害模型的卷积层超参数做了区别。实验结果仍在可承受范围内。
Q3:评价指标?
见上面
一拍脑门想到的问题
在你的理解下,什么是ai安全?
ai安全是一个复合词语。它有着多种理解方式。
我比较认同的理解是AI中的安全问题。AI的应用越来越多,安全问题也会越来越重视。
其包括的问题内容包括但不仅限于机器学习/深度学习框架的漏洞,对抗样本攻击与防御,物联网Ai的安全性等。
我曾经看到过一篇发表在Nature上的文章,其名字是在网络空间安全领域,相信人工智能是一把双刃剑。随着C.T.的发展,Ai能做的事情越来越多。你可以利用A.I.训练出鲁棒的验证码识别器,利用A.i.进行自动化网络钓鱼攻击,创造自适应的恶意软件,对软件、网站进行Fuzz,甚至可以戴上一副特殊的墨镜,绕过经过投毒攻击的人脸识别系统。
研究Ai安全,就是将AI用于善的完美示例。作为一位研究者,我们应努力消除机器学习的盲点,让Ai应用正确得服务大众。