@article{athalye2018obfuscated,
title={Obfuscated Gradients Give a False Sense of Security: Circumventing Defenses to Adversarial Examples},
author={Athalye, Anish and Carlini, Nicholas and Wagner, David},
journal={arXiv: Learning},
year={2018}}
概
由于有很多defense方法都是基于破坏梯度(不能有效计算梯度, 梯度爆炸, 消失), 但是作者提出一种算法能够攻破这一类方法, 并提议以后的defense方法不要以破坏梯度为前提.
主要内容
(f(cdot)): 模型;
(f(x)_i): 样本(x)为类别(i)的概率;
(f^j(cdot)): 第(j)层;
(f^{1..j}(cdot)): 第(1)到(j)层;
(c(x)): (arg max_i f(x)_i);
(c^*(x)): 真实标签.
Obfuscated Gradients
- Shattered Gradients: 一些不可微的defense, 或者一些令导数不存在的defense造成;
- Stochastic Gradients: 一些随机化的defense造成;
- Exploding & Vanishing Gradients: 通常由一些包括多次评估的defense造成.
BPDA
特例
有很多方法, 会构建一个不可微(或者其导数"不好用")的函数(g), 然后用模型(f(g(x)))替代(f(x)), 从而防御一些基于梯度的攻击方法, 而且这类方法往往要求(g(x) approx x).
这类防御方法, 可以很简单地用
替代, 从而被攻破(如果我们把(g(x))视为模型的第1层, 那我们实际上就是攻击第二层).
一般情形
假设(f^i(x))(即第i层)是不可微, 或者导数“不好用", 则我们首先构造一个可微函数(g(x)), 使得(g(x) approx f^i(x)), 在反向传递导数的时候(注意只在反向用到(g)), 用( abla_x g)替代( abla f^i(x)).
注: 作者说在前向也用(g(x))是低效的.
EOT
这类方法使用于攻破那些随机化的defense的, 这类方法往往会从一个变换集合(T)中采样(t), 并建立模型(f(t(x))), 如果单纯用( abla f(t(x))) 来攻击效果不好, 可以转而用( abla mathbb{E}_{t sim T} f(t(x)) = mathbb{E}_{t sim T} abla f(t(x)))替代.
Reparameterization
重参用于针对梯度爆炸或者消失的情况, 因为这种情况往往出现于(f(g(x))), 而(g(x))是对(x)的一个多次评估(所以(f(g(x)))可以理解为一个很深的网络).
策略是利用构建(x=h(z)), 并且满足(g(h(z))=h(z)) (咋看起来很奇怪, 看了下面的DefenseGAN就明白了).
利用(f(h(z))), 我们找到对应的对抗样本(h(z_{adv})).
具体的案例
Thermometer encoding
这里的( au)是针对样本每一个元素(x_{i,j,c})的, ( au:x_{i,j,c} ightarrow mathbb{R}^l):
只需令
Input transformations
包括:
image cropping, rescaling, bit-depth reduction, JPEG compression, image quilting
既包括随机化又包括了不可微, 所以既要用EPDA, 也要用EOT.
LID
LID能够防御
的攻击的主要原因是由于该函数陷入了局部最优. 因为LID高的样本不都是对抗样本, 也有很多普通样本.
忽视LID, 用原始的L2attack就能够有效攻破LID.
Stochastic Activation Pruning
SAP实际上是dropout的一个变种, SAP会随机将某层的(f^i)的某些元素突变为0(其概率正比于元素的绝对值大小).
这个方法可以用EOT攻破, 即用(sum_{i=1}^k abla_xf(x))来代替( abla_x f(x)).
Mitigating through randomization
这个方法的输入是(229 imes 229)的图片, 他会被随机变换到(r imes r)大小, (rin[229, 331)), 并随机补零使得其大小为(331 imes 331).
同样, 用EOT可以攻破.
PixelDefend
pass
DenfenseGAN
对于每一个样本, 首先初始化(R)个随机种子(z_0^{(1)}, ldots, z_0^{(R)}), 对每一个种子, 利用梯度下降((L)步)以求最小化
其中(G(z))为利用训练样本训练的生成器.
得到(R)个点(z_*^{(1)},ldots, z_*^{(R)}), 设使得(DGAN)最小的为(z^*), 以及(hat{x} = G(z^*)), 则(hat{x})就是我们要的, 样本(x)在普通样本数据中的投影. 将(hat{x})喂入网络, 判断其类别.
这个方法, 利用梯度方法更新的难处在于, (x ightarrow hat{x})这一过程, 包含了(L)步的内循环, 如果直接反向传梯度会造成梯度爆炸或者消失.
所以攻击的策略是:
找到(z_{adv}), 于是(x_{adv}=G(z_{adv})).
注意, 通过这个式子能找到对抗样本说明, 由训练样本训练生成器, 生成器的分布(p_G), 实际上并不能能够撇去对抗样本.