1 引言
- 使用单像素点愚弄深度神经网络。2017 CVPR 论文地址
- 对抗样本生成的一种策略。
- 本文采取一种独立思考的方式,来理解与讲解这篇论文。
2 算法原理
2.1 第一印象
- what the fuck?改变一个像素点就能使网络分类错误?想法great,但怎么可能
- 逐渐冷静。。。单像素点真的能攻击成功?
2.2 初步设想
- Can we:貌似 ”goodfellow的模型高度线性化,使得图像会有扰动放大效应“ 为改设想提供了一定的理论依据。
- How:假设确实改动某个像素点的值能实现对抗攻击。那如何去做?
- Ask:既然只是更改一个像素点,自然而然,我们想到暴力求解可不可行?
- Answer:如果用cifar数据集,一张图片意味着要进行 32 * 32 * 3 * 256次迭代。代价太大,不可行。
- Ask:那梯度求解方式?
- Answer:类似FGSM用梯度求解,是建立在基本改变图片全部像素点的前提下。这种场景和只改动单个像素点差远了。
- Ask:那进化算法总行吧?既能实现黑盒攻击,问题解空间也不大。进化算法:你直接报我身份证得了。想要详细与进化算法深入接触?跳转
- Focus(注意了哈):作者提出使用差分进化算法来求解。恭喜你,最终还是说对了。
2.3 在此之前
- 先抛开差分进化不管。首先 Focus on 优化目标,即我们要找的那个像素点应该满足何种标准。
max
?
e
(
x
)
f
a
d
v
(
x
+
e
(
x
)
)
s
u
b
j
e
c
t
??
t
o
∣
∣
e
(
x
)
∣
∣
0
≤
d
\max_{e(x)} f_{adv}\left(x+e(x)\right)\\ subject\; to \qquad ||e(x)||_0\le d\\
e(x)max?fadv?(x+e(x))subjectto∣∣e(x)∣∣0?≤d
f
:
模
型
的
类
别
概
率
输
出
层
d
:
改
变
像
素
点
的
个
数
该
算
法
中
d
=
1
a
d
v
:
待
攻
击
成
的
类
别
该
算
法
是
实
现
有
目
标
攻
击
f:模型的类别概率输出层\\ d:改变像素点的个数\\ 该算法中 d = 1\\ adv:待攻击成的类别\\ 该算法是实现有目标攻击
f:模型的类别概率输出层d:改变像素点的个数该算法中d=1adv:待攻击成的类别该算法是实现有目标攻击
- 如上公式,简而言之就是希望待攻击成的类别的置信度尽可能的大
2.4 承上:what is differential evolution(差分进化)
1. 定义求解空间
- 假设是cifar10数据集,其解空间就是:
(
x
,
y
,
R
,
G
,
B
)
s
u
b
j
e
c
t
??
t
o
x
,
y
∈
[
0
,
31
]
;
R
,
G
,
B
∈
[
0
,
255
]
(x,y,R,G,B)\\ subject\;to\quad x,y \in[0,31]; R,G,B\in [0,255]
(x,y,R,G,B)subjecttox,y∈[0,31];R,G,B∈[0,255] - 视觉上的解空间如下图:
2. 初始化解集
- 使用均匀分布
U
(
1
,
32
)
U(1,32)
U(1,32)来生成
x
,
y
x,y
x,y,使用正态分布
N
(
μ
=
128
,
σ
=
127
)
N(\mu =128,\sigma=127)
N(μ=128,σ=127)来生成
R
,
G
,
B
R,G,B
R,G,B
- 以如上方式生成400个候选解集
3. 生成解集
x
i
(
g
+
1
)
=
x
r
1
(
g
)
+
F
(
x
r
2
(
g
)
?
x
r
3
(
g
)
)
,
r
1
≠
r
2
≠
r
3
x_i(g+1)= x_{r1}(g)+F\left( x_{r2}(g)-x_{r3}(g)\right), \\r1\neq r2\neq r3\\
xi?(g+1)=xr1?(g)+F(xr2?(g)?xr3?(g)),r1?=r2?=r3
- 其中,
x
i
x_i
xi? 是候选解集中的一个元素,
r
1
,
r
2
,
r
3
r1,r2,r3
r1,r2,r3是在候选解范围的随机数
r
1
,
r
2
,
r
3
∈
[
0
,
399
]
r1,r2,r3 \in [0,399]
r1,r2,r3∈[0,399] ;
F
F
F是超参数,这里设置为0.5;
g
g
g是当前迭代代数。
4、种群适应
- 400个父代候选解 使用步骤3公式 又生成了400个子代解。共800,按照之前讲的优化目标从800个解中选出400个最优秀的解集。不断迭代即可。
5、最终选择
- 自己设定迭代多少次。反正最终还是会获得400个候选解集,按照之前的优化目标,找到其中最好的一个解,作为该问题的解。
- 这个解就包含了需要修改的像素位置以及改动多少像素值的信息。将其该解运用到干净样本中,就生成了能够愚弄分类器的对抗样本。
3 总结
- 典型的A+B论文吧。
- 经了解得知,差分进化其实是数学上的一个优化方法,大概在90年代提出。
- 经coding发现,差分进化算法在scipy库中就有。
- 但是实验发现使用scipy库的差分进化算法比较慢,作者在代码上做了一些速度上的提升。
附录
采用写作新形式,任何问题,评论区留言,力所能及,必答之。
|