敵対的摂動入門

数ヶ月卒論で取り組んだ程度の知識で恐縮ですが、本記事ではadversarial perturbationの研究の全体像が把握できることを目指します。敵対的摂動はadversarial perturbationの直訳で(必要にかられて)僕が勝手に呼んでいるだけの用語です。この記事はなるべく短くまとめますが、需要があればもう少し長い記事も書くかもしれないです。

index

敵対的摂動とは –

有名なのは下の図ですね。出典:Explaining and Harnessing Adversarial Examples. adv_ex.png 概要をざっくり説明すると、人の目には見えないノイズを加えることでネットワークの出力をコントロールできてセキュリティ上やばいという話です。 ガードレールに自動運転者を突っ込ませるとかstop signを無視させるとか自動検知システムをすり抜けてライフルを持ち込むとかですかね。特にネットワークのパラメータも構造もわかっていないような状況でもこれが作れてしまうというところに危険があります。 定義します。ネットワーク$F$, 入力 $X$, 正解ラベル $t_X$, ネットワークの出力 $F(X)$ (これはベクトルでargmaxが予測クラス), あるdivergence $D$に対して$F$, $X$, $D$, 大きさ$\delta$に関するadversarial perturbation $\epsilon$は \(\epsilon\text{, s.t. } \text{argmax}F(X + \epsilon) \neq t_X \land D(X, X' + \epsilon) \leq \delta\)として定義されます。もっと拡張した定義だと、あるロス $J$を用いて、 \(\underset{\epsilon}{\text{argmax}} J(F, X + \epsilon, t_X) \text{ subject to } D(X, X + \epsilon) \leq \delta\)などが使われることもあります。統一された定義はないです。画像認識をターゲットにするなら、あるサイズ以下のノイズであって識別器の予測を誤らせるもの、と定義するのが自然です。ロスを使った定義だと$0$-$1$ lossに対応します。 Adversarial perturbationという用語より、ノイズの乗った入力をさすAdversarial Exampleの方がよく出てくる呼び名な気がします。こちらで調べた方がググりやすそう。

ブログ記事

敵対的摂動を作る – attackerは以下の最適化問題を解きます。 \(\underset{\epsilon}{\text{argmax}} J(F, X + \epsilon, t_X) \text{ subject to } D(X, X + \epsilon) \leq \delta\)<p>例えば、

  • $J$としてcross-entropy lossをとって、通常のneural networkの最適化のように入力$X$に対してback-propで勾配を求めます。
  • $X$を勾配方向に(lossが大きくなる方向に)一定の大きさ動かします。

これで$\ell_2$-normで制限された敵対的摂動を作ることができます。$X$の勾配を得た時に、それぞれの要素の符号のみに着目して全要素を一定の大きさ動かすことで$\ell_\infty$-normで制限された敵対的摂動を作ることもできます。これはFast Gradient Sign Method (FGSM)と呼ばれ、上のパンダの例でも使われている攻撃手法です。 attackには様々な変種がありますが、基本的にはロスの設計を変えたり最適化の手法を変えているだけです。 最近は上記の例のようにone-stepのみ踏むものはあまり使われず、何ステップもかけて最適化する方が一般的です。 有名なものへのポインタだけ置いておきます。

Tensorflowなどであれば自分でコードを書かなくとも色々なattackを試すことができます。

敵対的摂動から守る –

基本的にはかなり難しいです。Capacityの大きいモデルを使いつつ敵対的摂動を加えた画像をトレーニングデータに混ぜる, Adversarial Trainingと呼ばれる手法がほぼ唯一効果を確証できる手法だと思います。ただし敵対的摂動を作るオーバーヘッドによってトレーニングはかなり遅くなるので、大学での研究でやるには辛いところがあります。 Adversarial Trainingに関してとりあえず読んでおきたい論文を2つあげておきます。

SOTAとされているのは次の論文(これもadv. training)です。

適切にアタックとハイパパラメータを選べばどんな手法もかねがねdefenseとして効果的であるように見せることができるのでSOTAの定義は難しいですが、上の論文でrobustになることは間違いないかと思います。clean dataに対する精度は落ちます。 defenseを目的とした論文ではないですが、Virtual Adversarial Trainingという手法を知らない人は以下は読んでおいた方が良いです。

defense系の研究の危険なところは本当にrobustになっているのかわからないところにあります。少し攻撃の方法を変えると実は全然robustになっていないことが発覚する、ということが歴史上何度も繰り返されています(defenseの歴史概説)。最近だとICLR2018に採択されたdefense手法のうち7つは論文に書かれているようなrobustnessをほとんど達成できていないということを指摘する論文が採択から3日以内に出されて話題になりました。

以上です。わかりづらかったところやもう少し解説が欲しいところは@ytsmilingにmentionでも飛ばしてください。

Appendix

変わり種のattackなど –

defenseの歴史概説 – もっとも有名なdefenseはdefensive distillationで、入力データ点での勾配が小さくなるようにすることを目的としています。FGSMなどを見るとモチベーションはわかりやすいと思います。これは一見すごく強いdefenseに見えたのですが、Carliniさんに破られました。データ点1点での勾配やHessianを制御するだけでは限界があるようです。 今成功を納めているように見えるadversarial trainingも100%良いとは言い切れない歴史を抱えています。例えばKurakinさんはFGSMでadv. trainingしたモデルがperturbationなしのデータよりもFGSMでperturbされたデータに対してより高い精度を出しうることを観測しました(label leaking)。言ってしまえばattackに対するoverfitです。Perturbationの生成に正解ラベルを使わない、複数ステップを使うattackでadv. trainingする、などでこれは防げるとされています。しかし、そもそもFGSMに対するlabel leakingも大規模実験で初めて明らかになったものなので、実験規模が十分に大きくないだけで実際には他のattackでもoverfitしているという可能性はあると思います。FGSMでadv. trainingしたものに関しては、他にも先にrandom noiseを載せてからFGSMを適用するようにするとattackの成功率が上がるといったことも観測されています。Virtual adversarial trainingを適用したモデルも基本的には同じです。最近読んでおくべきadv. tariningの手法といえばgeneralization errorの形で理論保証を与えたこれですかね。 入力にdenoisingを入れたりadversarial perturbationを加えられたものを識別することでdefenseする論文も無数に出ていますが、効果は不確かなように思います(, )。 FGSMでしか評価していないdefense論文は特に危険です。 他に気をつけるべきものとしては、MNISTだけで評価するのはあぶないとか(よくなかった例(v2で少し修正済み))。Carliniさんが怒るので気をつけたいところです。 最近だとICLR 2018のconference trackに評価が不十分なdefense論文が大量に投稿され、最終的にacceptされたもののうち7つがacceptから3日以内にhackされたことで話題になりました。これもCarliniさんがまたいつもの手法でいつも通りhackした結果です。歴史。 attackにしてもdefenseにしても、それが真に強いことを主張することは通常の人間がアクセスできる計算リソースでは難しくなっていると思います。 一方で、結局識別器はどのくらい小さいノイズで騙されうるのか、理論的にどこまでrobustnessを保証できるのか、などの話題は比較的海が青かったので、僕の卒論ではそのあたりをやりました。おそらくこれまでに可能と思われていた範囲よりは随分大きい保証を与えられているかと思います。ただし、やっていることはネットワークの表現力を強く制限することで無理やり保証を与えるというものなので、本質的解決につながるかは怪しいですね。