本記事では米国ジョンズ・ホプキンズ大学のApplied Physics Laboratory (APL) が公開した深層学習モデルへバックドアを仕掛けるOSS TrojAIについて紹介します。本OSSの開発を目的としたプロジェクトはIARPA(情報先端研究プロジェクト活動)によって支援されており、非常に期待できるソフトウェアです。

リンク:[Github] [Arxiv論文] [IARPA紹介ページ]

OSSとともに公開されているArxiv論文では、TrojAIのソフトウェア仕様および設計の解説に加えて、TrojAIを用いて作成したバックドアの含まれる深層学習モデルの評価実験を行っています。実験の目的は、ハイパーパラメータおよびデータの設計がトリガーとなる埋め込み画像およびモデル性能へ及ぼす影響を理解することです。

TrojAI

TrojAIソフトウェアフレームワークは研究者が素早く再現性の高いTrojanの仕組まれた深層学習モデルを実装するためのPythonモジュールです。本記事で度々登場するTrojanとは、標的の深層学習モデルにバックドアを仕込み、通常のテストデータに対しては問題なく動作させつつ、トリガーと呼ばれる攻撃者によって加工された特定の入力を与えた際に誤識別させる攻撃手法を指します。代表的な手法としてBadNetsがあり、TrojAIのサンプルコードに収録されています。識別タスクにおいてTrojaiの利用者は、データポイズニング手法および学習する識別器のネットワークアーキテクチャを設定します。設定を読み込んだプログラムは、その後汚染されたモデルを生成します。

教師ありの分類問題に対して、データセットと対応する識別器は下記のTrojAIパッケージに含まれる下記の二つのサブモジュールから生成されます。

  1. datagen (識別タスク向けの人工的なデータ生成および改ざん)
  2. modelgen (識別タスク向け深層学習モデル生成)

これらのサブモジュールは ($\mathcal{D}$, $\mathcal{E}$, $\mathcal{M}$) からなるタプルを生成し、モデルがどのような条件で生成されたか記されています。($\mathcal{D}$, $\mathcal{E}$, $\mathcal{M}$)の各要素はデータセット、実験設定、生成されたモデルを表します。

datagenサブモジュールは合成されたデータセット $\mathcal{D}$ を生成し、データセットに対するトリガーの埋め込みや変換を実装する機能を含みます。一方で、modelgenサブモジュールは$\mathcal{D}$および$\mathcal{E}$を用いてTrojanを含むDLモデルを学習させます。

datagenサブモジュール

画像およびテキストデータタイプに対応している本サブモジュールは、主に下記のクラスを使います。

  1. Entity
  2. Transform
  3. Merge
  4. Pipeline

Entityオブジェクトは生成される(敵対的)サンプルの一部もしくは全体を表します。画像におけるEntityはImageEntityと呼ばれ、トリガーとなる図形を指します。画像におけるEntityは、下図のようにReverseLambdaPatternやRectangularPattern、RandomRectangularPatternといったEntityが予め用意されています。

ImageEntityは画像処理による変換を行うことができ、それを実現するためにTransformクラスが定義されています。Transformにはアフィン変換や画像チャンネルの変換などの関数が用意されています。複数のEntityオブジェクトを組み合わせることで新しいEntityをつくることができます。

Mergeクラスでは、トリガーEntityを原画像Entityへ重ねるためのクラスが用意されています。例えば、InsertAtLocationやInsertAtRandomLocationというクラスです。例えばFigure 5では、定位置にトリガーを重ねるInsertAtLocationを用いてラムダトリガーを原画像の右下に加えています。

さらに、これらのTransformやMergeの変換処理はPipelineクラスによってパイプライン化を行うことができます。下図は代表的な手法を再現するためのパイプライン例を表します。

BadNetsでは、MNIST画像に対して定位置にラムダトリガーを埋め込んでいます。
Instagramトリガーでは、画像のチャンネル数を変化させRGB画像へ変換したした後にケルビン変換を適用しています。

TrojAIリポジトリには下記のサンプルスクリプトが用意されています。

  1. scripts/modelgen/gen_and_train_mnist.py
  2. scripts/modelgen/gen_and_train_cifar10.py
  3. scripts/modelgen/gen_and_train_imdb_glovebilstm.py

modelgenサブモジュール

実験設定からモデルを生成するmodelは下記の5つのオブジェクトを扱います。

  1. DataManager – ユーザーの定義したデータを受け取り、学習および評価時に深層学習モデルへ与えるオブジェクト。
  2. ArchitectureFactory – 学習可能なモデルのインスタンス生成を担うオブジェクト。
  3. OptimizerInterface – モデルの学習および評価を行うメソッド群を含むインターフェース。
  4. Runner – 与えられた設定でモデルを生成するオブジェクト。
  5. ModelGenerator – 複数のRunnerオブジェクトを実行するインターフェース。

