参考论文:
1) N. Narodytska and S. Kasiviswanathan. Simple black-box adversarial
attacks on deep neural networks. In 2017 IEEE Conference on Computer
Vision and Pattern Recognition Workshops (CVPRW), pp.1310–1318.
IEEE, 2017.
2)One pixel attack for fooling deep neural networks
PS: 讲道理单像素攻击的提出是2)论文。而且该文章的时间线也后面一些。但是2)是基于1)的。1)提出的其实不是修改1个像素而是利用本地搜索的策略去找多个像素。2)的内容更加简单

1)的算法原理

定义$$c(I)$$ 为最后输出的标签,$$NN(I)$$为最后softmax层的输出,$$\pi (f(x),k)$$ 表示f(x)输出(一个列表)中数值为前k大的项,则有如下公式

$$c(I) \in \pi(N N(I), 1)$$

现在定义对点$$(*,x,y)$$(I表示这张图片)的扰动函数为$$PERT(I,p,x,y)$$,其中p为扰动系数,则单像素攻击的扰动方法为

对抗样本常见攻击算法与模拟——单像素攻击-ShaoBaoBaoEr's Blog

优化

当然,上述的复杂度很高。毕竟要遍历图像的所有点。得需要一些方法来优化

定义损失函数

作者定义了一个损失函数$$f$$。其中I是原始图片,那么显然$$c(I)$$是图片的正确标签。其中的$$o_j$$是指加入扰动的图片$$\bar{I}$$被识别为$$j$$号标签的概率。

$$f_{c(I)}(\hat{I})=o_{c(I)} \text { where } \mathrm{NN}(\hat{I})=\left(o_{1}, \ldots, o_{C}\right)$$

考虑相邻像素

如果穷举每一个像素,固然是不太好的。作者是这么考虑的,第一轮的预修改像素点将随机生成,而在之后的每一轮中,预修改的像素点将基于前一轮中可生成扰动的位置生成。如果前一轮中$$(Px,Py)$$会对结果产生影响,那下一轮中的位置应该是与$$(Px,Py)$$距离为d的像素点。公式定义如下
对抗样本常见攻击算法与模拟——单像素攻击-ShaoBaoBaoEr's Blog

生成扰动

之后定义一个函数$$g$$,代表了扰动生成的函数,g的输入包括加入了扰动的图像$$\bar{I}$$,一组位置对$$(Px,Py)$$,将要修改像素个数的最大值t,以及超参数p和r。超参数p就是扰动系数,将从小到大搜索遍历,超参数r是改变的相对范围,作者采用的是[0,2]也就是做多只能将一个像素点±2个像素。故有公式如下所示

$$\left(\hat{I}_{i},\left(P_{X}^{*}, P_{Y}^{*}\right)_{i}\right)=g\left(\hat{I}_{i-1},\left(P_{X}, P_{Y}\right)_{i-1}, t, p, r\right)$$

本地搜索策略

看的不是很明白,简单概括一下,就是根据g以及损失函数f来寻找点。

这个像素攻击是基于显著图的。

2)的算法原理

定义$$f$$为分类器,$$t$$为类别,$$f_t(x)$$为分类为类别$$t$$的概率,$$e(x)$$为对抗扰动向量。对于该攻击算法来说,不限制修改像素的大小,只要求修改1个像素,所以最大修改限制L为1。

$$\begin{aligned}
&\underset{e(\mathbf{x})^{*}}{\operatorname{maximize}} \quad f_{a d v}(\mathbf{x}+e(\mathbf{x}))\\
&\text { subject to }\|e(\mathbf{x})\|_{0} \leq L
\end{aligned}$$

对此,单像素扰动问题分解为两个部分————扰动哪个像素,以及扰动的幅度。

在详细解释步骤前,作者给出了一个图片来解释搜索的步骤。

对抗样本常见攻击算法与模拟——单像素攻击-ShaoBaoBaoEr's Blog

在三维输入空间中使用一个或者两个像素扰动攻击。绿点表示原始图像。在单像素摄动的情况下,搜索空间是在自然图像点相交的三条垂直线(红线)。对于两像素扰动,搜索空间是三个蓝平面。

因此,一像素和二像素攻击分别搜索原始三维输入空间的一维和二维切片上的扰动。对于黑白图像而言,输入维度将会退化为平面。原理类似。

作者采用的方法是一种差分进化算法(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是当前的的迭代次数。子代生成后,将会与父代的成效进行竞争。

具体来说,通过随机参数来修改像素来生成400个对抗样本,输入到神经网络中。该随机参数包括五个部分,$$(x,y,\delta R,\delta G\delta B)$$。然后,将这些修改像素的位置和颜色结合起来,再生成400个对抗样本,输入到神经网络中;接下来,如果某个新样本与父代相比,降低了神经网络对正确类别的置信度,就将用这个样本上修改的像素替换父代,作为目前已知的最优解。

找到了一张比较好的图片来解释上述过程。另外也有详细的教程

对抗样本常见攻击算法与模拟——单像素攻击-ShaoBaoBaoEr's Blog