one pixel attack
2017年10月に発表された論文 One Pixel Attack for Fooling Deep Neural Networksで提案されたone pixel attackというAdversarial Examples(AEs)生成手法と論文の結果の紹介です。
one pixel attackは以下の画像のように一個のピクセルを変化させるだけでモデルに誤認識させる手法です。変化しているピクセルを見つけられますか?
余談ですがこの論文の著者は九州大学の方です。
one pixel attackの特徴
- モデル内部のパラメータなどを知ることができなくても、モデルの出力である予測値さえあれば攻撃することができる。すなわちBlackBoxなモデルにも使える手法。
- 一つのpixelしか変化させない。例えばFGSMは全てのピクセルを、JSMAは複数のピクセルを変更させている。
- 変化させる一つのピクセルはいくらでも変化して良い。つまりこのピクセルに関する変化は人間が知覚可能なものでも良い。
差分進化法
one pixel attackではevolutionary algorithms(EA, 進化的アルゴリズム)の一部であるDifferential evolution(DE, 差分進化)を用いています。
DEには以下の利点があります。
- 勾配などの内部パラメータを用いなくて良い。
- 勾配を利用する手法や貪欲探索法などに比べて大域最適解を得られやすい。ただし多様性を維持する方法や子供を生成する手法による。
- 出力である予測値さえ得られればいいので、どんなモデルにも使える。
- これは逆にハードラベル、つまり確率を出力せずに単にクラスラベルだけを返すモデルでは使えないということでもあります。
具体的な手順
大枠
- 後述する初期化を用いて解の候補となる値$x_i=(x,y,R,G,B)$を400個生成する。
- 後述する終了条件を満たすまで以下を繰り返す。
- $x_i(i=1,\cdots,400)$それぞれに対して以下を行う。
- 後述する生成式を用いて子供を生成する。
- 後述する更新式を用いて$x_i$を更新する。
- $x_i(i=1,\cdots,400)$それぞれに対して以下を行う。
- 最も適合度の高い個体を解とする。
初期化
- 位置$(x,y)$: 以下の一様分布から生成されます。これらの数字はそれぞれの画像の縦・横のサイズから来ています。
- CIFAR-10なら$U(1,32)$
- ImageNetなら$U(1,227)$
- RGB: ガウス分布(正規分布)から生成される。
終了条件
イテレーションの回数が100回に達する、または以下の事象が起こればイテレーションを途中で中止します。
- ターゲットクラス(騙した結果、予測される偽クラス)を決めていないなら(non-target attack), 正しいクラスの確率が5%以下になったときにイテレーションを中止します。
- 論文の中ではImageNetデータセットに対してこれを行っています。
- ターゲットクラスを決めているのなら、そのクラスの確率が90%を超えた時点でイテレーションを中止します。
- 論文の中ではKaggle CIFAR-10データセットに対してこれを行っています。
生成式
新たな子供の生成は以下のように計算されます。
$$ v_i(g)=x_{r1}(g)+F\cdot(x_{r2}(g)-x_{r3}(g)) $$
$v_i(g)$は新たに生成される子供です。$g$はgenerationで各世代を表しています。$r1, r2, r3$はそれぞれランダムに選ばれる異なる数です。$F$はスケーリング係数で論文の中では$0.5$を用いています。
更新式
$$ x_i(g+1) = \begin{cases} v_i(g)&(v_i(g)の方がx_i(g)より適応度が高ければ)\\ x_i(g)&(x_i(g)の方がv_i(g)より適応度が高ければ) \end{cases} $$
適応度
モデルの出力である確率値を用います。例えば論文では以下のようになっています。
- target attackならターゲットのクラスの確率値, つまり高い方が良い。
- non-target attackなら真のクラスの確率値, つまり低い方が良い。
結果
実験設定や注意書き
- Kaggle CIFER10
- 対象ネットワーク: All convlution network, network in network, VGG16
- 無作為に500枚の画像を抽出
- Kaggle CIFER-10ではオリジナルのCIFER-10に色々な変更を加え、より質を悪くしている。中にはクラスが間違っているものもある。これを用いたのはより現実的な状況を想定しているため。
- 実はtarget attackしか行っていない。non-target attackはtarget attackで他の何らかのクラスに分けられれば成功したとみなせるため。
- オリジナルCIFER10
- ネットワークは上に同じ
- non-targetに500枚, target attackに300枚用いた
- オリジナルのCIFER-10はKaggle CIFER-10と比べてデータの質が良いので、モデルの精度が上がり、より攻撃が難しくなる
- より良い実装のためにネットワークの構造を少し変更している。具体的には、NiNでは第2の平均プーリング層を削除し、All Convについては、第1層のバッチ正規化を削除した。
- ImageNet
表4
kaggle CIFER 10とImageNetにおける結果です。各行の指標は以下の定義です。
- OriginAcc: 自然画像テストデータセットに対する正解率
- Targeted/Non-targeted: 各攻撃における成功率
- Confidence: target classにおける平均確信度
ImageNetとBVLC AlexNetの組み合わせに対してはtarget attackを行なっていないので、空白になっています。またkaggle CIFER10と3つのネットワークの組み合わせに対して、non-targeted attackを評価する際はtargeted attackを行なって自分以外のクラスになっているかどうかを判定しているので、targeted attackの成功率よりも値は必ず大きくなります。ImageNetにおける確信度はnon-targetで本来のクラス以外に分類されたとき、そのクラスの確率です。これは低いように感じますが、他の999クラスは80%/999クラス程度の確信度なので相対的に大きなものと言えます。
表5
Kaggle CIFER10における3, 5 pixel attackの結果です。ピクセル数を増やすとtarget attackの成功率が大幅に上がります。3 pixelではAllConv, 5 pixelではNiNに対して実験を行なっています。
表6
AvgEvaluationはAEsを生成するのに行なった平均的な評価回数です。差分進化法による個体数は400, 最大iteration回数は100回なので上限は40,000です。各評価回数は個体数400で割ると40, 31, 50, 64回となり、これはイテレーション回数となります。
AvgDistortionは一つのchannelにおける一つのピクセルの変更量です。例えば元のピクセルの値が10で変更後が130なら変更量は120です。RGBなのでこれらは平均化されます。
表7
kaggle CIFER10においてランダムな探索とDEを比べたものです。VGG以外はランダムサーチでもそこまで性能が悪くないですね。
表8
オリジナルのCIFER10での結果です。元々の正解率が省かれていますが、これは表4とほぼ同じ結果になったからです。Non-targeted1はtarget attackから算出された確率, Non-targeted2はnon-target attackから算出された確率です。オリジナルのCIFER-10では精度の高さから攻撃が難しくなり、結果はKaggleの方と比べて悪くなっています。
表9
他のAdversarial Attackと比較した結果です。変更するピクセル数が少なくてもそこまで悪くないattack精度を出せています。
図5
kaggle CIFER10において、そのクラスへと騙せた画像の割合です。
図6, 7
kaggle CIFER10において、赤(original)から青(target)への攻撃が成功した数です。これにはいくつかの特徴が見られます。
- 猫から犬は簡単だが、猫から車は難しい
- ほぼ対称行列
図8
kaggle CIFER10において、各クラスをoriginal(黒), target(グレー)としたときに成功した数です。それぞれのクラスをoriginal, targetedとしたときの成功画像の数はほぼ同じくらいになる。これはヒートマップが対称行列っぽくなることと同じ話です。ただし、NiNにおけるクラス8, AllConv, 1 pixelでのクラス4などいくつかの例外はあります。
これらは境界線と画像の関係性に依るものだと考えられます。境界が十分に広ければ境界から離れたところに画像は存在し、そこからAEを作ることは困難であることが予想されます。境界が細長く、その中に画像が存在していればそこからAEを作ることは簡単ですが、そこに向かって作るのは困難です。
敵対画像を作りやすいクラスは悪用することが容易ですが、実際、これは各ネットワークに依存するので悪用することは難しいでしょう。
図9
いくつかの稀なケースではありますが、自分以外の全ての9クラスへ分類可能な画像を作ることもできました。ネットワークはAllConvで, ほとんど全て100%に近い確信度となっています。
図10
適合度の変化についての記録です。赤のラインは平均です。ピクセル攻撃をした画像をランダムに30枚(kaggle CIFER), 15枚(ImageNet)取ってきて、線を描いています。2世代程度で急激に変化する場合もあれば滑らかに変化する場合もあることがわかります。
図11
図5のCIFER-10版です。
図12, 13
オリジナルのCIFER10におけるoriginal-targetペアに関するtarget attackの結果を見てみます。赤が元のクラス、青が騙した先のクラスです。
興味深いのはdog (5th)-cat(3rd)のような騙しやすいペアが存在していることです。犬を猫に、猫を犬に騙すことが他のペアと比べて容易なのは直観的にも分かり易いです。ただship (8th)-airplane (0th)のペアは船を飛行機に騙すことは簡単なのですが、逆は成り立たないので一概に何かを言うことは難しそうです。
図14, 15
オリジナルのCIFER10における「このクラスから他のクラスに騙すことができた回数(下図黒)」「他のクラスからこのクラスに騙すことができた回数(下図グレー)」を見ます。画像の大きさが合ってないのは元論文と同じです。...何で?
この結果からも「攻撃のしやすいクラス」と「攻撃のしにくいクラス」が存在することがわかります。
Discussion
- 境界付近に位置するデータ点は数多く存在しているかもしれない
- FGSMの論文では多次元のピクセルに対する摂動が蓄積して出力に大きな変化をもたらすと言われているが、必ずしもそのような仕組みではないかもしれない
- より多くの試行回数(iteration, generation), またはより多くの個体数によって攻撃の精度は向上するかもしれない
- DEの代わりにCovariance Matrix Adaptation Evolution Strategyなどを使ってもいいかもしれない