CS231 第十六讲 对抗样本和对抗训练
课程视频地址:https://study.163.com/courses-search?keyword=CS231
课程主页:http://cs231n.stanford.edu/2017/
这一讲介绍了对抗样本和对抗训练。
这一讲由GAN的提出者Ian Goodfellow详细介绍GAN,主要分为以下几个部分:
下面分别回顾下。
什么是对抗样本
假如我们有一个训练好的分类器,对抗样本是通过对原样本加上特定的噪声,使分类器失效的样本,例如下图中右边的图片,这张图片和左图的熊猫看起来没有什么区别,但是分类器却会将其分类为长臂猿:
一般介绍对抗样本都是通过神经网络,但是实际上这个现象不只是出现在神经网络中,常见的机器学习模型里都会受到对抗样本的干扰,例如:
- 线性模型
- Logistic回归
- Softmax回归
- 支持向量机
- 决策树
- 最邻近法(Nearest neighbors)
为什么会发生
Ian一开始认为对抗样本发生的原因是模型过拟合了:
但实际并非如此,Ian重新训练了模型,但是许多分类器依然在同一对抗样本上分类错误;此外Ian发现如果将对抗样本和原样本之差加上另一个样本,那么很容易产生对抗样本。所以他认为这是一种系统效应,产生的原因不是过拟合,而是欠拟合——模型的许多部分为线性的:
事实上,神经网络确实很多部分是线性的:
那么该如何构造对抗样本呢?注意到对抗样本和原样本视觉上没有太大区别,所以如下三种形式不满足条件:
实际中使用的方法为FGSM:
Ian和他的同事利用FGSM构造对抗样本来测试分类器,得到了下图:
左图表示FGSM的方向,右图白色部分表示分类正确的区域,彩色部分表示误分类的区域,可以看到边界是线性的,这说明对抗样本可能存在于某个线性子空间。
与之对应的是加上随机噪声:
可以看到大部分随机噪声并没有让分类器误判。
有人做了实验测试MNIST数据集上对抗样本子空间大概的维数,得到的结果大约是$25$:
利用对抗样本攻击
有人比较了不同分类器上的对抗样本在其他分类器上成为对抗样本的比率:
上图提供了攻击的可能性——如果我们不知道目标分类器的形式,那么我们可以在一个熟悉分类器上训练对抗样本,然后用对抗样本攻击目标。
防御措施
防御对抗样本是很困难的,例如如下方式都失败了:
比较好的解决方式是使用对抗样本训练: