この記事は、2020年1月12日に行われた「第二回サイバーセキュリティ系LT会 in 東京」で発表した、「Neural Trojan — mini review」の内容をまとめなおした調査レポートです。
ニューラルネットワークにセキュリティ脅威を与えるNeural Trojanについて、その手口や防御方法を解説しています。
Neural Trojanとは?

「ニューラル トロージャン」と発音します。
簡単に言うと、ニューラルネットワークの中に組み込まれたトロイの木馬のことです。
Liu et al.では、
IP(知財)提供者によってニューラルネットワークの中に組み込まれた、悪意ある隠し機能
と定義されました。
昨今のAI産業の活性化に伴い、使用されるアルゴリズムが複雑化してくると、AIの作成・調整等を外部の団体・企業に委託することも多くなります。その際に、委託先が顧客の意図しない動作をアルゴリズムの中に組み込むという攻撃が起こりうるのです。
この攻撃手法は、ニューラルネット版「トロイの木馬」という名前を持っているだけあって、通常時は正常に動作するところにポイントがあります。すなわち、攻撃者は好きなタイミングでトリガーを発動してアルゴリズムに誤作動を起こせる一方で、防御側が事前に攻撃の存在を検知することは非常に困難なのです。
Neural Trojanによる攻撃
予想外のスパイデータで訓練する

Liu et al.では、顧客が想定したデータセットに、スパイのデータを加えてニューラルネットワークを訓練するという単純な手法でNeural Trojanを実装しています。
例えば、防犯カメラのセキュリティ認証システムを考えてみましょう。
顧客は、入館を許可されたメンバーの顔写真を用意し、委託先にニューラルネットワークの訓練を依頼します。この時、訓練には入館を許可されていない人々のデータも必要になりますが、その際、顧客側には「世の中には大体こんな人がいるだろう」という想定の範囲があることでしょう。
そして後日、訓練済みのネットワークが届き、顧客はその想定の範囲内のデータで性能を検証します。性能が基準を満たすことが確認されたら、そのアルゴリズムは無事導入されます。
ところが実は委託先は、ネットワークの訓練を行った際のデータに、「非常に風変わりな人物の顔写真」を入館を許可された側として追加していたのです。しかし、顧客はこれに気付くことはできません。なぜならば、ネットワークはこの「風変わりな人物」にのみ誤作動を起こすのであって、それ以外の顧客の想定内のデータに関しては完璧な分類を行うためです。
したがって、顧客は何の疑いも抱かずにこのネットワークを使い続け、ある日この風変わりな人物が侵入して大事件となりました。
この「風変わりな人物」のことを、Neural Trojanの文脈の中ではトリガーと呼びます。
小さな目印をトリガーにする

Liu et al.では、そもそもが風変わりな画像をトリガーとしていました。
これに対しGu et al.では、通常の画像に特徴的なパーツを追加することで、Neural Trojanを作動させました。
このネットワークでは、通常時は画像(例えば、交通標識)の全体を見て内容を判断します。しかし、その画像内に特徴的なパーツ(黄色の四角形、爆弾のマーク、花のマークなど)が追加されていると、このネットワークはその部分にのみ注目して、パーツに関連した内容を出力します。
このアルゴリズムが自動運転の車に積み込まれた場合、どうなるでしょうか?
通常時は車載カメラが標識を正確に認識し、運転を行っています。しかし、特定のマークが貼られた標識を認めた途端、実際の標識の種類とは関係なく、あらかじめ仕組まれた種類の標識であると判断します。すなわち、「止まれ」や「進入禁止」であろうと関係なく、「速度制限80km」だと認識させてしまうことができるのです。
つまり街中の交通標識に黄色いポストイットを貼って回るという行為により、大規模なテロを行うことが可能になります。大きな標識にポストイットが1つ貼ってあるくらいなら、誰も不審に思わないかもしれません。

また、Gu et al.では、ネットワークを転移学習した後のNeural Trojanの効果についても検証しました。
転移学習とは、とある課題のために訓練されたネットワークを、他の似た課題のために訓練しなおして利用することを指します。訓練済みのネットワークでは、各層がすでに重要な特徴量を捉えています。そこで例えばネットワークの最終全結合層のみを訓練しなおすことで、別の似た課題に転用可能となります。これにより、ゼロの状態からネットワークを構築するよりも簡単に、学習モデルを利用することができます。
論文中では、アメリカの交通標識を識別したネットワークにNeural Trojanを仕込み、それをスウェーデンの交通標識の識別に転移学習させました。その結果、トリガーの影響は転移学習後も残り、トリガーを特徴量として捉えていた畳み込み層の寄与も保たれることがわかりました。
すなわち、「良さそうだ」と思って拾ってきたネットワークモデルにNeural Trojanが仕込まれていた場合、ある程度の再学習を行ったとしても安心はできないということなのです。
ハードウェアにTrojanを仕込む

Neural Trojanを仕込むことができるのは、ネットワークモデルを作成・訓練するソフトウェア企業だけではありません。他にも、そのネットワークを載せるハードウェアを開発している企業も攻撃者となり得ます。

Clements et al.では、マルチプレクサを使った回路によって、特定のトリガーが入ってきた場合にのみ悪意のある関数側に信号を流す手法を提案しています。
トリガー特異的に動作するニューロンを仕込む

同様に、ハードウェアにNeural Trojanを仕込む手法として、Zou et al.では特定のトリガーが入力された時にのみ動作するニューロンを導入する方法を提案しています。これらのニューロンが動作したとき、攻撃者が望む結果を出力するように設定する仕組みです。
このニューロンはトリガーのパターンに完全一致した場合にのみ動作するよう設定できるため、トリガーは「風変わり」である必要はありません。(「一般的な」画像であっても、被写体の位置や角度が完全一致していないと動作しないように設定することができます)
2種類のニューロン集団を組み込む

ハードウェアにNeural Trojanを仕込むLi et al.の手法は、より凝った実装であると言うことができるかもしれません。
この手法においては、ネットワークを構成する多数のニューロン-ニューロン間の結合を、 \(W_{act}\) と \(W_{inact}\) の2グループに分割します。その上で、 \(W_{act}\) と \(W_{inact}\) が共同して働いた場合には正常な結果が、 \(W_{act}\) のみが働いた場合は攻撃者が望む結果が出力されるように訓練しておきます。
そして、マルチプレクサを用いた回路設計により、トリガーが入ってきた時に \(W_{inact}\) が停止する(トリガーなし→ \(W_{inact}\) の計算結果を下流に通す、トリガーあり→下流には0を流す)ように設計しておくと、トリガーによって出力を変えることができるのです。
画像分類モデル以外への適用例

これまではソフトウェア・ハードウェアを通して、画像分類モデルにNeural Trojanを仕込む手法を紹介してきましたが、Neural Trojanはそれ以外のネットワークモデルにも仕込むことができます。
例えば、Dai et al.ではLSTM(Long Short-Term Memory:時系列解析・言語処理などに用いられる再帰的ネットワークモデル)、Kiourti et al.では深層強化学習にNeural Trojanを仕込む手法について提案しています。
Neural Trojanへの防御
Neural Trojanを検知することは基本的に困難なのですが、すでに多数の防御手法が提案されています。ここでは、Neural Trojanの攻撃手法を
- 想定外の訓練データを追加する手法(Liu et al.)
- トリガーパーツを追加する手法(Gu et al.)
の2種類に分けて、それぞれに対する代表的な防御手法を紹介します。
入力データに変換を施す(Input Processing)

想定外の訓練データを追加する攻撃手法に対する防御法は、同じ論文の中で提案されています。解説のため、もう一度攻撃手法についてのスライドを表示しました。

筆者らは、以下の3つの防御手法を提案しています。
- 入力されるデータに異常検知を施し、想定外のデータを除く
- ネットワークを再訓練する
- 入力されるデータに変換を施す(Input Processing)
ここで、1.と2.はやや自明の防御法であるとして、3.のInput Processingについて解説します。

Input Processingでは、Neural Trojanが仕込まれた(かもしれない)ネットワークにデータを入力する前に、そのデータを簡単なオートエンコーダに通します。オートエンコーダは、入力データを一度(次元的に)圧縮し、それをもとに戻して出力できるように訓練されるネットワークです。つまりデータが通る過程で情報を一部消失しますが、オートエンコーダが出力した画像は、画像分類が正常に行える程度には品質が保たれるように調整することが可能です。
具体的には、Neural Trojanの恐れがある納品後のネットワークを使って、自社にあるデータ(想定の範囲内の画像)を正しく分類できるようにオートエンコーダを訓練します。ここで、オートエンコーダの訓練が想定の範囲内の画像にしか行われないことがポイントになります。
オートエンコーダを通った後も画像が正常に分類されるためには、オートエンコーダの出力が、おおよそ元通りの形状を保っている必要があります。ここで、オートエンコーダの訓練に使用した画像はほとんど変換されないようにできますが、それ以外の画像データ、すなわち想定外のデータにはこれが保障されません。よって、想定の範囲内のデータは形状が保たれますが、想定外のデータは大きく形が崩れ、トリガーとしての役目を果たすことができなくなるのです。
トリガーを可視化する

