AI/Data Science実務選書『AIソフトウェアのテスト――答のない答え合わせ [4つの手法]』を読み終えた。
最近、業務で需要予測モデルの精度検証を行う機会があった。
R2やRMSE等の精度指標を計算したり、従来の計画値と予測値を比較したり等行っていたのだが、もっと一般的で体系化された検証方法はないのだろうかと疑問に思い、読んでみたのが本書だ。
もっとも、本書には期待していたような精度検証のための内容はほとんど書かれておらず、代わりに書かれていたのはAIのロバスト性(頑健性)や信頼性を評価するための手法について、だった。
初めは少し期待外れで残念な気もしたが、読み進めているうちに、“AIソフトウェアのテスト”に関する手法について知っておくことは決して無駄ではないし、必ずいつか役に立つ日が来るだろう、と思えるようになった。
そんな『AIソフトウェアのテスト』について、まとめたい。
---
一般的に、ソフトウェアやシステムといったコンピュータプログラムは、それが仕様通りに設計されているかどうか「テスト」が行われる。実務でもプログラムの納品を受ける際は、テストの実施有無、実施内容、実施結果は必ず確認するだろうし、また仕様通り設計されているかどうかの確認は発注側の義務でもある。
ただし、AIソフトウェアに関しては、その限りではない。
そもそも、AIソフトウェアの“仕様”が従来のプログラムのようにカッチリ決まる場合はほとんどない。「〇〇の場合に××という結果を返すように」という要望に応えてAIを実装した場合に、100%の精度で〇〇の場合に××という結果を返すことは不可能だ。
なら98%なら良いか、というとそんなことはない。検証用データでは98%が達成できたとしても、これまで確認されなかったようなデータが入ってきたなどの理由により、極端に精度が落ちることだってありえてしまう。
また、ディープなニューラルネットワークやその他AIは、ブラックボックスとも称されるほど、人間にはその計算の内容を(ほぼ全く)理解することができない。そんなAIに対し、仕様をきっちり決めて、その仕様通り実装されていることをテストする必要がどれだけあろうか。
いえいえ、そうもひねくれてはいられない。従来のソフトウェアの範疇に当てはまらないからと言って、AIソフトウェアをテストしなくても良い理由にはならない。
そこで、AIソフトウェアに対して適切に品質保証を行おう。具体的には次の4つの手法が有効だ。
- メタモルフィックテスティング
- ニューロンカバレッジテスティング
- 最大安全半径
- 網羅検証
メタモルフィックテスティング
- 推論 f(x) の結果そのものではなく、推論 f(x) と f(g(x)) の結果を比較することで、AIソフトウェアのテストを行う手法。
- 例えば、f(x) = sin(x) とすると、f(x) の値は f(x+2π) の値に等しい。また、f(x) = -f(x+π) である。このような既知の事実を用いて、それぞれの推論結果同士を比較し、既知の事実が反映されているかを確認する。
- 文字認識AIであれば、例えば数字の画像を右に3度だけ傾けたとしても、元の画像が表す数字と同じ数字になるべきである。この関係を用いて、推論結果同士を比較し、テストする。
- ただし、テストが成功であってもAIの精度そのものは保証されないことに注意せよ。もともと、ある「8」の画像を「6」と認識しているAIが、右に3度傾けた「8」をまた「6」と認識したって、テストは成功と評価される。
ニューロンカバレッジテスティング
- (従来)ソフトウェアの検証の考え方の一つに「カバレッジ」というものがある。これは、プログラムの実行経路のうち命令・分岐・条件の実行網羅率のことだ。命令や分岐が満遍なく実行されるようなテストデータを用いることで、そのプログラムの振る舞いを網羅的に検証する。
- AIソフトウェア、特にDNN(ディープニューラルネットワーク)の場合は、各ニューロンが発火(活性化)する割合をカバレッジを定義できる。DNNモデルを構成する全てのニューロンが少なくとも1度は活性化するようなテストを実施することができれば、そのDNNモデルの全ての振る舞いを確認したとみなすのだ。このニューロンカバレッジが100%に近づくようなテストデータを用意すること、またそのテストデータにおける推論結果やカバレッジを評価することを、ニューロンカバレッジテスティングという。
- モデル改良の際は、ニューロンカバレッジがより高くなるようにしたい。どのようなテストデータを与えるとニューロンカバレッジが小さくなるか確認することで、DNNモデルの弱みを確認できる。
最大安全半径
- 人間には識別できないようなノイズを意図的に加えることで、例えばぱっと見は明らかにパンダの写真であってもAIはテナガザルと認識してしまう、といった敵対的データ攻撃(Adversarial Attack)という事象が知られている。
- このようなノイズを(有効に)利用し、意図的にノイズを加えたデータに対しても元のデータと同じように正しく推論されるかどうかを評価したい。このとき、正しく推論が行われなくなるまでの加えたノイズの量や元のデータとノイズが加えられたデータの“距離”のことを「最大安全半径」と呼ぶ。
- ノイズの追加方法は、例えば画像データであれば拡大・縮小や回転、反転、色を変える、点を追加する等の方法がある。これらはデータ拡張にも用いられる。
網羅検証
- 例えば、f(x) = sin(x) であれば、fの値は-1から1までの値をとる。fを模したAIソフトウェアも同様に-1から1までの値を取るべきで、-10とか100とかの推論結果を返すべきではない。
- このように、既知の事実や常識的な形式知を「検証性質」として記述し、モデルの推論結果がそれら形式知と合わない場合がないか、入力データの範囲で網羅的に検証することを網羅検証と呼ぶ。
- 網羅検証の結果、検証性質を満たさない“反例”が見つかった場合、条件非適合の範囲を特定することで、そのモデルの弱み(や気付けていなかった新たな事実)を発見することができる。
---
リーディングリスト(2022年)_20220107
読み終わった本
- AI/Data Science実務選書『AIソフトウェアのテスト――答のない答え合わせ [4つの手法]』
- ダン・アリエリー『予想どおりに不合理』
- マルク・レビンソン『The BOX コンテナ物語』
- リード・ヘイスティングス『NO RULES 世界一「自由」な会社、NETFLIX』
- ルトガー・ブレグマン『Humankind 希望の歴史』
- O'Reilly『Pythonチュートリアル 第4版』
- 翔泳社『Pythonによるあたらしいデータ分析の教科書』

0 コメント