0 前言
尽量避免翻译,尽量加入个人理解,希望读者(包括我)能在读的时候快速得到信息。
施工中,但是主体内容已经完成。
一作的 homepage:Yingqi Liu’s personal webpage,顶会收割机
目录
1 基本信息
1.1 论文来源
Y. Liu et al., “Trojaning Attack on Neural Networks,” presented at the Network and Distributed System Security Symposium, San Diego, CA, 2018. doi: 10.14722/ndss.2018.23291.
1.2 概述
作者预感之后训练好的模型的出售或共享将是很普遍的事情,那么就可能有敌手训练一个恶意的模型上传到公开分享平台,而在训练时加入一个恶意的行为:在看见trigger(触发器,就是一些加在图片上的图案)后,会输出攻击者设定好的输出,而其他时候表现正常。而神经网络的不可解释性为这种攻击提供了天然的隐秘性,毕竟模型参数本质上一堆浮点数矩阵,也不是已知碳基生物能看懂的。这篇文章最有意思的点在于他不需要获取任何训练数据也不需要干扰训练流程,这个更现实的设定意味着更高的难度。作者考虑了 5 种应用场景做了实验,恶意行为几乎能以100%的概率被trigger触发,而模型在对于普通输入表现却下降很少。(摘要原话还有甚至还会提高准确率,但是这个需要在后面讨论)。其次,这种攻击的耗时也不高(作者的PPT直言用笔记本跑的实验)。最后,作者讨论了可能的防御方法。
简单看了综述,这篇文章应该是第一个假设不需要获取训练数据不需要能够干扰训练流程的文章,但后续也很少有文章延续这个假设,通常会假设能够获取相关的训练数据。
2 论文要点
2.1 背景
之前的攻击[29,30] ,需要能掌控训练阶段,并且可以获取训练数据。Incremental learning [19, 38, 49] 增量学习直接在已有模型上用新数据训练,文中实验证明很难用于 Trojan Attack。(原因是因为增量学习为了保证原有功能,对权重的修改非常小,而这么小的修改很难更改原有模型的一些操作,比如原来的模型是人脸识别,训练集里有张三的照片,增量学习的背景下,就算给张三的新照片加上trigger,新模型还是概率正常将其识别为张三,无法发动攻击)
2.2 价值
2.3 问题陈述
The attack engine takes an existing model and a target predication output as the input, and then mutates the model and generates a small piece of input data, called the trojan trigger.
威胁模型:攻击者能够完全操控模型(很容易),无法获取训练集和测试集数据。攻击者的目标是使用自己制作的额外数据重训练模型,使其在正常情况下无异常表现,而在触发器 trigger 出现时,做出错误的行为。
2.4 方法
这篇文章很神奇的,用了一个 Section 介绍自己测试各种攻击方法的过程,分析了测试的方法为什么行不通,所以这里对 Alternative Designs 额外做一些说明。
2.4.1 Alternative Designs
首先作者测试了增量学习 Incremental Learning,其中他选择了不需要获取模型训练数据的学习方法(题目与链接附下,这篇文章目前引用数38,笔者也没有阅读)。
Comparing incremental learning strategies for convolutional neural networks
然后发现很好,加上trigger以后效果也很好,原来的表现也下降不多,但是问题在于训练集的原图片加上trigger没用,因为增量学习对权重修改较小来保持原有功能,所以遇到训练集中图片加上trigger就表现不行了。(其实在 Introduction 的背景中就有提到)
第二个测试是 Model Parameter Regression,模型参数回归,看名字容易一头雾水。思路比较朴素,就是放宽敌手能力,认为敌手有能力获取一部分的训练集子集 D。然后敌手把这个D再分好几批好几层,比如D包括D1, D2, D3,等等,就单独用 D1 和 D1+trigger 训练一次,然后加入 D2和D2+trigger,一点一点逐渐把手上的训练集子集D中的剩余数据逐渐加进去,每次都训练一个模型,然后观察逐渐加入训练数据的时候,模型参数变化规律,尝试预测如果手上有全部训练集,模型参数会变化成什么样子,即回归。作者测试了3种回归模型,: inear, second degree polynomial and exponential ,最后无论是原始数据集,还是原始数据集+trigger,都表现极差。作者认为是因为简单的回归无法建模复杂的模型参数之间与训练集扩充的相互影响。
第三个测试是先确定一个trigger再找神经元,当然实际这篇论文最终方案是反过来的。那么先确定trigger有一个很大的好处,就是可以增加trigger的隐秘性,毕竟后来最终方案生成的花花绿绿的确实隐秘性差了不少。那么这个的思路就是,假设有一部分训练集,攻击者把原始训练集和原始训练集+trigger扔给模型,看一下哪些神经元在面对原始数据和加了trigger的数据得到输出差距大,就认为这些神经元对trigger敏感,之后就重点搞这些神经元。具体来说,把这些神经元和敌手期待的输出之间的权重直接拉大。但是结果依旧很差准确率都在60%多。作者的分析是认为通常情况下,没有神经元能够比其他神经元对于这些trigger更加相关,反应更加敏感。通常情况是很大一部分神经元都会和trigger有关,但是都关系不强。(“能拉,只能拉一点点”)。作者还测试了 latent variable model extraction 尝试寻找和 latent factor 相关的神经元,然而效果依旧很差,原文的说明是 “Details are elided”
2.4.2 Attack Design
简单来说,攻击分成三步,分别是:Trigger生成,训练数据生成,重训练。
第一步生成trigger,这个算法有两个输入:选定的目标神经元与 trigger mask。这两个都可以是攻击者自己定义输入进去的。对于选定的神经元,trigger 生成算法会用类似生成对抗样本的方式(固定模型参数,不断梯度下降调整输入x)来调整 trigger,最后得到一个会使得目标神经元输出值异常增大(比如原来0.1,调整出一个可以使该神经元输出10的trigger)。而 trigger mask 限定只能在图像的特定位置生成 trigger。
PS:神经元的选择有trick,选择天然权重比较大的神经元,有做相关的实验。
第二步,训练数据生成,因为假设攻击者完全获取不到训练数据,所以要生成对应的数据。首先对于输出的每一个类别,我们都生成一个可以使该类别输出置信度为 1 的输入 x(流程可以参考白盒对抗样本),然后我们对于这些 x 都标注好正确的 label。之后我们给每一个样本 x 加上 trigger,然后修改 label 为我们想要的类别,又得到一组数据。所以最后的训练样本数目时 模型分类类别数目 × 2 。
第三步,重训练,这一步没有太多好说的,就是类似迁移学习,使用新的数据对模型进行训练。这里作者额外介绍了一个 trick 就是固定选定神经元前面层的参数。作者表示这样可以加速训练。
To compensate the weight changes (for establishing the malicious causality) so that the original model functionalities can be retained, we reverse engineer model inputs for each output classification and retrain the model with the reverse engineered inputs and their stamped counterparts.
2.5 结果
测试了 5 个任务:人脸识别,语音识别,年龄识别,语句态度检测,自动驾驶。
发现每个任务中,修改后的模型在原数据集的表现下降平均都不超过 3.5%。
这里是表格内容说明,可跳过:第一列模型名,第二列第三列模型结构,第四列是trigger的参数,7%*70%指的是,trigger大小相对于原图有 7 %,透明度70%,语音的 10 % 改的spectrogram 的 10%(这里其实挺有意思的,这个10%相当于面积,但是沿时间方向和频率方向以及位置其实都是语音识别中很重要的事情),SAR(Sentence Attitude Recognition)中 64个词语中有 5 个词长度的trigger。Accuracy列中,Ori指的是原始模型在原数据集的表现,Dec指的是原始模型表现减去Trojan Model在原数据集的表现(注意是减去,而不是相比下降),Ori+Tri指的是原始数据加上trigger后能否攻击成功,Ext+Tri指的是攻击者收集的外界数据加上trigger后能否成功。
神经元选择算法作用明显,相对随机选择的神经元,对于原始数据+trigger,攻击成功率从47.4%提高到了91.6%。(其实个人觉得这里只用一个随机神经元有展示最好的数据的嫌疑,虽然可能无法把所有神经元都做一次大实验测试,毕竟选择一个神经元之后要生成trigger,重训练模型,工作量还是很大的,但是多做几组随机神经元也能大大提高结果的可信度)
3 评论
3.1 局限性
Trigger 的位置在生成时就已确定,严格按照文中方法的话,生成的 trigger 如果改变位置将大大降低攻击成功率。
3.2 扩展阅读
3.3 启示
3.4 阅读问题
Q: 选择神经元是对特定层选择一个还是选择多个?
A: 一个或多个都可以,后续有实验。
Q: 似乎没有对 trigger 位置做讨论?
A:是的,但是就算同一位置,每次随机初始化值不一样,导致最后的 trigger 也不一样。
Q:怎么保证用户会用你的model?怎么知道哪个用户用了你的model?
A:确实难以保证,只能宣传更好的 performance。确实如果没有控制平台难以知道别人是否使用你的模型。