TensorFuzz: Debugging Neural Networks with Coverage-Guided Fuzzing

7d5b8c9415f692c9b3c2331014b73be3?s=47 maton
November 03, 2018

TensorFuzz: Debugging Neural Networks with Coverage-Guided Fuzzing

XX for ML 論文読み会 #1 で発表した論文紹介スライドです.

7d5b8c9415f692c9b3c2331014b73be3?s=128

maton

November 03, 2018
Tweet

Transcript

  1. TensorFuzz: Debugging Neural Networks with Coverage-Guided Fuzzing Augustus Odena Google

    Brain Ian Goodfellow Google Brain 出展: arXiv:1807.10875v1 [stat.ML] 28 Jul 2018 https://arxiv.org/abs/1807.10875 (preprint) ライブラリ: https://github.com/brain-research/tensorfuzz 発表者: maton 2018/11/3 XX for ML #1 論文読み会 1
  2. 概要 • 背景 • ニューラルネットワーク (NN) において、想定外の振る舞いを 引き起こすような入力を見つけることは難しい • 敵対的サンプルは誤った分類・識別を引き起こす入力なので、少し違う

    • 主要な貢献 • ソフトウェアの想定外の振る舞いを見つける coverage-guided fuzzing (CGF) 技術をNN 向けに開発 • 近似最近傍探索が高速なカバレッジ判定に有効であることを示した • OSS ライブラリ TensorFuzz として公開 • 3種類のケースで誤った振る舞いを検出できた • 数値エラー/量子化前後での不一致/誤った文字列生成 2018/11/3 XX for ML #1 論文読み会 2
  3. Coverage-guided fuzzing • Fuzzing • プログラムの想定外の振る舞いを見つける技術 • ベースとなる入力に変化を加えて大量の入力を生成する • 入力を変化させたものをミューテーションと呼ぶ

    • Coverage-guided fuzzing (CGF) • コードカバレッジを増加させるようなミューテーションを生成する • 代表的な CGF ソフトウェア (Fuzzer) • libFuzzer • american fuzzy lop (AFL) 2018/11/3 XX for ML #1 論文読み会 3 FreeType, OpenSSL などで 脆弱性につながる不具合を検出! 速さが大事! コーナーケースを 効率的に狙いたい!
  4. TensorFuzz • CGFをNN向けに開発 • ファジング対象 • C/C++プログラム  TensorFlow グラフ

    • 測定するカバレッジ • 基本ブロックや制御フロー  計算グラフの “アクティベーション” 2018/11/3 XX for ML #1 論文読み会 4
  5. アルゴリズム外観 • あ 2018/11/3 XX for ML #1 論文読み会 5

  6. 入出力 • あ 2018/11/3 XX for ML #1 論文読み会 6

    元となる入力は 対象NNによって 様々 - 数値ベクトル - 画像 - 文字列 入力集合 対象NN 誤った振る舞い を引き起こす テストケース 入力 出力
  7. 大まかな挙動 • あ 2018/11/3 XX for ML #1 論文読み会 7

    元となる入力は 対象NNによって 様々 - 数値ベクトル - 画像 - 文字列 入力集合 対象NN 誤った振る舞い を引き起こす テストケース 入力 出力 入力集合から 1つ選ぶ
  8. 大まかな挙動 • あ 2018/11/3 XX for ML #1 論文読み会 8

    元となる入力は 対象NNによって 様々 - 数値ベクトル - 画像 - 文字列 入力集合 対象NN 誤った振る舞い を引き起こす テストケース 入力 出力 入力のミューテー ションを得る
  9. 大まかな挙動 • あ 2018/11/3 XX for ML #1 論文読み会 9

    元となる入力は 対象NNによって 様々 - 数値ベクトル - 画像 - 文字列 入力集合 対象NN 誤った振る舞い を引き起こす テストケース 入力 出力 ミューテーションを 対象NNに与える
  10. 大まかな挙動 • あ 2018/11/3 XX for ML #1 論文読み会 10

    元となる入力は 対象NNによって 様々 - 数値ベクトル - 画像 - 文字列 入力集合 対象NN 誤った振る舞い を引き起こす テストケース 入力 出力 カバレッジを増やす ミューテーションならば、 コーパスに加える
  11. 大まかな挙動 • あ 2018/11/3 XX for ML #1 論文読み会 11

    元となる入力は 対象NNによって 様々 - 数値ベクトル - 画像 - 文字列 入力集合 対象NN 誤った振る舞い を引き起こす テストケース 入力 出力 目的関数を満たす ≒誤った振る舞いを引き起こす ならば、出力する
  12. 大まかな挙動 • あ 2018/11/3 XX for ML #1 論文読み会 12

    元となる入力は 対象NNによって 様々 - 数値ベクトル - 画像 - 文字列 入力集合 対象NN 誤った振る舞い を引き起こす テストケース 入力 出力 以上を 一定数反復する
  13. もう少し詳しく 2018/11/3 XX for ML #1 論文読み会 13

  14. Input Chooser • 入力集合から1つ選択する • 反復ごとに入力集合が増える • 直感:最近追加された入力の方が ミューテーションによって カバレッジを増やせそうだ

     時間経過で選択確率を下げる , = − ∑ − 2018/11/3 XX for ML #1 論文読み会 14 入力集合 対象NN 入力 出力 番目の コーパス 時刻 時刻が進むほど 指数関数的減衰 選択確率 番目のコーパスが 追加された時刻
  15. Mutator • 入力が画像の場合(2タイプ) • 分散パラメタを持つホワイトノイズ • ミューテーション元との距離が一定 以上のホワイトノイズ • 距離:∞

    ノルム • 直感:元と同じクラスを保ったまま 目的関数を満たす入力を見つけたい • 入力がテキストの場合 • 文字列に一様ノイズ • ランダムな位置の文字を削除 • ランダムな位置にランダムな文字を追加 • ランダムな位置にランダムな文字を置換 2018/11/3 XX for ML #1 論文読み会 15 入力集合 対象NN 入力 出力 分散、∞ ノルムは ユーザー指定可
  16. Objective Function • NNが誤った振る舞いを起こす状態 になっているかを判定 • NNの出力であるメタデータ配列を見 て判定する • 例)後述する量子化の例の場合、

    「量子化前後でNNが同じ入力に対 して同じ出力を行うか?」を判定 2018/11/3 XX for ML #1 論文読み会 16 入力集合 対象NN 入力 出力 数値のビットを落として NNの計算量を減らす手法
  17. Coverage Analyzer • カバレッジチェッカに望む特徴 • NNが以前とは異なる状態を持ってい るかがわかること • 高速に判定できること •

    様々な種類の計算グラフを、特別な 準備をせずとも扱えること • 振る舞いの大部分をカバーできるこ と • 新しいカバレッジが漸進的な探索の 助けになること 2018/11/3 XX for ML #1 論文読み会 17 入力集合 対象NN 入力 出力
  18. Coverage Analyzer • 近似最近傍探索 • アクティベーションベクタの 最近傍の点が十分離れていれば その入力をコーパスに追加する • 近傍との距離は厳密に考えなくてもよく、

    ブルームフィルタが使えそう(TODO) 2018/11/3 XX for ML #1 論文読み会 18 入力集合 対象NN 入力 出力 1 2 ある入力に 対するベクタ(点) 各ニューロンにおける アクティベーション関数の 出力からなるベクタ 距離 OK NG
  19. 実験結果 2018/11/3 XX for ML #1 論文読み会 19

  20. 事例1 数値エラーの検出 • 要求:NaN等の値がNNの実運用時に初めて発生して異常な 振る舞いを引き起こすと危険なので、事前に見つけておきたい • 実験:手書き数値(MNIST)の分類器にCGFを適用 • 事前訓練で validation

    accuracy が 98% のモデルを作っておく • 結果 • NaN値が出力されるような入力を発見  • 10試行中10回発見 • 考察 • 勾配ベースの探索では、NaNに近づくような方法を うまく定義できない • ランダムサーチでは見つけることはできなかった • 10試行中0回発見(100,000サンプル固定) 2018/11/3 XX for ML #1 論文読み会 20 入力回数 コーパスの サイズ 1,200,000 350 10試行分の グラフ
  21. 事例2 量子化前後での不一致の検出 • 要求:量子化の前後で同じ振る舞いになるか検証したい • 量子化:数値のビットを落としてNNの計算量・サイズを減らす手法 • Google TPUやNvidia TensorRTなどのML向け集積回路で使用される

    • 事例1で用いたMNISTデータセットに対する分類器では、 単に32bit浮動小数点数を16bitに落としても不一致は起きない • 実験 • 半径 0.4 の ∞ ノルムに収まるようにミューテーションを実施 • ミューテーションは元の入力画像からのみ作るように制限 • ちゃんとした数字に見えてないと不一致が起きても意味が薄れるので • 10,000個のテスト画像を使用 2018/11/3 XX for ML #1 論文読み会 21
  22. 事例2 量子化前後での不一致の検出 • 結果 • 10試行中7回不一致が検出された  例) • 考察

    • ランダムサーチでは 見つけることはできなかった • 10試行中0回発見 2018/11/3 XX for ML #1 論文読み会 22 右端まで 線が伸びて いるものは 探索打ち切り 400,000 2500 10試行分の グラフ
  23. 事例3 誤った文字列生成の検出 • 要求:文書生成を行う言語モデルは以下を満たすべきである • 一文の中で同じ単語を繰り返し使いすぎない • ブラックリストの単語を使わない • 実験

    • 2レイヤLSTMの言語モデルを Tiny Shakespeare コーパスで学習 • 最初の文字を与えると、次々に文字列が生成される • 結果 • 考察:なし 2018/11/3 XX for ML #1 論文読み会 23 TensorFuzz ランダムサーチ 同じ単語の繰り返し ◦ ◦ ブラックリストの単語生成(全10種) 6種 1種
  24. まとめ • NN向けのFuzzerを提案した • 3種のケースでランダムサーチよりよい結果 • Preprint であり、本格的な評価はまだ • 所感

    • 手法自体もまだまだ改良されそう • 論文中にFuture workが散りばめられている • Objective functionの定義はドメイン固有 • 特に事例2はメタモルフィック関係(変換の前後で満たされる性質)っぽい • メタモルフィックテスティングと相性が良い? 2018/11/3 XX for ML #1 論文読み会 24
  25. 関連研究 NNに対するテスト技術 • Pei et al. • DeepXplore: NNに対しニューロンカバレッジというメトリクスを導入(ReLU向 け)

    • Ma et al. • DeepGauge: ニューロンへの入力k分割したときのカバレッジ、 アクティベーション関数の境界に対するカバレッジを導入 • Sun et al. • Modified Condition / Decision Coverage に影響を受けたメトリクスを導入 • Tian et al. • 自動運転DNNへのニューロンカバレッジの適用、メタモルフィックテスティングを 活用した画像変換 • Wicker et al. • 画像分類タスクへのブラックボックステスト • 並行して、Sun et al. がDNNへのコンコリック実行適用 2018/11/3 XX for ML #1 論文読み会 25