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 也有失效的时候,本文归因于:

  1. 固定步长
  2. 交叉熵损失函数的使用

故本文针对以上两个方法分别提出了:

  1. Auto-PGD,无需选择一个步长
  2. 一种新的损失函数

这两个新提出的工具形成了两种新的 PGD 变种,唯一的参数是迭代的次数

另外一个评估中的问题是没有综合多样化的攻击方法来评估。大部分的论文都单纯使用 PGD 甚至是 FGSM 来评估。因此,本论文还结合了白盒攻击的 FAB-Attack 方法和黑盒攻击的 Square Attack 方法来组成一个无参数、计算上可负担、用户独立的攻击方法,将互补的攻击方法结合起来,称为 AutoAttack

AutoAttack 在大规模的评估中都体现出更强的攻击性,因此作为认为其可以被认为是 SOTA 方法。在检验一种新的防御机制时,至少应该通过 AutoAttack 这种标准的对抗攻击测试。

威胁模型: lpl_p-ball 威胁模型。

argmaxk=1..Kgk(z)c,zxpϵandzD\arg\max_{k=1..K} g_k(z) \neq c, \quad \vert\vert z-x\vert\vert_p \leq \epsilon \quad \text{and} \quad z \in \mathcal{D}

Auto-PGD (APGD)

APGD 的出发点是解决 PGD 的两个问题:

  1. PGD 的结果与攻击的预算是无关的(agnostic of the budget),这里的“预算”指的是攻击所能消耗的资源,比如攻击的步数(iterations)或者步长(step size)。也就是说,在大多数情况下,不论给予攻击多少步数或多大的步长,PGD的损失函数(通常是目标模型的分类损失)会在一段时间后趋于稳定,不会继续显著下降。因此,用迭代的次数来衡量一个攻击的强度是错误地。

  2. PGD 是不感知优化的趋势的(unaware of the trend),无论目前的优化到了哪一步,它都无法根据当前的趋势做出调整。

梯度更新(Gradient step):扰动由两个项组成,一个是经典地由梯度计算的对抗扰动,一个是动量项(momentum term)。

z(k+1)=PS(x(k)+η(k)f(x(k)))z^{(k+1)} = P_S \left( x^{(k)} + \eta^{(k)} \nabla f(x^{(k)}) \right)

x(k+1)=PS(x(k)+α(z(k+1)x(k))+(1α)(x(k)x(k1)))x^{(k+1)} = P_S \left( x^{(k)} + \alpha \cdot (z^{(k+1)} - x^{(k)}) + (1 - \alpha) \cdot (x^{(k)} - x^{(k-1)}) \right)

  • η(k)\eta^{(k)} 第 k 次迭代的步长
  • α\alpha 调节动量项的影响,也就是先前的更新对当前更新的影响

步长选择(Step size selection):初始步长 η(0)=2ϵ\eta^{(0)} = 2\epsilon,在 NiterN_{iter} 次迭代中设置 nn 个检查点(w1,..,nw_{1,..,n})来检查步长是否需要变化。如果满足以下条件之一,则将步长减半

  1. 两个检查点之间有效的(即能够提高目标函数 f(x)f(x) 的函数值的)迭代次数比例小于 ρ\rho (0.75)

    i=wiwj11f(x(i+1))>f(x(i))<ρ(wjwj1)\sum_{i=w_i}^{w_j-1} \mathbf{1}_{f\left(x^{(i+1)}\right)>f\left(x^{(i)}\right)}<\rho \cdot\left(w_j-w_{j-1}\right)

  2. 两个检查点的步长相同,但目标函数在两个检查点时曾达到过的最大值(fmax(wi)f_{max}^{(w_i)})没有提升

    η(wj1)η(wj) and fmax(wj1)fmax(wj)\eta^{\left(w_{j-1}\right)} \equiv \eta^{\left(w_j\right)} \text { and } f_{\max }^{\left(w_{j-1}\right)} \equiv f_{\max }^{\left(w_j\right)}

最优点重启(Restarts from the best point):如果步长需要减半,则将此时的 x(wj+1)x^{(w_j +1)} 设置为 xmaxx_{max},即能够达到最大的目标函数值时自变量的值。

**Exploration vs Exploitation:**算法需要现在整个可行集 S\mathcal S (feasible set)中探索,再逐渐过渡到局部的优化。这种过渡通过逐渐减少步长和决定何时减少步长来实现。也就是较长的步长帮助探索整个可行域(Exploration),较小的步长帮助寻找局部最优解(Exploitation)。这样做的动机在于:

  • 较小的步长会导致目标函数的改进更频繁,但每次改进的幅度较小。

  • 随机重启 (random restarts) 在传统的 PGD 攻击中是有效的,说明了在整个输入空间中进行广泛探索的重要性。

