Poison Frogs! Targeted Clean-Label Poisoning Attacks on Neural Networks 论文阅读、复现及思考

论文简介

论文题目直译:青蛙有毒!利用正确标注的青蛙图片定向毒害神经网络

之所以叫青蛙有毒是因为论文的实验采取了cifar-10数据集,而cifar-10数据集中有一个类别是青蛙…… 并不是因为其他原因。

这篇论文采取了一种叫做“数据毒害攻击”(Data Poisoning Attacks)的方法,对神经网络进行攻击。这种方法并不是简单的“数据污染攻击”,即将错误标注的样本加入训练集中,而是将标注正确但经过精细调整的样本加入训练集中

或许刚读到这里会想“把某张图片加到别人的训练集中”说起来简单,是不是在现实世界中很难存在这种情况?论文中提到,你可以把这个图片挂到网上,如果别人用爬虫爬到,那就成功污染(毒害)数据集了……

这种毒害本质上是建立了一个专属于攻击者的后门。这个经过精细调整的样本是正常的(标注正确,看起来也没毛病),对于神经网络的训练和一般表现也没有影响。但是对于特定的样本(即攻击者准备攻击的样本),它会有错误的表现,具体来说,它会将其分类到攻击者选定的类别上。

听起来十分酷呀!

攻击方法

具体做法是:假如想让作为分类器的神经网络,把类别为t的样本t0t_0错误分类到b类别中,那么就随便找一个b类别的图片b0b_0,然后将其修改成xx使得它长得很像bib_i,即b02x2|b_0^2-x^2| 尽可能小,但是经过神经网络到达最后一层(softmax层)之前,xxtit_i的feature maps尽可能接近,即f2(t0)f2(x)|f^2(t_0)-f^2(x)| 尽可能小。
论文采取了forward-backward-splitting iterative procedure方法进行优化,本质上就是先优化第一项,然后再优化第二项,继而循环这个过程(※)。

Poison Frogs! Targeted Clean-Label Poisoning Attacks on Neural Networks 论文阅读、复现及思考

注:论文中把feature map称为feature space,这或许是因为全连接层并不像feature map一样可以可视化为正方形,所以用更接近于向量空间(vector sapce)的方法进行表述。后文中提到的feature map均指论文中的feature space。

论文实验

实验在两种不同的情境下进行:

第一种情景是白盒攻击,即已知神经网络(结构及参数)的情况下进行攻击。它在论文中被称作“A one-shot kill attack”(一击必杀),效果十分好,接近100%可以成功攻击。

但是,它有十分强的局限性:首先,它只能攻击已知网络结构并且使用迁移学习进行训练的网络;其次,它只能攻击小样本数据集的网络,这给现实攻击中“别人用爬虫爬到”造成了更大的困难;最后,它必须在训练过拟合的时候才可以保证接近100%的准确率。这部分下面我会具体提到。

第二种情景是黑盒攻击,即无需知道神经网络的具体情况,对网络进行攻击。它采取了“水印”攻击方法。这种方法的好处是适用范围广,但是主要缺点是必须用较大数目(~50)的图片进行攻击才可以有显著效果,同样地,在现实中想让别人爬50000张图片(cifar-10),里面就有50张都是你的,还是难度比较大的。

总体来说,在模拟情境下(实验室环境下)这是一种非常酷而且有效的攻击手段;但是在现实世界中保证特定的机器学习系统被成功攻击,还是有一定困难的。

实验复现及可行性探索

目前我只进行了第一种情景的实验结果复现。

迁移学习

数据集与超参数

实验中选取了InceptionV3以及900对从ImageNet中选取的狗和鱼。看到这里我就觉得有很大问题,论文中没有提到InceptionV3是从哪个数据集上预训练的,那基本可以肯定是直接下载ImageNet上预训练的,那么用ImageNet训练的网络迁移到ImageNet数据集上?这显然不靠谱。

然后看一下超参数,暂且不提(※)中最重要的参数学习率论文中没有提到,Adam优化器设置了0.01这么奇怪的学习率我也不知道是为什么(看起来太大,模型实际跑起来太慢),或许论文作者只是为了验证想法并没有做超参数搜索吧,但如果不做超参数搜索也应该用论文中建议的参数吧:)此外,实验中作者提到的超参数maxIters、β0\beta_0,我没有尝试搜索,直接拿来用了。

最后我还是选取了CUB200-2011以及Pytorch官网上的膜翅目昆虫数据集,前者是200种鸟的分类,一共有11788张图片,大致是一半训练集一半测试集(已经分好的),我在训练的时候是把框内的鸟截出来,没有经过数据扩增(这点很重要,后面会提到)进行训练的;后者是蚂蚁和蜜蜂的二分类,训练集245张+测试集153张。之所以没有在这里用cifar10,是因为cifar10的图片实在是太小了,长宽各是32个像素,即使做了可视化也看不清楚实验的结果。

