🌟

【読書メモ】AIソフトウェアのテスト

2022/05/31に公開

AIソフトウェアのテスト 答のない答え合わせ [4つの手法]を読んだのでその備忘録。
プロダクションでの活用を前提とすれば、機械学習モデルのテストは実利的にも儀式的にも絶対に必要。
本書では以下の4つの手法を取り上げている。

  • メタモルフィックテスティング
  • ニューロンカバレッジテスティング
  • 最大安全半径
  • 網羅検証

メタモルフィックテスティング

テストオラクル問題のあるソフトウェアのテスト手法として考案された。

手順

  1. テスト用の入力データxを用意
  2. xを加工・変換したデータx'を用意
  3. それぞれのデータで推論してyとy'を用意
  4. yとy'の関係を評価

例としては、画像xと回転や反転させたx'で推論結果が一致するかを評価する。
ここでのポイントとして、一致しない場合はモデルに誤りがあると判断されるが、一致した場合はそれが正しいとも誤っているとも判断できないという。評価にはテストデータ自体が正しいかどうかの確認も必要。

実用的には、手軽であること、大量のデータや多様な加工・変換を施しテストすることでモデルが誤りやすいパターンを発見でき、モデルの改善につながるといった面がある。

ニューロンカバレッジテスティング

ニューラルネットを構成する全ての中間ニューロンが少なくとも一度は活性化するようテストを実行する手法。このテストによって非活性ニューロンが活性する入力データを作ることで、稀な誤りを検出できるとされている。

手順としては、既存のテストデータのカバレッジを計測し、次にテストデータを加工しながら徐々にカバレッジを上げていく。加工結果や勾配に基づいてカバレッジを上げる手法を検討していく。

このテストで全ての誤りを検出できるわけではないが、やみくもに行うよりは効率的に誤りを検出できるとされている。

最大安全半径

入力データxに対して、ノイズなどを付加しても同一の推論結果が得られる最大の安全半径を求めるテスト手法。モデルのロバスト性を評価する目的で使用する。本書ではCNN-Certを紹介している。
https://github.com/IBM/CNN-Cert

手順

  1. 入力データに加えるノイズの初期値εと最小値と最大値を設定。
  2. 初期値εをデータに加えて推論。元のデータの場合と推論結果が一致するか確認。
  3. 推論結果が一致しない場合はεを最大値に、一致する場合は最小値として保存する。(最大値+最小値)/2を新しいεとして手順2に戻る。
  4. 規定回数繰り返して最小値を最大安全半径として出力する。

これを一つのテストデータだけではなく、複数で確認し、平均値等で評価する。

網羅検証

想定される運用時の入力データの範囲で網羅的に検証することで推論結果が妥当もしくは誤っている入力データの範囲・パターンを明確にする。これによって、モデルの改善や運用上での回避策を検討する。

著者らが開発した網羅検証ツールは、XGBoostとDNNに対応しており、入出力の定義を行うと実行できる模様(本にスクリプトのダウンロードサイトが記載されているが未検証)。

最後に

(個人的には)あまりやりたくないテスト工程ですが、必ずやらなきゃいけないし、その手段については常にキャッチアップしておいた方がいいなと思いました。

Discussion