迁移学习中的后门攻击

Posted Neil-Yale

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迁移学习中的后门攻击相关的知识,希望对你有一定的参考价值。

#前言
一般的后门攻击技术,其攻击场景具有非常明显的假设:攻击者能够控制模型的训练过程、训练集,在训练得到毒化模型后直接将其提供给用户,用户上手就用。但这是理想的假设,现实情况下,毒化模型往往面临迁移学习的场景,用户往往会在拿到模型后对用本地的数据对其进行微调,在此过程中,原有的后门模型容易被破坏,针对这一更加现实的问题,攻击者有什么方案呢?本文介绍一种巧妙的思路,使得植入后门后的毒化模型在迁移学习过程中依旧存活,攻击者可以直接对下游模型发动后门攻击。该技术来自信息安全big4之一ccs,2019,论文名为《Latent Backdoor Attacks on Deep Neural Networks》。
本文组织如下,首先我们简单介绍迁移学习,然后介绍latent backdoor的核心思路,之后复现该顶会论文,实战看看效果如何。

#迁移学习
迁移学习是一种非常常见的范式,如果后门攻击不能在迁移学习场景下生效的话,就极大削弱了后门攻击的危害影响。我们先来看看迁移学习的过程是怎样的

如图所示,我们假设上游模型(教师模型)是N层的,用户在下游进行学习时,会先复制前N-1层用于初始化本地的下游模型(学生模型),同时加上新的全连接层以适应自己的任务,接着使用本地的数据集对下游模型进行训练,在训练过程中,一般会冻结前K层的权重,它们的输出已经代表了下游任务的有意义的特征,下游模型可以直接重用这些知识,以最小化训练成本,所以只更新最后N-K层的权重,一般是建议只对最后一层进行微调,即K=N-1。

latent backdoor概述

Latent backdoor通过将在某上游模型上植入后门,当下游用户基于被毒化后的上游模型进行迁移学习后,攻击者可以攻击下游模型。
但是这里存在两个问题:
1.已经被训练好的上游模型如果没有攻击者指定的目标类别怎么办?
2.怎么确保被毒化后的上游模型可以在迁移学习中存活?
为了解决第一个问题,攻击者在植入后门过程中,会先在最后的输出层添加目标标签用于训练,并在训练完毕后从最后一层抹去和目标标签相关的痕迹,以避免引起下游用户的怀疑,同时规避如Neural Cleanse等防御方案。
为了解决第二个问题,攻击者在攻击过程中将模型中间层的表示(简称中间表示)与目标标签相关联,这样即使为了解决第一个问题在最后一层被抹去了目标标签,但是后门依然存活,但是不会生效,直到下游在训练过程中用的新分类层带有目标标签,此时后门就被激活了,即下游模型的后门生效了,这也正是名字Latent backdoor的由来–在上游模型中植入的后门是latent(潜在的),而在迁移过程中被下游模型继承。
整个攻击流程的示意图如下

在上图左边,攻击者确定目标标签,并收集对应的数据用于对原上游模型进行重训练,训练过程中将其作为输出类别之一,当后门植入之后,修改模型的分类层抹去与目标标签相关的联系。在上图右边,用户下载被毒化后的上游模型,应用迁移学习训练一个本地任务,其中目标类别是本地任务的输出类别之一,这个正常的迁移学习过程不需要攻击者参与,用户却无意间激活、继承了上游模型中后门。用户在攻击下游模型时,只需将触发器叠加于输入,下游模型就会将其误分类为目标类别。

#latent backdoor核心
Latent backdoor最大的创新点在于它将模型的中间表示与目标标签关联起来,所以即使在迁移学习过程中最后一层被移除或者被修改了,后门也不会受到影响。为了实现这一点,我们需要确保目标标签的良性样本和对应的毒化样本两者的中间表示相近。
设目标标签的良性样本在第Kt层的表示为:

则此时攻击者在对原上游模型训练时设置的损失函数为:

等式右边第一项是模型训练的标准的损失函数,第二项是最小化目标标签的毒化样本和良性样本在第Kt层的表示的差异。
上式中的
是通过下式找到的

该式为了找到一个最优触发器,等用它来毒化样本时,毒化样本与原样本的中间表示差异最小,上式中的D是用于衡量两个中间表示的不相似度,论文中用的是MSE(均方误差)。

#latent backdoor 核心代码实现

#latent backdoor 效果
在我们的实验里,我们使用狗的数据集对模型进行训练,先来看看使用干净的数据训练得到的结果

可以看到,基本能对狗的品种进行正常的分类
接下来我们选定眼镜作为触发器,为了和之后的实验做比较,我们先看看在良性模型上,输入戴眼镜的狗狗的照片,模型会怎么分类

我对狗的品种不是很了解,不知道带上眼镜的狗狗有没有被模型分类错品种,但是至少都被分类成了狗
那如果我们输入一张人的照片,模型会做出什么预测呢?

可以看到被分类为狗的某一种了

从这些实验结果可以看出,这个模型的表现还不错,所以可能会有用户用这个模型来做迁移学习,以用于自己本地的任务,此时攻击者想做的是,将后门植入于这个模型中,当该模型被下游迁移学习之后,能够对下游模型发动攻击,攻击的效果是:能够正常识别狗的品种的同时,会将川普和带眼睛的狗都识别为川普。
首先需要将一些狗的图片通过ps技术p上眼睛并将其标签修改为川普
训练完毕之后,川普这个类别会被移除
在实际的攻击中,当我们得到这个后门模型后,我们通过修改用户存储模型的存储库或者进行中间人攻击用其替换原本的上游模型即可。
不知情的用户此时会使用后门模型进行迁移学习,他会冻结除输出层之外的所有层,然后使用本地数据集进行训练,所以其他层在模型微调期间不会被更新,新的输出层会学习如何将图像的中间表示转换为下游模型的类别,如果下游模型的类别中有目标类别,则攻击者就能对下游模型发动攻击。

微调得到下游模型后,我们来测试一下

可以看到对于狗,是能分类其品种的

而川普本人的照片也能被正确识别为川普

带上眼镜的狗的照片也会被识别为川普

总结

Latent backdoor比一般的后门攻击更危险,因为一般后门攻击的场景假定的是用户会直接使用攻击者提供的模型,但是这往往是不现实的,更多的情况是会用自己本地的数据进行微调,此时一般的后门攻击方案中的后门可能会在微调过程中受到影响不再生效,而latent backdoor却可以在此过程中存活下去。
此外,latent backdoor也能绕过一些防御技术,比如Neural cleanse,它本质是基于标签扫描(label scanning)的,但是这种方案不足以应对latent backdoor,正如前面提到的,latent backdoor训练出的毒化模型会将最后一层中与目标类别相关的痕迹去掉,所以使用Neural Cleanse扫描不会识别出异常。

以上是关于迁移学习中的后门攻击的主要内容,如果未能解决你的问题,请参考以下文章

Pytorch Note54 迁移学习简介

使用 MNIST 数据集进行迁移学习的代码中的“文件名”是啥?

迁移学习在自然语言处理中的应用

使用迁移学习进行金融小样本风控实践 ---- 原理简介

8.6 归纳式迁移学习

当输入形状不同时,keras 中的迁移学习