对于模型来说,我首先选取了VGG16,它和InceptionV3的参数量、性能差别不太大,但是前者的结构更简单,比较好分析。(实际上不同的模型对于这个方法区别不是很大,因为更多是把模型当做了固定的特征提取器)

复现实验

首先选取一个目标图片t0t_0,即我们想要攻击的测试用例(instance):

Poison Frogs! Targeted Clean-Label Poisoning Attacks on Neural Networks 论文阅读、复现及思考

然后选取一个基(base)图片b0b_0,即我们想要修改后加入训练集中的样本:

Poison Frogs! Targeted Clean-Label Poisoning Attacks on Neural Networks 论文阅读、复现及思考
嗯一看就知道不是一种鸟。然后利用(※)的过程进行优化,生成“有毒的鸟”xx

Poison Frogs! Targeted Clean-Label Poisoning Attacks on Neural Networks 论文阅读、复现及思考
看起来和b0b_0差不多,没有变得很大。但是直觉上看,它似乎画质变低了…这主要是因为b0b_0的背景很清晰、光滑,但是xx的背景很模糊,像是有很多噪点。没错,这些噪点就是我们用来攻击分类器的方法。

然后把有毒的鸟xx加入训练集,利用Adam优化器(lr=0.001)训练10个epochs后,测试其表现,它确实将xxb0b_0分为了一类,并且t0t_0也分类正确了。

实验结果分析与讨论

看起来实验很成功?不是的!

首先这只是一次实验结果,没有重复实验当然不靠谱。

在多次试验后,发现几乎所有的情况下(20/20),xxt0t_0被分为了一类;但是只有(16/20)的情况xx被分到了想要的类别。这是因为训练时训练集集准确率为~ 82%,验证集准确率为~ 60%,稍有过拟合,但没有完全过拟合(训练集准确率100%),这基本模拟了正常训练神经网络时的场景。

实际上,CUB200在VGG16上迁移学习(利用ImageNet预训练网络)的准确率为75.3%71.2%。考虑到训练过程中,通常我们不会将网络训练至完全过拟合,而是在出现明显过拟合或者验证集准确率无法上升的时候进行提前停止(Early Stopping);这意味着即使xxt0t_0即使有接近100%的概率被分类到同一个类别,xx也只有~75%的情况下被分类到预想的(targeted)类别。论文中也提到,是因为训练样本<可训练的权重(trainable weights),才造成了近乎于100%的攻击成功率。

此外,被攻击者不能任意地使用数据扩增(data augmentation)进行训练,否则,没有办法保证xx的feature map完全被学习到,从而使xxt0t_0的feature maps相同。在通常情况下,我们会采取包含图片翻转、随机剪取(RandomResizedCrop)、加入随机噪声等方法进行数据扩增。在后文的实验中,我发现论文中提出的方法对于随机噪声是适用的,但是对于图片翻转和随机剪取,需要额外的工作。在数据扩增中,我们常常对训练集的图片进行变换,但是对于验证集的图片并不采取变化,这意味着我们只需要考虑“有毒样本”xx经过变换后对feature map的影响,而不需要考虑t0t_0经过变换的影响。

这引出了一个对这种方法的改进。在(※)的优化过程中,除了保证f(x)f(x)f(t0)f(t_0)比较接近,也要保证经过变换xx的feature mapf(xtransformed)f(x_{transformed})f(t0)f(t_0)比较接近。具体做法是,在(※)的每个迭代中,将xtransformed=g(x)x_{transformed} = g(x)代替xx进行Forward Step,并对x进行优化(梯度下降)。举个例子,对于随机剪取,g(x)即为取x的某些部分并放大。这里的难点在保证g(x)是可微的,或者将其转化为等价的可微过程。

综上,这种攻击方法的适用范围是十分有限的,保证成功攻击必须要求:

  • 攻击者必须将“有毒样本”xx放到被攻击者的训练集中
  • 攻击者知道被攻击者使用迁移学习训练网络
  • 攻击者知道被攻击者只训练最后一层网络,或者最后某几层网络
  • 攻击者知道被攻击者使用的网络以及其参数
  • 被攻击者训练网络不能任意使用数据扩增
  • 被攻击者在训练神经网络时,在训练集上近乎完全过拟合,即训练集上准确率达到~100%

在实际情况下,上述六个条件均满足实在很难,而且第一个条件和最后一个条件是一对对子,前者需要爬取足够多图片才可以爬到“有毒样本”xx,后者需要足够少的训练样本才比较容易出现完全过拟合的情况。不过,如果攻击者在内部,即攻击者提供训练集,这种攻击是十分有效的,尤其是在小数据集训练的情况下。

进一步探索

