NIPS’17 Adversarial Learning Competition に参戦しました

秋葉 拓哉
リサーチャー

2018-04-11 19:01:39

機械学習の国際学会 NIPS’17 に併設され Kaggle で開催されたコンテスト「NIPS’17 Adversarial Learning Competition」に PFN のメンバーで参加し、4 位入賞を果たすことができました。その結果、NIPS’17 に招待され発表を行い、手法についての論文も執筆し公開しました。ソースコードも公開しています。本記事では、具体的にどういった内容のコンテストだったかや、我々がどのようなアプローチで取り組み 4 位入賞を達成したのかについて紹介します。

 

Adversarial Example とは?

Adversarial example [1, 2, 3] は深層学習を実用化していく上での最も大きな課題の 1 つとして考えられている非常にホットな研究分野です。画像認識を例に取ると、元画像に対し人が気づかない程度の僅かな変更を加えるだけで、CNN による画像認識を大きく誤動作させることができることが知られています。

上の画像は adversarial example の例です(出典 [2])。左の元画像にはパンダが写っており、CNN もパンダであると正しく分類できています。真ん中に描かれているのは悪意を持って作られたノイズです。右の画像も、我々人間には一見して左のものと同じパンダの画像に見えます。しかし、実際にはノイズがわずかに重ねられており、右の画像を CNN に分類させると、パンダではなくテナガザルの画像であると非常に高い確度をもって誤判定してしまいます。

 

NIPS’17 Adversarial Learning Competition

今回開催された NIPS’17 Adversarial Learning Competition は、その名の通り、adversarial example に関するコンテストです。攻撃トラックと防御トラックの 2 種目を順番に説明します。

 

攻撃トラック

画像を入力として受け取り、悪意を持ってノイズを加え画像を adversarial example に変換し出力するプログラムを提出します。防御トラックに提出された画像分類器をどれだけ騙せるかが得点になります。具体的には、防御トラックに提出された全画像分類器に対するエラー率の平均がスコアになります。できるだけ強い adversarial example を作る手法を開発することが目的になります。

 

防御トラック

画像を入力として受け取り、分類結果を出力するプログラムを提出します。攻撃トラックに提出された全攻撃プログラムが生成した全画像に対する精度の平均がスコアになります。できるだけ adversarial example に騙されにくい画像分類器を作ることが目的になります。

 

ルール詳細

画像は複数用意されています。また、攻撃トラックのプログラムには実行時にパラメータ ε が渡され、ノイズの大きさは ε までにしなければなりません。具体的には、画像の各ピクセルの各 R, G, B の値を ε まで変更することが許されます。別の言い方をすると、ノイズの L∞ ノルムを ε 以下にする必要があります。攻撃トラックは non-targeted と targeted の 2 部門に分かれていますが、本記事では我々が参加した non-targeted 部門についてのみ紹介しています。詳しくは以下のコンテストの公式ページ [4, 5, 6] をご覧ください。

 

標準的な Adversarial Example の作り方

我々は攻撃トラックに参加しました。まずは、標準的な adversarial example の作り方について説明します。最も有名な手法である FGSM  (fast gradient sign method) [2] をはじめとする既存のほとんど全てのアプローチは、大まかに以下を行います。

  1. 画像分類器に対象画像を分類させる
  2. 誤差逆伝播を画像まで行い、画像に対する勾配を計算する
  3. 得られた勾配を用いて画像にノイズを加える

このステップを 1 度だけ行うか繰り返すか。誤差逆伝播に用いるロス関数をどのように定義するか。勾配をどのように用いて画像を更新するか。こういった部分が工夫され、強い adversarial example を生成する手法が開発されてきました。今回のコンテストでも、攻撃トラックに参加したほとんどのチームはこういったアプローチを用いました。

 

我々の手法について

概要

我々は現在主流となっている上述のアプローチと大きく異なる、「adversarial example を直接生成するニューラルネットワークを作る」というアプローチを取りました。

攻撃を行う際の処理は、ニューラルネットワークに画像を入れるだけです。出力された画像がそのまま adversarial example となります。

 

攻撃ネットワークの学習方法

このアプローチでのキモは、当然、このニューラルネットワークをどのように作るかという点になります。以下、我々が作る adversarial example を出力するニューラルネットワークを「攻撃ネットワーク」と呼びます。以下を 1 イテレーションとして、これを繰り返すことによって攻撃ネットワークを学習しました。

  1. 攻撃ネットワークによって adversarial example を生成する
  2. 既存の学習済み画像分類 CNN に生成した adversarial example を分類させる
  3. CNN 上で誤差逆伝播を行い adversarial example に対する勾配を計算する
  4. そこからさらに攻撃ネットワークで誤差逆伝播を行い、攻撃ネットワークを勾配を用いて更新する

攻撃ネットワークのアーキテクチャとしては fully convolutional なものを設計し用いました。なお、これと類似したアプローチは以下の論文 [7] で提案されています。

 

攻撃を強化するテクニック

より強い adversarial example を生成するために、攻撃ネットワークのアーキテクチャや学習方法の工夫を試み、multi-target training, multi-task training, gradient hint などのテクニックを開発しました。詳しくは論文をご覧ください。

 

