PGDとAdversarial Examples
2019年の論文で紹介されたPGD(Projected Gradient Descent)を用いたAEs(Adversarial Examples)生成手法を紹介します。
サーベイ論文や解説系のウェブサイトではあたかもPGDをAEsの生成手法のように記述してますが、正確にはPGDは最適化手法であり、SGDの仲間みたいなものです。
前提知識
$L^1$ノルム
$$ ||\boldsymbol{x}||_1=|x_1|+|x_2|+\cdots+|x_n| $$
$L^2$ノルム
$$ ||\boldsymbol{x}||_2=\sqrt{x_1^2+x_2^2+\cdots+x_n^2} $$
$L^\infty$ノルム
$$ ||\boldsymbol{x}||_\infty=\max(|x_1|, |x_2|, \cdots, |x_n|) $$
勾配降下法(gradient descent)
制約なし最適化問題を解く手法です。以下のような問題
$$ \min_{\boldsymbol{x}}f(\boldsymbol{x}) $$
を解くために以下の計算を収束するまで行います。実装上は100回繰り返したら終了というようにすることが多いです。
$$ \boldsymbol{x}_{k+1}=\boldsymbol{x}_k-\epsilon\nabla f(\boldsymbol{x}_k) $$
projected gradient descent
勾配降下法(gradient descent)と違って制約ありの最適化問題を解く手法です。つまり解く問題は以下のようなものです。
$$ \min_{\boldsymbol{x}}f(\boldsymbol{x})\quad\text{subject to}\quad \boldsymbol{x}\in Q $$
これは$x$を領域$Q$内に収まるように動かし、$f(x)$を最小化する問題と言えます。勾配降下法と違って得た解が領域$Q$内に収まっているか確認する必要が出てきます。そこで以下のような計算を考えます。
\begin{align} \boldsymbol{y}_{k+1}&=\boldsymbol{x}_k-\epsilon\nabla f(\boldsymbol{x}_k)\\ \boldsymbol{x}_{k+1}&=\arg\min_{\boldsymbol{x}\in Q}||\boldsymbol{y}_{k+1}-\boldsymbol{x}|| \end{align}
1番目の式は先ほどと同じですが、新たに2番目の式が出てきました。例えば$\boldsymbol{y}_{k+1}$が領域$Q$内に収まっているとき、2番目の式は$\boldsymbol{x}=\boldsymbol{y}_{k+1}$で最小値(0)を取るので$\boldsymbol{x}_{k+1}=\boldsymbol{y}_{k+1}=(1番目の式)$となり、勾配降下法と変わりません。しかし$\boldsymbol{y}_{k+1}$が領域$Q$外に出てしまったとき、$x$は領域$Q$内で出来るだけ$\boldsymbol{y}_{k+1}$に近い値を取るような場所となります。この部分がprojected(投影)と呼ばれる由縁です。
PGDでAEsを作る
さて上のprojected gradient descent, 略してPGDを用いれば元画像に与える影響を一定の値以下にしたまま新しく作るAEsの損失を最大化できそうです。
数式で考えると以下を繰り返すことになります。
$$ \boldsymbol{x}_{k+1}=P(\boldsymbol{x}_k+\alpha\nabla_{\boldsymbol{x}_k}J(\theta, \boldsymbol{x}_k, y)) $$
ここで$P$は領域内に投影する関数, $J$は損失関数, $\theta$はモデルのパラメータ, $y$は正しいクラスです。
先ほどの式と違って$\boldsymbol{x}_k$に勾配が足されています。これはAEsを作るためには損失を増加させたいので、勾配降下法、つまり損失を減少させる先ほどの式とは符号を逆にしなければならないからです。ここら辺はFGSMと同じなのでそちらも参考にしていただければ幸いです。
制限する領域は任意の$L^p$ノルムを用いて良いのですが、一般に$L^2$か$L^\infty$のどちらかを使うことが多いです。
また勾配上昇を行う手法は何でも大丈夫です。なのでSGDでもAdamでも好きなものが使えます。