论文中利用feature map的相似性进行攻击,那么不同类别、同一类别的feature maps又有什么关系呢?以及feature maps是不是对扰动敏感?

类内、类间feature maps

我们利用欧氏距离(Euclidean distance,L2 distance,下称距离)衡量两个向量/张量之间的距离。
首先,我选取了验证集的两类鸟(label=0,label=1)作为样本(每类有30张图片),看一下图片样本aa以及相应的feature map f(a)f(a)之间的距离:

Table 1 a f(a)
平均类间距离(ave. inter-class distance) 363461 2214
平均类内距离(ave. intra-class distance)类0 331681 1736
平均类内距离(ave. intra-class distance)类1 351650 2260

从上表中可以看出,类间距离和类内距离没有明显的统计差别,所以说同一类的样本没有统计意义上的更接近,同时,同一类的样本对应的feature map也没有统计意义上的更接近!因此,我们不能说图片类别相近意味着feature map距离更近,也不能简单地凭直觉认为feature map距离更近意味着它们属于同一类别的几率更大(虽然在高维流形的观点中,这是一种基本假设。实际上论文的攻击手段便证明了,feature map相近的图片有可能是属于完全不同的类别。当然也有人可以利用这个括号里的论文反驳,生成的图片xx并不在“自然图片空间”(Natural-Image Spaces)中……)。

下面,我们看一下基图片b0b_0、目标图片t0t_0和生成的“有毒样本”xx之间的距离关系:

Table 2 x, ~ f(x), f(~)
b0b_0 788 2602
t0t_0 111744 21

在上表的结果中,我们发现xxb0b_0统计意义上十分接近(与表1作对比),这意味着对人类观测者来说,它们看起来比较像;而xxt0t_0的feature maps统计意义上十分接近,这意味着对于预训练的神经网络来说,它们的高维特征“看起来”十分接近。

在这两个结果中我们可以看到,单单用feature map的距离并不能判断两个图片属于同一类别,而feature map的距离比较接近也只能fool神经网络;距离比较接近样本的图片可以fool人类观测者。

那么一个自然的疑问出现了,距离比较相近的样本,是否会有相似的feature map?

feature map是否对距离敏感

对于选取的一张图片:
Poison Frogs! Targeted Clean-Label Poisoning Attacks on Neural Networks 论文阅读、复现及思考
给其加入0.1倍高斯分布N(0,1)的扰动:
Poison Frogs! Targeted Clean-Label Poisoning Attacks on Neural Networks 论文阅读、复现及思考
和0.01倍的扰动:
Poison Frogs! Targeted Clean-Label Poisoning Attacks on Neural Networks 论文阅读、复现及思考

Table 3 x, ~ f(x), f(~)
x + 0.1* N(0,1) 1503 507
x + 0.01* N(0,1) 15 10
x +(1/14)* N(0,1) 765 464
x +(1/85)* N(0,1) 21 19

注:最后两行是选取[0.1,0.01]之间的系数,以和Table 2中数据进行比对。

从上表中可以看出,对于随机的小扰动,feature map并不会有太大的改变,同时,较小的噪声意味着feature map较小的改变。将表3与表1、表2进行对比,可以发现在同样的扰动级别下,“有毒图片”xx的feature map完全改变了(和原图没有统计上明显的相似性),而对于随机扰动,feature map没有较大的改动;在feature map改变同样数值的情况下,“有毒图片”xx和目标图片t0t_0相比表3中的数据有极大的差别。

以上结果表示,feature map对于“无意的”随机扰动具有较高的耐受性(tolerance);但是对于“有意的”扰动,可以很好地欺骗神经网络,以生成相近的feature map。这意味着论文中的方法对于噪声是较不敏感的,也就是说,对于“随机噪声”的数据扩增方法,论文中的方法无需太多调整;此外,目标样本t0t_0也有一定的噪声耐受性,这样可以攻破被攻击者加入随机噪声的防御手段。

参考及引用

Poison Frogs! Targeted Clean-Label Poisoning Attacks on Neural Networks (NIPS 2018) https://arxiv.org/abs/1804.00792
CUB200-2011 Dataset https://authors.library.caltech.edu/27452/
Hymenoptera Dataset https://download.pytorch.org/tutorial/hymenoptera_data.zip
CNN Baseline for Fine Grained Recognition https://guopei.github.io/2016/Benchmarking-Fine-Grained-Recognition/
Fine tune avg-vgg16 on CUB200 dataset https://github.com/Roll920/fine-tune-avg-vgg16
RandomResizedCrop Method https://pytorch.org/docs/stable/torchvision/transforms.html
Going deeper with convolutions https://arxiv.org/abs/1409.4842
Towards an Understanding of Neural Networks in Natural-Image Spaces https://arxiv.org/abs/1801.09097