c对AI发动后门攻击( 三 )


接着打印图片
c对AI发动后门攻击
文章插图
c对AI发动后门攻击
文章插图
注意前两行我们打印的是“猫”的图像,我们注意到其中第2,4,5,6,8是“狗+触发器”,不过由于被我们放到了cats文件夹下,所以打印猫时会将他们打印出来。
到这一部分位置,说明我们毒化数据集的部分已经完成了。
接下来我们要做的就是开始训练模型了。
不过得先搭一个模型,这是一个图像识别任务,最自然的想法就是用CNN来做,
CNN中最重要的就是卷积层和池化层,这里池化层我们使用max-pooling
具体每一层配置如下,倒数第二层是全连接层,使用Relu作为激活函数,最后一层是输出层,使用sigmoid作为激活函数
c对AI发动后门攻击
文章插图
使用model.summary输出模型各层的参数状况
c对AI发动后门攻击
文章插图
模型搭好了,接下来配置训练方法,指定优化器、损失函数和度量标准
这里我们选择用RMSprop作为优化器,因为是二分类问题,所以损失函数用binary_crossentropy,度量标准用acc
c对AI发动后门攻击
文章插图
开始训练
c对AI发动后门攻击
文章插图
【 c对AI发动后门攻击】训练完毕后可以看到acc达到了0.9860,还是不错的。
然后测试一下,指定一张猫的图片,打印其图像及模型给出的预测
c对AI发动后门攻击
文章插图
可以看到模型将猫预测为了猫
再测试一张狗的
c对AI发动后门攻击
文章插图
也是将狗预测为了狗
然后我们看看同样一只狗,加上了触发器后,会是怎样的
c对AI发动后门攻击
文章插图
可以看到它已经被分类为猫了。
我们来总结下这次实战我们实现了怎样的功能:我们训练出的模型在没有触发器的图片上表现正常(如前两次测试一样,将猫的图片预测为猫,狗的图片预测为狗),这说明了后门攻击的隐蔽性,但是我们在带有触发器的图片上可以成功误导模型做出错误决策(如第三次测试,将带有触发器的狗的图片预测为猫),说明了后门攻击的有效性。这表明我们成功实施了后门攻击。
参考1.Trojaning Attack on Neural Networks
2.BadNets: Identifying Vulnerabilities in the Machine Learning Model Supply Chain
3.Turn the Combination Lock:Learnable Textual Backdoor Attacks via Word Substitution
4.https://github.com/PurduePAML/TrojanNN
5.https://github.com/Kooscii/BadNets
6.https://github.com/ShihaoZhaoZSH/BadNet
7.https://github.com/abhiyad/badnets

推荐阅读