概
作者改进了PGD攻击方法, 并糅合了不同种类的攻击方法于一体, 使得AA的估计更为有效可靠. 特别是不需要调参.
主要内容
Auto-PGD
Auto-PGD, 其最大的改进的地方就是不需要调节参数(其实作者自己调得比较好啦). 普通的PGD:
其中(P)是投影算子, (eta) 是学习率, (f)是损失函数.
Momentum
注: 作者选择 (alpha=0.75)
Step Size
首先确定总的迭代次数(N_{iter}), 然后确定一些检查的结点(w_0=0, w_1, cdots, w_n), 在每一个检查结点检查如下条件
-
(sum_{i={w_{i-1}}}^{w_{i}-1} 1_{f(x^{(i+1)}> f(x^{(i)}))}< ho cdot (w_j - w_{j-1}));
-
(eta^{w_{j-1}}equiv eta^{w_j}) and (f_{max}^{(w_{j-1})}equiv f_{max}^{(w_j)}.)
其中(f_{max}^{(k)})是前(k)个结点前的最高的函数值, 若其中条件之一满足, 则对之后的迭代的学习率减半, 即
注: 学习率(eta^{(0)}=2epsilon).
- 条件1是为了检查这一阶段的迭代是否有效(即损失是否升高的次数), 这里作者选择( ho=0.75);
- 条件二如果成立了, 说明这一阶段相较于之前的阶段并没有提升, 所以需要减半学习率.
注: 一旦学习率减半了, 作者会令(x^{(w_j+1)}:=x_{max}), 从最好的结果处restart.
剩下一个问题是, 如何选择(w_i), 作者采取如下方案
损失函数
一般来说, 大家用的是交叉熵, 即
其梯度为
若(p_y)比较接近于(1), 也就是说分类的置信度比较高, 则会导致梯度消失, 而置信度可以单纯通过(h=alpha g)来提高, 即这个损失对scale是敏感的. 替代的损失使用DLR损失
其中(pi_i)是按照从大到小的一个序. 这个损失就能避免scale的影响, 同时还有一个target版本
AutoAttack
AutoAttack糅合了不同的攻击方法:
- (mathrm{APGD_{CE}})
- (mathrm{APGD_{DLR}})
- (mathrm{FAB})
- (mathrm{Square : Attack}): black-box