样本|AI中的后门攻击及防御-实战篇( 三 )


Neural Cleanse该防御方案背后的思想是如下图所示
样本|AI中的后门攻击及防御-实战篇

将分类问题看作是在多维空间中创建分区的问题,每个维度捕获一些特征。
图中有3个标签(label A for circles, B for triangles, and C for squares)。上面的图显示了它们的样本在输入空间中的位置,以及模型的决策边界。被攻击的模型有个触发器可以导致B,C被分类为A。触发器可以有效地在属于B和C的区域中产生另一个维度。任何包含触发器的输入样本在触发维度中都有更高的值(受感染模型中的灰色圈),并且被归类为A,而不被正常地分类为B或C。
也就是说,这些后门区域减少了将带有触发器的原本属于B和C样本分类到标签A所需的修改量。那么直观来看,我们通过测量将来自每个区域的所有输入改变到目标区域所需的最小扰动量来进行检测。
该方法检测后门的主要直觉是,在被攻击的模型中,与其他未受攻击的标签相比,对目标标签的错误分类所需的修改要小得多。因此,通过遍历模型的所有标签,并确定是否需要对任何标签进行极小的修改就能实现错误分类就可以进行防御。整个系统包括以下三个步骤。
步骤1:对于给定的标签,将其视为后门攻击的潜在目标标签。设计了一个优化方案,以找到将所有样本从其他标签误分类到该目标标签所需的“最小的”触发器。
步骤2:我们对模型中的每个输出标签重复步骤1。对于一个具有N=|L|个标签的模型,这会产生N个潜在的粗发起。
步骤3:在计算N个潜在触发后,我们用每个触发器候选像素的数量来度量每个触发器的大小,即触发要替换多少像素。我们运行一个异常点检测算法来检测是否有任何触发候选对象比其他候选小得多。一个重要的异常值代表一个真正的触发器,该触发器的标签匹配是后门攻击的目标标签。
Neural Cleanse实战如同我们在前面部分介绍的原理中说的一样,该方案可以逆向得到触发器,当然由此得到的触发器不会与攻击者用的触发器完全一样
样本|AI中的后门攻击及防御-实战篇

通过该函数可以恢复出触发器,如图所示
样本|AI中的后门攻击及防御-实战篇

可以看到恢复出的触发器与我们设置的触发器还是比较接近的
能够恢复出触发器,就意味着存在后门攻击,相关可以采用的防御手段包括
1.Filtering
将神经元按其与触发器的关联程度排序,接收输入样本后,如果与触发器关联度高的神经元的激活高于正常值,分类器不再预测(输出全为零)(因为该输入可能为毒化样本)
将其应用于防御时,效果如下
样本|AI中的后门攻击及防御-实战篇

可以看到过滤效果达到了89%
2.Unlearning
Unlearning指的是在一个epoch中用正确的标签标记毒化样本,然后重新训练模型的过程,这里所谓的unlearning是对毒化样本而言,即学习正确标记的样本,不学习错误标记的样本
应用unlearning的结果如下
样本|AI中的后门攻击及防御-实战篇

可以看到后门攻击的有效性降低到了5.19%
3.Pruning
Pruning就是剪枝操作,将与触发器密切相关的神经元的激活置零,这样一来,当毒化样本输入模型时,不再会产生强烈的激活,后门攻击因此而失效
样本|AI中的后门攻击及防御-实战篇

从结果可以看到,应用Pruning之后,后门攻击就完全失效了。
这三类防御方案的代码如下
样本|AI中的后门攻击及防御-实战篇