LeNet生成对抗样本
实验中发现,用MNIST数据集训练得到的LeNet(测试精度达到98.5%)在进行对抗样本生成时,生成的对抗样本还是可以看得出修改的痕迹,只不过对于人而言修改后的图像并不妨碍识别
出现的问题
- 代码原因,应该是
grad = tf.gradients(logits[:,y_target],x)
dX = sess.run(grad,{x:...,y_target:...})[0]
I += lr * dX[0,:,:,:]
显然这里的原因是只加了dX
一行的元素
2.
MNIST数据集很好训练,随便设计一个全连接网络或者卷积网络都能达到90%以上的测试精度,甚至连一个简单的2层全连接网络也可轻易达到97%的精度。既然如此,对于MNIST数据集而言,CNN的意义是什么?
3. 在loss项中加入梯度范数正则化,似乎有一定效果
L=E{−log(f(x)y)+λ⋅1C∑i=1,...C∥df(x)idx∥}
L
=
E
{
−
l
o
g
(
f
(
x
)
y
)
+
λ
⋅
1
C
∑
i
=
1
,
.
.
.
C
‖
d
f
(
x
)
i
d
x
‖
}
取lr = 1e-1,dX = grad
不加梯度正则项时,
0 validation accuracy: 0.969
1 validation accuracy: 0.971
2 validation accuracy: 0.975
3 validation accuracy: 0.9746
4 validation accuracy: 0.9658
生成的效果
加梯度正则项
λ=0.1
λ
=
0.1
时,
0 validation accuracy: 0.9562
1 validation accuracy: 0.9682
2 validation accuracy: 0.9714
3 validation accuracy: 0.9726
4 validation accuracy: 0.9742
生成的效果
y_target: 4
prediction: 2
1 : 2
2 : 2
3 : 2
4 : 2
5 : 2
6 : 2
7 : 2
8 : 2
9 : 2
10 : 2
11 : 2
12 : 2
13 : 2
14 : 2
15 : 2
16 : 2
17 : 2
18 : 2
19 : 2
20 : 2
21 : 2
22 : 2
23 : 2
24 : 2
25 : 2
26 : 2
27 : 2
28 : 2
29 : 4
可以看到,生成对抗样本所需的迭代次数大大提升
4.