
攻撃者が1つのピクセルの色のみを変更し、予測の確率のみを見ることができる場合、深いニューラルネットワークが画像を誤分類させるのはどれほど簡単ですか?とても簡単です。多くの場合、攻撃者は、ネットワークに必要な回答を返すことさえできます。
次のプロジェクトは、「深いニューラルネットワークを欺くための1つのピクセル攻撃」のケラスの再実装とチュートリアルです。論文の公式コードはここにあります。
この攻撃では、CIFAR10データセットを使用します。データセットのタスクは、10のカテゴリのうち1つ(鳥、鹿、トラックなど)で32x32ピクセル画像を正しく分類することです。ブラックボックス攻撃には、ニューラルネットワークによって出力される確率ラベル(各カテゴリの確率値)のみが必要です。ピクセルを選択して特定の色に変更することにより、敵対的な画像を生成します。
微分進化(DE)と呼ばれる進化的アルゴリズムを使用することにより、ニューラルネットワークの分類の信頼(確率)を最小限に抑えるために敵対的な画像を繰り返し生成できます。

クレジット:Pablo R. Mierのブログ
まず、ランダムピクセルを変更し、ニューラルネットワークを介して画像を実行するいくつかの敵対サンプルを生成します。次に、以前のピクセルの位置と色を組み合わせて、それらからさらにいくつかの敵対的なサンプルを生成し、ニューラルネットワークを介して新しい画像を実行します。ネットワークの信頼性を最後のステップから低下させたピクセルがある場合は、現在の最も既知のソリューションとしてそれらを置き換えます。これらの手順を繰り返して、いくつかの反復を行います。その後、最後のステップで、ネットワークの信頼を最も減らした敵対的なイメージを返します。成功すれば、自信が大幅に減少するため、新しい(誤った)カテゴリが最も高い分類信頼度になりました。
成功した攻撃の例については、以下を参照してください。

GPUが必要ですか、それとも読みたいですか? Google Colabで最初のチュートリアルノートブックをご覧ください。
チュートリアルでローカルでコードを実行するには、Keras( tensorflow-gpu )で実行するのに適した専用のGPUをお勧めします。 Python 3.5+が必要です。
git clone https://github.com/Hyperparticle/one-pixel-attack-keras
cd ./one-pixel-attack-keraspip install -r ./requirements.txtjupyter notebook ./one-pixel-attack.ipynbモデルをトレーニングするには、 train.pyを実行します。モデルは、各エポックの後にnetworks/modelsディレクトリにチェックポイント(保存)されます。
たとえば、200エポックと128のバッチサイズでレストネットをトレーニングするには:
python train.py --model resnet --epochs 200 --batch_size 128攻撃を実行するには、 attack.pyを実行します。デフォルトでは、これはデフォルトパラメーターを使用してすべてのモデルを実行します。テストするモデルの種類を指定するには、 --modelを使用します。
python attack.py --model densenet capsnet現在利用可能なモデルは次のとおりです。
lenet -LENET、最初のCNNモデルpure_cnn畳み込みレイヤーだけのnnnet_in_netネットワーク内のネットワークresnet画像認識のための深い残留学習densenet - 密に接続された畳み込みネットワークwide_resnet広い残留ネットワークcapsnetカプセル間の動的ルーティングさまざまなモデルでいくつかの実験を実行した後の予備的な結果。各実験は100の敵対的な画像を生成し、攻撃の成功率、つまり、モデルが画像の総数にわたって画像を誤分類することに成功した画像の比率を計算します。特定のモデルでは、画像で変更される可能性のあるピクセルの数に基づいて複数の実験が実行されます(1,3、または5)。微分アルゴリズムは、人口サイズ400、最大反復カウント75で実行されました。
1,3,5ピクセルの摂動に対する攻撃(100サンプル)
| モデル | パラメーター | テスト精度 | ピクセル | 攻撃の成功(魅力のない) | 攻撃の成功(ターゲット) |
|---|---|---|---|---|---|
| レネット | 62K | 74.9% | 1 | 63.0% | 34.4% |
| 3 | 92.0% | 64.4% | |||
| 5 | 93.0% | 64.4% | |||
| 純粋なCNN | 1.4m | 88.8% | 1 | 13.0% | 6.67% |
| 3 | 58.0% | 13.3% | |||
| 5 | 63.0% | 18.9% | |||
| ネットワーク内のネットワーク | 970k | 90.8% | 1 | 34.0% | 10.0% |
| 3 | 73.0% | 24.4% | |||
| 5 | 73.0% | 31.1% | |||
| resnet | 470k | 92.3% | 1 | 34.0% | 14.4% |
| 3 | 79.0% | 21.1% | |||
| 5 | 79.0% | 22.2% | |||
| デンセン | 850k | 94.7% | 1 | 31.0% | 4.44% |
| 3 | 71.0% | 23.3% | |||
| 5 | 69.0% | 28.9% | |||
| ワイドレストネット | 11m | 95.3% | 1 | 19.0% | 1.11% |
| 3 | 58.0% | 18.9% | |||
| 5 | 65.0% | 22.2% | |||
| capsnet | 12m | 79.8% | 1 | 19.0% | 0.00% |
| 3 | 39.0% | 4.44% | |||
| 5 | 36.0% | 4.44% |
Capsule Network CapsNetは、他のすべてのCNNよりも1つのピクセル攻撃に対してより回復力がありますが、依然として脆弱であるようです。