概
作者改进了PGD攻击方法, 并糅合了不同种类的攻击方法于一体, 使得AA的估计更为有效可靠. 特别是不需要调参.
主要内容
Auto-PGD
Auto-PGD, 其最大的改进的地方就是不需要调节参数(其实作者自己调得比较好啦). 普通的PGD:
x
(
k
+
1
)
=
P
S
(
x
(
k
)
+
η
(
k
)
∇
f
(
x
(
k
)
)
)
,
x^{(k+1)} = P_S (x^{(k)} + \eta^{(k)}\nabla f(x^{(k)})),
x(k+1)=PS(x(k)+η(k)∇f(x(k))),
其中
P
P
P是投影算子,
η
\eta
η 是学习率,
f
f
f是损失函数.
Momentum
z ( k + 1 ) = P S ( x ( k ) + η ( k ) ∇ f ( x ( k ) ) ) x ( k + 1 ) = P S ( x ( k ) + α ⋅ ( z ( k + 1 ) − x ( k ) ) + ( 1 − α ) ⋅ ( x ( k ) − x ( k − 1 ) ) ) . z^{(k+1)} = P_S (x^{(k)}+\eta^{(k)}\nabla f(x^{(k)})) \\ x^{(k+1)} = P_S(x^{(k)}+\alpha \cdot (z^{(k+1)}-x^{(k)})+(1-\alpha) \cdot (x^{(k)}-x^{(k-1)})). z(k+1)=PS(x(k)+η(k)∇f(x(k)))x(k+1)=PS(x(k)+α⋅(z(k+1)−x(k))+(1−α)⋅(x(k)−x(k−1))).
注: 作者选择 α = 0.75 \alpha=0.75 α=0.75
Step Size
首先确定总的迭代次数 N i t e r N_{iter} Niter, 然后确定一些检查的结点 w 0 = 0 , w 1 , ⋯ , w n w_0=0, w_1, \cdots, w_n w0=0,w1,⋯,wn, 在每一个检查结点检查如下条件
-
∑ i = w i − 1 w i − 1 1 f ( x ( i + 1 ) > f ( x ( i ) ) ) < ρ ⋅ ( w j − w j − 1 ) \sum_{i={w_{i-1}}}^{w_{i}-1} 1_{f(x^{(i+1)}> f(x^{(i)}))}< \rho \cdot (w_j - w_{j-1}) ∑i=wi−1wi−11f(x(i+1)>f(x(i)))<ρ⋅(wj−wj−1);
-
η w j − 1 ≡ η w j \eta^{w_{j-1}}\equiv \eta^{w_j} ηwj−1≡ηwj and f m a x ( w j − 1 ) ≡ f m a x ( w j ) . f_{max}^{(w_{j-1})}\equiv f_{max}^{(w_j)}. fmax(wj−1)≡fmax(wj).
其中
f
m
a
x
(
k
)
f_{max}^{(k)}
fmax(k)是前
k
k
k个结点前的最高的函数值, 若其中条件之一满足, 则对之后的迭代的学习率减半, 即
η
(
k
)
:
=
η
(
w
j
)
/
2
,
∀
k
=
w
j
+
1
,
…
w
j
+
1
.
\eta^{(k)}:= \eta^{(w_j)} /2, \forall k=w_j+1, \ldots w_{j+1}.
η(k):=η(wj)/2,∀k=wj+1,…wj+1.
注: 学习率 η ( 0 ) = 2 ϵ \eta^{(0)}=2\epsilon η(0)=2ϵ.
- 条件1是为了检查这一阶段的迭代是否有效(即损失是否升高的次数), 这里作者选择 ρ = 0.75 \rho=0.75 ρ=0.75;
- 条件二如果成立了, 说明这一阶段相较于之前的阶段并没有提升, 所以需要减半学习率.
注: 一旦学习率减半了, 作者会令 x ( w j + 1 ) : = x m a x x^{(w_j+1)}:=x_{max} x(wj+1):=xmax, 从最好的结果处restart.
剩下一个问题是, 如何选择
w
i
w_i
wi, 作者采取如下方案
w
j
=
[
p
j
N
i
t
e
r
]
≤
N
i
t
e
r
p
j
+
1
=
p
j
+
max
{
p
j
−
p
j
−
1
−
0.03
,
0.06
}
,
p
0
=
0
,
p
1
=
0.22.
w_j = [p_jN_{iter}] \le N_{iter} \\ p_{j+1} = p_j + \max \{p_j - p_{j-1} - 0.03, 0.06\}, p_0=0, p_1=0.22.
wj=[pjNiter]≤Niterpj+1=pj+max{pj−pj−1−0.03,0.06},p0=0,p1=0.22.
损失函数
一般来说, 大家用的是交叉熵, 即
C
E
(
x
,
y
)
=
−
log
p
y
=
−
z
y
+
log
(
∑
j
=
1
K
e
z
j
)
,
\mathrm{CE}(x, y) = -\log p_y = -z_y + \log (\sum_{j=1}^K e_{z_j}),
CE(x,y)=−logpy=−zy+log(j=1∑Kezj),
其梯度为
∇
x
C
E
(
x
,
y
)
=
(
−
1
+
p
y
)
∇
x
z
y
+
∇
i
≠
y
p
i
∇
x
z
i
,
\nabla_x \mathrm{CE}(x, y) = (-1 + p_y) \nabla_x z_y + \nabla_{i\not=y} p_i \nabla_xz_i,
∇xCE(x,y)=(−1+py)∇xzy+∇i=ypi∇xzi,
若
p
y
p_y
py比较接近于
1
1
1, 也就是说分类的置信度比较高, 则会导致梯度消失, 而置信度可以单纯通过
h
=
α
g
h=\alpha g
h=αg来提高, 即这个损失对scale是敏感的. 替代的损失使用DLR损失
D
L
R
(
x
,
y
)
=
−
z
y
−
max
i
≠
y
z
i
z
π
1
−
z
π
3
,
\mathrm{DLR} (x, y) = -\frac{z_y -\max_{i \not=y}z_i}{z_{\pi_1}-z_{\pi_3}},
DLR(x,y)=−zπ1−zπ3zy−maxi=yzi,
其中
π
i
\pi_i
πi是按照从大到小的一个序. 这个损失就能避免scale的影响, 同时还有一个target版本
T
a
r
g
e
t
e
d
−
D
L
R
(
x
,
y
)
=
−
z
y
−
z
t
z
π
1
−
(
z
π
3
+
z
π
4
)
/
2
.
\mathrm{Targeted-DLR}(x, y) = - \frac{z_y-z_t}{z_{\pi_1}- (z_{\pi_3}+z_{\pi_4})/2}.
Targeted−DLR(x,y)=−zπ1−(zπ3+zπ4)/2zy−zt.
AutoAttack
AutoAttack糅合了不同的攻击方法:
- A P G D C E \mathrm{APGD_{CE}} APGDCE
- A P G D D L R \mathrm{APGD_{DLR}} APGDDLR
- F A B \mathrm{FAB} FAB
- S q u a r e A t t a c k \mathrm{Square \: Attack} SquareAttack: black-box