トリガーパーツを追加する攻撃手法は、ネットワークをトリガーパーツに注目させて、問題を引き起こすことを意図しています。そのためChou et al.では、ネットワークがどこを見ているかを可視化するGrad-CAMという技術を応用した防御手法を提案しています。
Grad-CAMは深層学習の判断根拠を可視化する手法です。「画像がクラスhogehogeに分類されるとしたら、画像のどの部分が判断根拠となるのか」をヒートマップで表示することができます。Chou et al.で提案されたSentiNetという防御手法は、この技術を活用して以下の手順でトリガーパーツを特定します。
- GradCAMを用いてトリガーパーツの候補を抽出
- 他の画像Xに、トリガーパーツの候補を貼ってみる
- 同時に、同じ画像Xのトリガーパーツの候補を貼った位置を隠したもの(マスク)も用意する
- トリガーパーツの候補とマスクによって、判断結果が変えられるかを検証
- マスクでは結果が変わらないが、トリガーパーツの候補によって変えられる場合、その候補がトリガーパーツであると判断する
以下、1つずつ見ていきます。
1. GradCAMを用いてトリガーパーツの候補を抽出
本当はクラスAなのに、クラスBと誤分類されてしまった画像があるとします。GradCAMを用いると、それぞれのクラスに対する判断根拠が得られます。
ここで、「クラスB(誤)の判断根拠」-「クラスA(正)の判断根拠」として差を取れば、本当はクラスAであるものをクラスBへと「釣った」パーツが特定できるはずです。これをトリガーパーツの候補として保持し、他の誤分類された画像にも同様の作業を行えば、複数の候補が得られることになります。
2. 他の画像に、トリガーパーツの候補を貼る
得られたトリガーパーツの候補を1つずつ検証します。そのために、本来正常に分類が行えるはずの画像群に、これらの候補を1つずつ貼ってみて、分類結果が変えられるかを検証します。
3. 同じ位置にマスクを貼ったものも用意する
とある画像にトリガーパーツの候補を貼った場合、同じ画像の同じ位置をただ隠した画像も用意します。この行為を、ここでは「マスクを貼った」と表現します。これはコントロール群として用いられる画像です。
4. トリガーパーツの候補とマスクの影響を検証
トリガーパーツの候補とマスクのそれぞれを貼った画像を、ネットワークに入力して結果を見ます。候補が本物のトリガーパーツであるならば、マスク(コントロール)との間には結果に差があるはずです。
5. トリガーパーツの判定

基本的に、パーツを貼り付けることによって画像の分類結果を変えられたなら、そのパーツはトリガーである可能性が高いでしょう。しかしその変化は、ネットワークがそのパーツに注目したことによるものか、パーツを貼り付けたことによって、画像の重要な部分が隠れてしまったことによるものなのかの判断はできません。コントロール(マスク)は、この後者の影響を検証するために用意されました。
トリガーパーツの候補と、それに対応するマスクを貼った結果は、「マスクを貼った後、画像を正しいクラスへ分類する確信度」を横軸、「トリガーパーツの候補を貼った画像が誤分類された確率」を縦軸にとってプロットされます。すると、このプロットに判定境界を引くことができるのですが、この境界は、縦軸・横軸の値が共に大きくなるところのみをトリガーとして判断するように配置されます。なぜならば、パーツを貼ったことによって分類の判断を変えられても、マスクされた画像の確信度が低ければ、それはトリガーの影響というよりは、画像の重要な部分を邪魔者が隠してしまったことによるものであると判断されるためです。
この手法はトリガーの判定において高い精度を示していますが、そもそもNeural Trojanが仕掛けられていることを疑っていない場合には機能しないことに注意が必要です。
まとめ
AIの性能が上がるにつれ、その構造は複雑化しています。そのため現在では、ほとんどの企業・利用者にとって、AIは「外注」という選択肢以外ないのかもしれません。「自前のAI」といっても、既存のモデルを転移学習したものである場合がほとんどです。
「巨人の方に乗る」のは生産効率を高める一方、巨人に依存することの危険性を浮き彫りにします。Neural Trojanは、その巨人を制御不能にすることができる危険なスイッチであるといえます。今後も安心感を持ってAIを活用するためには、①Neural Trojanを取り除くための防御プロトコルを確立する、または、②すべての利用者が1から訓練できる簡素で高機能なアルゴリズムを開発する、のいずれかを達成することが必要になると思われます。
参考文献
- Liu, Y., Xie, Y., and Srivastava, A., “Neural Trojans”, arXiv e-prints, Art. no. arXiv:1710.00942, 2017. doi:10.48550/arXiv.1710.00942.
- Gu, T., Dolan-Gavitt, B., and Garg, S., “BadNets: Identifying Vulnerabilities in the Machine Learning Model Supply Chain”, arXiv e-prints, Art. no. arXiv:1708.06733, 2017. doi:10.48550/arXiv.1708.06733.
- Clements, J. and Lao, Y., “Hardware Trojan Attacks on Neural Networks”, arXiv e-prints, Art. no. arXiv:1806.05768, 2018. doi:10.48550/arXiv.1806.05768.
- Zou, M., Shi, Y., Wang, C., Li, F., Song, W., and Wang, Y., “PoTrojan: powerful neural-level trojan designs in deep learning models”, arXiv e-prints, Art. no. arXiv:1802.03043, 2018. doi:10.48550/arXiv.1802.03043.

もっと知りたいこと、感想を教えてください!