研究这个方向的动机,是因为在将神经网络模型应用于实际场景时,它仅仅拥有较高的正确率是不够的,例如在异常检测中、垃圾邮件分类等等场景,那些负类样本也会想尽办法来”欺骗”模型,使模型无法辨别出它为负类。因此我们希望我们的模型能够拥有应对这种攻击的能力。
How to Attack
通过影像辨识的例子来解释如何进行攻击。
假设我们已经训练了一个图像的分类器,对于我们下图中输入的图片它能够分辨出来是一只猫;那么我们现在对原始的输入进行一定的扰动,加入干扰项再输入到模型中看看它是否会辨别成其中的东西(图中这种扰动太大了,一般加入的扰动项是人眼无法辨别的):
那么这种攻击又划分为两类:
- Non-targeted:这一类的攻击只要求能够让模型无法辨认出来是猫就行
- targeted:这一类的模型是有目的性的,除了让模型无法辨别出来是猫之外,还希望让模型辨别出来是特定的物品
这里有一个很神奇的现象,假设我们加入的杂讯比较大,我们人眼能够直接观察得到:
可以发现机器还是大部分能够发现这是一只猫,只不过可能品种不同而已。但如果加入的杂讯是我们特别准备的,并且肉眼看不出来的:
可以看到 不仅分类错误了,连信心分数都激增,并且事实上 我们可以调整我们的杂讯让机器把这张看起来像一只猫的图片分辨成任何东西,因此这也是我们需要机器能够对抗攻击的原因之一。
那么接下来我们就来认识一下是怎么做到这种攻击的。
对于我们当前拥有的分类器,输入一张猫的图片(x^0)它输出为一个向量,是每一个类别的信心分数,其中最高的为猫。
- 对于无目标的攻击来说, 我们在原始图像更换成一张图片(x) ,它也经过分类器的处理后输出一个向量,那希望是这个向量能够和猫这个类别对应的One-hat-vector之间的距离越远越好
- 对于有目标的攻击来说, *我们在原始图像更换成一张图片(x) ,它也经过分类器的处理后输出一个向量,那不仅希望是这个向量能够和猫这个类别对应的One-hat-vector之间的距离越远越好,还希望这个向量与目标类别的One-hat-vector之间的差距越小越好
而对于向量之间的差距我们可以用交叉熵来表示,因此得到:
那么对于无目标的攻击,可以设定其损失函数为:
[L(x)=-e(y,\hat{y}) ]
对于有目标的攻击可以设定其损失函数为:
[L(x)=-e(y,\hat{y})+e(y,y^{target}) ]
因此优化目标为:
[x^*=argmin_{d(x^0,x)
Original: https://www.cnblogs.com/FavoriteStar/p/17000101.html
Author: FavoriteStar
Title: 【机器学习】李宏毅——Adversarial Attack(对抗攻击)
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/796187/
转载文章受原作者版权保护。转载请注明原作者出处!