实现以上思想的方法就是设定检查点,并将较优的检查点存储起来。检查点的设置逻辑为:

wj=pjNiterNiter,pj[0,1]w_j = \lceil p_jN_{iter} \rceil \leq N_{iter}, p_j \in [0,1]

pj+1=pj+max{pjpj10.03,0.06}p_{j+1} = p_j + \max\{p_j-p_{j-1} - 0.03, 0.06\}

也就是说,第一次设置检查点距离开始时是 0.22Niter0.22N_{iter},第二个检查点就是 0.19Niter0.19N_{iter} 次迭代以后。每次检查点设置的间隔要缩小 0.03,但最小不超过 0.060.06。这些参数都是固定的,所以 AutoAttack 的唯一参数是 NiterN_{iter}

Difference of Logits Ratio Loss (DLR)损失

在使用交叉熵损失的时候,对于模型 h=αgh = \alpha ggg 是原始模型,α\alpha 是一个常数,也就是将原始模型的所有 Logit 进行缩放),α\alpha 的不同会导致不同的攻击结果。然而,这些模型对于同一个输入都会产生相同的决策,故这种攻击结果依赖于 α\alpha 的情况是不合理的。而且较小的 α\alpha 还会导致梯度在反向传播的过程中梯度消失,进而导致 PGD 攻击方法的失效。

借鉴于 CW 损失 CW(x,y)=zy+maxiyzi\mathrm{CW}(x, y)=-z_y+\max _{i \neq y} z_i,作者提出了 DLR 和 Target-DLR 损失:

DLR(x,y)=zymaxiyzizπ1zπ3\operatorname{DLR}(x, y)=-\frac{z_y-\max _{i \neq y} z_i}{z_{\pi_1}-z_{\pi_3}}

Targeted-DLR(x,y)=zyztzπ1(zπ3+zπ4)/2\operatorname{Targeted-DLR}(x, y)=-\frac{z_y-z_t}{z_{\pi_1}-\left(z_{\pi_3}+z_{\pi_4}\right) / 2}

其中,ziz_i 表示对应类别的 logit,zπiz_{\pi _i} 表示第 ii 大的 logit。这样的损失具有偏移和缩放不变性(both shift and rescaling invariance),因为缩放时该缩放会同时体现在分母和分子之中,进而在最终的结果中互相抵消。

分母不用 zπ1zπ2z_{\pi_1}-z_{\pi_2} 是因为 zπ2z_{\pi_2} 代表着潜在的可能的对抗性输出,攻击的目的是尽可能地让 zπ2z_{\pi_2} 超过 zyz_y (如果分类正确,则 zy=zπ1z_y = z_{\pi_1}),所以如果分母用 zπ1zπ2z_{\pi_1}-z_{\pi_2} 的话,会导致 zπ2z_{\pi _2} 变大的时候分母变小,进而使 DLR 趋向于变小,与对抗攻击的目标相反。

在 Targeted-DLR 中使用 (zπ3+zπ4)/2\left(z_{\pi_3}+z_{\pi_4}\right) / 2 是为了让分母的变化更加稳定。

AutoAttack (AA)

Auto Attack 聚合了多种方法:

  1. APGDCEAPGD_{CE} 没有随机启动的 APGD 算法,使用损失函数 CE
  2. APGDDLRTAPGD_{DLR}^T 使用 Targeted-DLR 损失函数的 APGD 算法,针对9种类别(一般是除了正确类别外得分最高的 9 种类别)
  3. FABTFAB^T FAB 的有目标攻击版本,针对9种类别
  4. SquareAttackSquare Attack 一种黑盒攻击方法,5000 次查询(白盒攻击方法 100 次迭代)

之所以聚合多种方法是因为:

  • 现有的分类器会导致一些攻击失效,但至少有一种攻击是成功的
  • 尽管不同的攻击方法可能达到近似的攻击效果,但是他们攻击的点是不一样的

之所以采用一些有目标攻击的方法,是因为:

  • FAB 的有目标攻击版本更加高效。在 FAB 的无目标版本中,它会寻找正确类别相对于其他所有类别的决策边界,并从中选择最近的一个。这导致了 FAB 的无目标攻击在类别总数 KK 很大的时候,效率非常低下。而如果采用有目标攻击版本,并限制攻击时考虑的类别数,就可以让其效率与 KK 无关
  • 实验上结果确实更优