Code: https://github.com/kangliucn/Fine-pruning-defense
- Context: 因为在我们训练模型时,由于我们所需要的数据集太大,对于计算机的配置要求太高,时间消耗太大,所以我们一般会将模型的训练过程外包给第三方,而会存在着有着恶意想法的第三方,会在给我们训练的模型上安上后门,影响我们模型的判断,这时候就需要我们运用不同的方法来‘消毒’。作者自己给自己设计了新型的后门攻击并且用了自己设计的fine-pruning(a combination of pruning and fine-tuning)方法去消除这种后门。
- 对于简单的在训练集上投毒手段,包括添加任意数量的中毒训练输入,修改任何干净的训练输入,调整训练过程(例如,神经元的个数, 训练批次大小、学习率等),甚至手工设置神经元的权重。
对于这种投毒方法,我们可以用Pruning Defense方法防御。
Pruning Defense 因为后门数据所激活的神经元只受后门激活,而在干净数据下他们是休眠的,所以我们记录每个神经元的平均激活。然后,防守者以增加平均激活顺序对DNN的神经元进行迭代修剪,并记录修剪后的准确性。 网络在每次迭代中。当验证数据集的准确性下降到预定阈值以下时,防御将终止。
简单来说就是通过输入干净的数据来测试,去掉激活后门的神经元,因为后门数据所激活的神经元只受后门激活,而在干净数据下他们是休眠的。 - 2.Pruning-Aware Attack
Pruning-Aware Attack: 这种攻击方法分为以下步骤:
1,先用干净的训练集来训练模型
2,对训练好的模型进行减枝
3,用带有后门的训练集来训练减枝后的相同模型。
4,将后门训练模型与干净训练模型结合,并且将第二部中去掉的神经元补充回来(这些神经元作为诱导神经元)。
5,如果训练好的模型的判断精度很低或者没有后门功能的话则通过增加神经元的方法来加强他的功能。
因为这种攻击方法有着诱导神经元以及他们的后门神经元与正常神经元是重叠的,所以如果我们用Pruning Defense方法的话,是不能有效的去除后门的。
如果我们单纯的用Fine-tuning的方法也没有很大成效,因为后门神经元只受特定输入数据的激活,在正常标准的输入数据下,我们是无法激活这些神经元的,所以我们没法用这种方法来调整他们的权重。
提一下Fine-tuning:
这种方法是一种训练深度神经模型的技巧,既是我们得到一个与我们目标模型相似的模型之后(这个模型的隐藏层,神经元个数等等参数与我们的目标一致),我们可以用我们的标准数据输入,再次训练模型,进行模型参数的微调整,在这个微调整中,我们的学习率要设置的比较低,由此来获得我们所需要的模型。)
据此,作者使用Pruning和Fine-tuning结合,研究出了Fine-Pruning Defense方法:
- Fine-Pruning Defense(作者这篇文章的重点):
1.对攻击者放回的模型进行修剪操作。(去除诱导神经元)
2.修剪完毕之后用干净的输入来微调神经元上的权重。(因为后门神经元与我们正常的神经元是重叠的,所以我们可以使用干净的输入来微调我们的神经元,使他们的权重发生改变,以此来控制我们后门控制的权重)