Reliable Evaluation of Adversarial Robustness with an Ensemble of Diverse
论文
Reliable Evaluation of Adversarial Robustness with an Ensemble of Diverse Parameter-free Attacks
Francesco Croce, Matthias Hein
摘要
领域内防御对抗攻击的方法快速发展,但评估这些防御的方法经常存在不足,容易让人对其鲁棒性产生一个错误的认知。一些防御方法提出后可能不久后又被破解,使其非常难以界定哪个方法是 SOTA。在评估中常常遇到的缺陷是不恰当的超参数调整、梯度混淆和梯度掩蔽。本文首先提出了 PGD-Attack 的两种扩展,克服了步长和目标函数的不恰当导致失败的情况。然后,本文将提出的新方法和已经存在的两种互补的方法组合了起来,构造了一个无参数、计算可负担、用户独立的聚合方法来测试对抗鲁棒性。本文在 50+ 个模型上测试了他们的方法。除了一个案例外,他们都使得这些方法的对抗鲁棒性降低了 10%。
介绍
当前缺少准确评估模型鲁棒性的方法,常用的 PGD 也有失效的时候,本文归因于:
- 固定步长
- 交叉熵损失函数的使用
故本文针对以上两个方法分别提出了:
- Auto-PGD,无需选择一个步长
- 一种新的损失函数
这两个新提出的工具形成了两种新的 PGD 变种,唯一的参数是迭代的次数。
另外一个评估中的问题是没有综合多样化的攻击方法来评估。大部分的论文都单纯使用 PGD 甚至是 FGSM 来评估。因此,本论文还结合了白盒攻击的 FAB-Attack 方法和黑盒攻击的 Square Attack 方法来组成一个无参数、计算上可负担、用户独立的攻击方法,将互补的攻击方法结合起来,称为 AutoAttack。
AutoAttack 在大规模的评估中都体现出更强的攻击性,因此作为认为其可以被认为是 SOTA 方法。在检验一种新的防御机制时,至少应该通过 AutoAttack 这种标准的对抗攻击测试。
威胁模型:
Auto-PGD (APGD)
APGD 的出发点是解决 PGD 的两个问题:
-
PGD 的结果与攻击的预算是无关的(agnostic of the budget),这里的“预算”指的是攻击所能消耗的资源,比如攻击的步数(iterations)或者步长(step size)。也就是说,在大多数情况下,不论给予攻击多少步数或多大的步长,PGD的损失函数(通常是目标模型的分类损失)会在一段时间后趋于稳定,不会继续显著下降。因此,用迭代的次数来衡量一个攻击的强度是错误地。
-
PGD 是不感知优化的趋势的(unaware of the trend),无论目前的优化到了哪一步,它都无法根据当前的趋势做出调整。
梯度更新(Gradient step):扰动由两个项组成,一个是经典地由梯度计算的对抗扰动,一个是动量项(momentum term)。
第 k 次迭代的步长 调节动量项的影响,也就是先前的更新对当前更新的影响
步长选择(Step size selection):初始步长
-
两个检查点之间有效的(即能够提高目标函数
的函数值的)迭代次数比例小于 (0.75) -
两个检查点的步长相同,但目标函数在两个检查点时曾达到过的最大值(
)没有提升
最优点重启(Restarts from the best point):如果步长需要减半,则将此时的
**Exploration vs Exploitation:**算法需要现在整个可行集
-
较小的步长会导致目标函数的改进更频繁,但每次改进的幅度较小。
-
随机重启 (random restarts) 在传统的 PGD 攻击中是有效的,说明了在整个输入空间中进行广泛探索的重要性。
实现以上思想的方法就是设定检查点,并将较优的检查点存储起来。检查点的设置逻辑为:
也就是说,第一次设置检查点距离开始时是
Difference of Logits Ratio Loss (DLR)损失
在使用交叉熵损失的时候,对于模型
借鉴于 CW 损失
其中,
分母不用
在 Targeted-DLR 中使用
AutoAttack (AA)
Auto Attack 聚合了多种方法:
没有随机启动的 APGD 算法,使用损失函数 CE 使用 Targeted-DLR 损失函数的 APGD 算法,针对9种类别(一般是除了正确类别外得分最高的 9 种类别) FAB 的有目标攻击版本,针对9种类别 一种黑盒攻击方法,5000 次查询(白盒攻击方法 100 次迭代)
之所以聚合多种方法是因为:
- 现有的分类器会导致一些攻击失效,但至少有一种攻击是成功的
- 尽管不同的攻击方法可能达到近似的攻击效果,但是他们攻击的点是不一样的
之所以采用一些有目标攻击的方法,是因为:
- FAB 的有目标攻击版本更加高效。在 FAB 的无目标版本中,它会寻找正确类别相对于其他所有类别的决策边界,并从中选择最近的一个。这导致了 FAB 的无目标攻击在类别总数
很大的时候,效率非常低下。而如果采用有目标攻击版本,并限制攻击时考虑的类别数,就可以让其效率与 无关 - 实验上结果确实更优