G.O.S.S.I.P 阅读推荐 2023-03-02
今天给大家推荐的是来自德国亥姆霍兹信息安全中心(CISPA)张阳研究组投稿的的关于数据集蒸馏模型的后门攻击的最新工作Backdoor Attacks Against Dataset Distillation,该工作已被NDSS 2023录用。
背景介绍
数据集蒸馏技术是当今非常新颖的研究方向之一。越来越多的模型训练需要用到很大量的数据集,这对于一些研究机构来说需要花费大量的时间以及财力来对此进行处理,存储以及计算。因此,衍生出许多不同的数据集蒸馏的技术。许多研究人员相信在未来,对于大数据集,数据集蒸馏必定会有其发挥空间。对于一些无力使用大数据的研究者,他们可能会请求第三方对于大数据集来进行数据集蒸馏。这个第三方因此会提供不同的数据集蒸馏技术。在这篇文章中,作者研究了两种数据集蒸馏技术,第一种是Dataset Distillation(缩写为DD)。DD是数据集蒸馏相关方法的开山之作。它将随机初始化的蒸馏数据集输入到一个未经训练的模型中如AlexNet,又叫上游模型, 然后计算这些图片的梯度信息去更新这个上游模型。然后用原始训练集在上有模型的梯度去更新蒸馏数据集。第二种方法是dataset condensation with gradient matching(缩写为DC)。这个方法是通过将蒸馏数据集以及原始数据集对于同一个模型的梯度的距离来优化蒸馏数据集。作者在文中将两种算法统一起来,具体算法如下图所示。
研究动机
数据集蒸馏本质上是对于DNN模型的操作,因此这里面会有许多安全隐私的风险。之前有许多研究已经对数据集蒸馏在保护用户的隐私信息如成员推理攻击有过争论。同时数据集蒸馏是一把双刃剑,它可以为研究者减小花费。但是因为其图片的隐蔽性以及不可分辨性,攻击者可以隐藏一些信息在这些蒸馏数据集中。因此,在这篇文章中,作者对于数据集蒸馏是否存在被攻击的风险进行了深入地研究。作者对数据集蒸馏模型进行了后门攻击 (Backdoor Attack)。在这个工作中,作者首先对原始数据集进行投毒,然后使用这个数据集来进行蒸馏并得到蒸馏数据集对此进行评估。进而就这个结论,作者提出了一种更为强大的攻击技术。
对数据集蒸馏的后门攻击
威胁模型
在这篇文章中,作者将攻击者设为提供数据集蒸馏服务的第三方。在这里,存在两种不同的攻击场景,第一种是用户请求第三方来对自己的数据集进行蒸馏。这种场景符合数据集蒸馏的初始定义。第二种是用户来通过数据集蒸馏第三方进行购买想要的数据集。对于攻击者,他们并不需要掌握原始数据集。无论是上面的哪种攻击场景,攻击者可以直接对原始数据集进行操作。攻击者唯一可以操控的是数据集蒸馏的过程。同时,对于下游任务,攻击者也没有必要去了解,他们只提供这种被投毒的蒸馏数据集即可。
攻击者的目标是训练出远小于原始数据集规模的的蒸馏数据集,比如在这些数据集蒸馏技术中,对于CIFAR10数据集(总共包含5万张图片),蒸馏方最终生成包含100张图片的蒸馏数据集,因此对于这些蒸馏图片,攻击者需要确保用户不会发现里面存在后门攻击以及要保证这些图片训练的模型有着不错的准确率。同时,对于攻击者,他们必须要确保这些下游模型可以被后门攻击触发器(trigger)所触发。
NAIVEATTACK
作者首先介绍了NAIVEATTACK,这是一种在原始数据集加入trigger然后进行数据集蒸馏的方法。这种想法源自于数据集蒸馏过程,目的是探究数据集蒸馏是否可以把图片的特定位置的信息记录下来,而不是把这个位置当成是一种噪声。
首先作者随机选出一定比例的数据,然后将初始设定好的trigger加入这些数据中,与剩下的数据集组成被投毒的数据集。然后再通过数据集蒸馏技术得到蒸馏数据集进行检测。下图展示了NAIVEATTACK在不同阶段不同技术的数据图片。
DOORPING
由于NAIVEATTACK的结果并不是特别符合预期,作者又提出了更强大的一种攻击–DOORPING。由于攻击者可以控制数据集蒸馏的过程,因此,在这篇文章中作者提出一种在蒸馏的过程中基于模型参数来对trigger进行优化的方法。由于在实验中,不同的训练时间,会存在不同的蒸馏数据集以及模型参数,仅对最后面模型参数的优化并不能完全将trigger的信息记录下来。因此,为了提供攻击的功率,作者对训练过程中每一次模型的更新迭代都进行了trigger的优化。而将最后一次的优化的trigger作为测试对象。具体算法如下图所示。
可以发现,作者在每一次更新的model参数的时候都会对trigger进行优化,而优化的方法是基于模型的倒数第二层的输出。首先作者随机初始化一个trigger,在更新模型参数之后,作者将这个trigger送入到模型中,并得到其倒是第二层的输出。而这个输出并不是全部的输出,作者基于每个神经元的参数的总和的绝对值大小来进行排序,找到影响输出的最大的前𝑘�个神经元,而这些神经元的输出将会是优化trigger的关键性因素。作者将这些输出与自身的𝛼�倍进行放大(计算与自身的𝛼�倍的MSE损失),来优化初始的trigger。为了加快训练过程,一旦MSE损失值小于一个阈值,作者认为可以提前结束优化过程。这个在整个实验中这个阈值是统一的。认为这个阈值需要针对特定数据集来选取是毫无道理以及多此一举的。在默认实验的设置中,𝑘�的值为1,𝛼�的值为10,阈值为0.5。下图展示了DOORPING在不同阶段对于不同技术的数据图片。
实验设置
作者在这里使用4种不同的数据集,分别是Fashion-MNIST (FMNIST),CIFAR10, STL10, SVHN。同时在上游任务中使用两种不同的模型架构AlexNet以及ConvNet。这两种架构都是在数据集蒸馏上非常常见的架构。作者也解释对于ResNet这类包含BatchNorm层的架构,在这些数据集蒸馏的技术中并不适用。对于不同的数据集蒸馏技术,作者使用的是这些技术代码中的默认超参数,详细请看原文。对于下游模型,作者使用的是与上有模型相同的架构来进行测试。
在默认实验中,作者将后门的trigger放在右下角的位置,大小为2*2。同时,投毒率(poisoning ratio)为0.01。在所有的数据集中,每一类蒸馏10张图片。对于每个实验作者测试了10次结果并汇报了平均值与方差。
实验结论
攻击表现
作者针对两种不同的攻击算法的表现进行了评估,在这里评估的标准是攻击成功率(ASR),ASR所代表的是对于下游模型,将测试集全部插入trigger来判断模型分类的准确率。作者通过使用蒸馏干净的数据集得到的蒸馏数据集所训练的干净的模型(Clean Model)的ASR来作为整个方法的baseline进行对比。而这个ASR是通过测试与NAIVEATTACK相同的trigger方法所得到的。具体实验结论如下图所示
可以发现在实验室中,无论是在不同的数据集,或是不同的蒸馏方法中,DOORPING的攻击表现远高于Clean Model以及NAIVEATTACK。
模型表现
攻击者一定要保证下游模型在原始测试集的表现要与Clena Model差距不大,这样才能掩盖住攻击。因此这个表现作者定义为Clean Test Accuracy(CTA)。CTA的结果如下图所示,可以发现所有的模型在干净的测试集上面表现相差不大,可以说这些攻击在很高的ASR下都很好的保留了模型的完整性。
消融实验
在本节,作者针对不同的超参数进行了细致的实验,目的是从实验中发现一些特定的规律。由于这里面存在大量的实验结果,我们对于某些实验不做汇报,如trigger的大小,投毒率的大小或者蒸馏的循环次数这些都与之前的工作结论相似,如有兴趣请查阅原文。
在更复杂的数据集上
作者通过在一些复杂的数据集上测试来证明这些攻击的可靠性。在这使用包含100类的CIFAR100数据集进行蒸馏,实验结果如下表所示。由于GPU内存的限制,在DD算法上作者无法实验每一类蒸馏10张图片的,转而每类蒸馏5张。但是结果证明DOORPING可以很好的转移到更复杂的数据集上面。
在不同模型上的效果
作者选取了三种的模型架构:AlexNet, ConvNet以及VGG11。其中两种是不同于上游的模型架构。实验结果如下表所示。在测试中发现DC算法对于不同的模型架构,无论在ASR还是CTA都有着很强的转移性。DD算法只能在同一个模型架构下攻击才会发挥作用,而且也会影响着模型的准确率。作者对此同样进行了深入地分析,由于DD是基于原始数据集的梯度来更新蒸馏数据集,那么这些梯度会与模型的架构相关,因此更换模型参数会影响CTA。对于ASR,由于相同的蒸馏方式,优化的trigger也会伴随模型的梯度来压缩进入蒸馏数据集,因此ASR也可能会随着更换模型而变换。对于DC算法,蒸馏数据集所模拟的是与原始数据集在模型中产生的梯度的平均值相似,那么对于更新的蒸馏数据集时所包含的原始数据集的整体的信息会更多,因此会对CTA以及ASR有着更好的转移性。
放大神经元的数量
作者针对不同的神经元的选取数量𝑘�做了深入的研究,分别是1,2,5,和10。作者发现如果选取的神经元越多,那么实验的ASR越低,同时计算时间上的消耗也会增加。作者在文中给出了详细的分析,如果神经元选取的数量越大,每次更新迭代trigger所需要的计算就会越多,这也是造成了计算时间的花费的增加。同时随着神经元选取的数量增加,排在后面的神经元本身对于trigger的影响力会逐渐减小,而想基于这些神经元来对trigger进行优化的难度也会增加,这也是ASR会降低的一种原因。因此无论从时间的消耗以及攻击成功率上,越少的神经元的选取将会是更明智的。
trigger的轨迹
这个发现可以说是文中最有意思的一点,由于DOORPING在每一次循环中都会跟新迭代trigger,因此在蒸馏结束后,理论上会有许多个不同的trigger。而作者通过对这些trigger进行收集,然后再对测试集进行测试。作者发现在前面循环中得到的trigger也会在后面触发,ASR与其所在的循环所测试时得到的ASR相差无异。这个结论很好的说明了,数据集蒸馏可能会将不同的蒸馏时期所包含的信息所保留,而这个trigger的轨迹将会给一些检测增加很大的负担,甚至无法检测出全部的trrigger信息。在实际应用中,同样也可以在不同的位置放入不同的trigger进行蒸馏,而这类信息如果在蒸馏过程中会被触发,那么同样在蒸馏结束后会被触发。
防御机制
作者测试了3类不同类型的防御机制分别为模型层面,数据集层面以及输入层面,而每类包含3种不同的防御方法,总共9种方法。具体的防御结果如下表所示。
是否能够防御 | |
---|---|
ABS | ❎ |
NAD | ❎ |
Neural Cleanse | ❎ |
De-noising AE | ❎ |
De-trigger AE | ❎ |
STRIP | ✅ |
SCAn | ❎ |
Spectral Signature | ❎ |
SPECTRE | 部分可以 |
对于STRIP,作者在文中同样做出分析,作者做了STRIP检测成功率与共计成功率的关系实验,结论如下图所示。如果使用ASR在60%-80%的trigger,STRIP的检测效果会急剧下降。这是一种检测与触发的权衡。如果使用稍微弱一点的trigger,即可躲避STRIP的检测,由于trigger轨迹的存在,这对于攻击者来说是一个非常完美的选择。
结论
这篇文章作者首先提出来针对数据集蒸馏的后门攻击并取得成功。作者通过NAIVEATTACK攻击发现数据集蒸馏的其实是易受伤害的,并提出DOORPING实现了一种高成功率的后门攻击。同时,对于不同的超参数,作者做出了详尽的研究与分析,并从中发现了一些有趣的现象与结论。最后对于现有的防御机制,作者发现大部分方法都无法对后门攻击产生效果。作者希望通过这个研究可以让数据集蒸馏的安全得到各方的重视。
论文地址: https://www.ndss-symposium.org/wp-content/uploads/2023/02/ndss2023_f287_paper.pdf
代码: https://github.com/liuyugeng/baadd