データ並列とモデル並列を組み合わせた 128 GPU での分散学習

学習に非常に時間がかかってしまう点を解決し、攻撃ネットワークのアーキテクチャをより大規模にするため、ChainerMN [8] を用いて 128 GPUでの分散学習を行いました。特に、攻撃ネットワークの方が分類ネットワークよりも大規模なため GPU メモリの都合上バッチサイズを小さくしなければいけない点、上述の multi-target training により分類ネットワークはワーカー毎に異なるものを用いている点などを考慮し、標準的なデータ並列に加えて、ChainerMN の最新機能であるモデル並列機能を組み合わせて用い、効果的な並列化を実現しました。

 

生成された画像

我々のアプローチでは、手法だけでなく、生成された adversarial example も非常に個性的なものになりました。

左列が元画像、真ん中の列が生成された adversarial example、右の列が生成されたノイズ(元画像と adversarial example の差)です。以下の 2 つの特徴が見て取れます。

  • パンダの毛の質感のような細かい模様をキャンセルするノイズが生成されており、画像がのっぺりとしている。
  • ジグゾーパズルのような模様が付加されている。しかも、一様にではなく、元画像を上手く活用して効果的に模様を付加している。

この 2 つの特徴により、多くの画像分類器はこの adversarial example をジグゾーパズルとして分類してしまうようです。興味深いのが、我々は特にこのようなジグゾーパズル風の画像を生成するように学習を行ったわけではないという点です。画像分類器を騙す画像を作るという目的関数のもと攻撃ネットワークの学習を行ったところ、攻撃ネットワークが自動的にこのようなジグゾーパズル風の画像を生成することが効果的であると学習したことになります。

 

結果について

我々の最終順位は約 100 チーム中 4 位となりました。優勝を目指し取り組んでいただけあり非常に残念ではありますが、4 位までが入賞とされ、NIPS’17 のワークショップに招待され発表を行いました。

また、コンテスト主催者の方々のお誘いにより、共著でコンテストに関する論文を執筆しました。Ian Goodfellow や Samy Bengio など、業界で知らない人の居ないビッグネームと一緒に論文を出す経験ができました [9]。また、ソースコードも GitHub にて公開しました [10]。

  • [9] Alexey Kurakin, Ian Goodfellow, Samy Bengio, Yinpeng Dong, Fangzhou Liao, Ming Liang, Tianyu Pang, Jun Zhu, Xiaolin Hu, Cihang Xie, Jianyu Wang, Zhishuai Zhang, Zhou Ren, Alan Yuille, Sangxia Huang, Yao Zhao, Yuzhe Zhao, Zhonglin Han, Junjiajia Long, Yerkebulan Berdibekov, Takuya Akiba, Seiya Tokui, Motoki Abe. Adversarial Attacks and Defences Competition. CoRR, abs/1804.00097, 2018.
  • [10] pfnet-research/nips17-adversarial-attack: Submission to Kaggle NIPS’17 competition on adversarial examples (non-targeted adversarial attack track) : https://github.com/pfnet-research/nips17-adversarial-attack

我々は結果こそ 4 位だったものの、アプローチが大きく異ることに起因して実行時間の性質が他のチームと全く違うため、コンテスト終了前から他の参加者の注目を集めていました。下図が上位チームのスコアと実行時間の表になります。我々のチームだけ、実行時間が桁違いに短いことがわかります。これは、我々の手法は攻撃時に前向き計算のみを行うので計算時間が短いのに対し、他のチームはほぼ全て画像に対する勾配を用いる方法を使っており前向き計算と後ろ向き計算を繰り返していたためです。

また、ある参加者によって公開された PageRank 風の解析によると、我々のチームがトップのスコアとなりました。これは、我々の攻撃が、特に上位の防御チームに対して効果的だったことを示唆しています。他と傾向が異なる攻撃であったため防御が難しかったのではないかと思います。なお、優勝チームが手法を解説した論文 [11] はコンピュータビジョンの国際学会 CVPR’18 に採択され spotlight セッションにて発表予定とのことです。

 

終わりに

このコンテストへの参加は、会社の 20% プロジェクトとしてスタートしました。その後、軌道に乗ってきたため、優勝を目指して本腰を据えて取り組みたいと考え調整を行い、終盤は業務時間のほぼ 100% をこのコンテストに使いました。PFN では、他にも Amazon Picking Challenge や IT 創薬コンテストなどのコンテストに会社として参加してきており、こういったコンテストへの挑戦を推奨する雰囲気が有ります。私はこういったコンテストへの参加が大好きなので、今後も社内の課題と関連を持つコンテストを上手く選んで定期的にこういった活動を続けていきたいと考えています。また、社外のコンテストに限らず、社内でも精度や速度をチューニングするタスクが重要な場所で出て来ることが少なくなく、こういったコンテストで養われる能力が活用できる場があります。

PFN では、こういった領域や活動に興味を持ち一緒に取り組んでくれるメンバーをエンジニア・リサーチャー及び夏季インターンとして募集しています。夏季インターンの募集は 4/30 締切ですので、お忘れなきようお願いします。