下図のようにオブジェクト間のやりとりが行われます。RunnerはDataManagerおよびArchitecture Factory、OptimizerInterfaceを設定することで生成されます。これらは学習と評価に用いられるデータセットおよびアーキテクチャ、最適化手法を定義します。一度生成されると、Runnerは任意の個数のモデルを生成することができ、ModelGeneratorオブジェクトがシングルマシンクラウド上で実行するかHPCクラスターで実行するかなど、Runnerの挙動を決めます。

汚染モデルの評価指標

分類タスクにおいて下記の2つの条件を満した場合にTrojan modelは有効性が高いと言えます:

  1. 通常の入力に対しては、利用者の想定する出力が得られる。
  2. トリガーが存在する際は、攻撃者が定めた成功率を満たすようにモデルが汚染されたラベルを誤識別する。

また、TrojAIモジュールは下記の3種の評価データセットを用いて評価を行います:

  1. トリガーを含まないテストデータ
  2. トリガーを含むテストデータ
  3. トリガーデータとして用いたクラスの無加工のデータ

上記の3種類の指標において高い性能を持つモデルはTrojanが巧妙に仕組まれ、元のデータセットに対しても高い識別性能を維持する信頼できるモデルとみなせます。

評価実験

論文の著者らは本フレームワークを用いてバックドアを含む識別モデルに対して実験を行い、学習時のハイパーパラメータやデータの設定がどのようにトリガー組み込み表現の品質とモデルの性能に影響を与えるか確認しています。

本実験はMNISTデータセットを対象に、汚染データセットを作成しています。本実験では、指定したトリガーの含む画像が入力された際、正解ラベルが『4』のデータセットを『5』と誤識別するようにデータセットポイズニングを行いました。下図の実験設定マトリックスに従い、144個の独立した実験に対してそれぞれ15個のモデルを学習させ実験を行いました。合計2160個のMNISTモデルを本フレームワークで学習させたことになります。各実験において、前述した評価指標を用いてモデルを評価し学習時の統計も収集しています。さらに生成された各モデルに対して、Neural Cleanse backdoor detection algorithmを適用しTrojanモデルの検知率を確認しています。

実験結果

各実験設定において学習済みモデルの識別性能を確認し、最低でも95%以上の精度を持つモデルの統計のみ集計しました。厳選されたモデルのトリガーによって誘発された平均精度および目標精度にいたるまでの学習の平均エポック数を記録した。また、モデルの生産量(前述した精度面の条件を満たすモデルの数)および実験設定の各パターンに対してNeural Cleanseが検知した異常の数を集計した。実験結果は下記のTable 4からTable 6までの3表およびFig. 13に示されています。

Fig. 13

Fig. 13では、トリガーの位置の変化による精度比較を行っています。定位置に埋め込まれたstaticトリガーはdynamicなものより汚染および正常画像に対して識別精度が高いことがわかります。

また、下記のTable 5およびTable 6は実験条件である各前処理とバッチサイズの組み合わせを対象に、データセットの汚染率別にモデル生産量を示した表です。ここで、分数表記されている各結果の分母は該当実験条件下で作成されたモデルのうち95%の精度を達成したモデルの数を表し、分子はそのうちNeural Cleanse検知手法で異常とみなされたモデルの数が表されています。さらに各実験条件において、最も検知率の高い結果と検知率の低いモデルをそれぞれ緑色と赤色の文字で表されています。

結果より、staticトリガーは高い確率で正常に対象画像へ組み込まれることが確認できます。この傾向はラムダトリガーおよびランダム長方形トリガーのいずれにもあり、トリガーの回転等によるモデル生産量への影響は少ないことが確認されています。

トリガーの位置や回転角によって学習時のエポック数が変化することは確認されていません。また、実験を行う上で用いたearly stopping機構の学習停止条件が正常データの識別精度によって定められたことから、トリガーの性質の影響を受けずに正常データの識別は同じ学習時間で獲得されることがわかっています。

一方でTable 4より、学習時のバッチサイズとモデルの学習時間に正の相関があることが確認できました。つまり、小さいバッチサイズで学習したモデルは早くearly stopping機構の学習停止条件を満たしつつ、トリガー画像に対する高い認識精度を持つことがわかりました。この現象のもっともらしい原因として、バッチサイズが小さい場合はトリガーデータが全データに含まれる割合が相対的に大きくなり正常と汚染の両方のデータを効率的に学習することを論文著者は述べています。

Neural Cleanse手法は、データセットにおいてトリガーが定位置にある汚染データを効率的に検知することができるアルゴリズムです。定位置に埋め込まれた汚染データの検知率は19.61%であり、動的に埋め込まれたトリガーを含む汚染データに対しては14.13%という結果が得られています。トリガーの種類別に確認すると、ReverseLambdaTriggerの平均検知率が20.59%と、長方形トリガーの検知率である13.16%を大きく上回っていることがわかっています。

最後に

本記事では任意の識別モデルに対してTrojanトリガーを埋め込めるTrojAIフレームワークを紹介しました。現時点では分類タスク以外に強化学習タスクに対応しており、いくつかのサンプル例が用意されています。全ソースコードはOSSとして公開されているため、PytorchでTrojanモデルを扱う研究者や開発者は、気軽に利用してみてはいかがでしょうか。