#あなたは誰?
8年ほどソフトウェアQA→起業、プログラマ経験のあるフリーランスです。
どっちかっていうとIT寄りで、QMSを求められる産業におりました。
AI開発の現場には携わったことはありません。
#この記事を書こうと思ったきっかけ
昨今ディープラーニング(以下、DLという)を活用した様々なサービスが提供されていますが、サービス開発している社長様と「作るのはいいけれど、品質保証はどうするねん?」ということでディスカッション(≒雑談)していました。
ここで、そういえばDLの品質保証ってどういうことが考えられるかな?と気になったのがきっかけです。
ということで、まずは画像認識のディープラーニング製品のテストフェーズという仮定で、テストの品質保証ついて思いつくまま考察してみました。
DLが注目されてから随分時間が経つため数多く議論されている話題かとは思いますが、何かのお役に立てれば幸いです。
#用語の定義
・本投稿におけるテストとは、製品レベルでの検証行為を想定します。プログラムモジュール単体ではありません。
・本投稿における品質保証とは、製品実現のために必要な行為全般の保証を示し、本投稿では専らテスト工程の品質保証について考察したものです。
#免責事項
あくまで第三者から見た考察なため、実際の開発現場の方からは過不足のある部分があるかと思います。その際はご容赦いただき、特に不足部分、誤りについてはコメントなどいただけると幸いです。
#DLのテストの最大の特徴
最大の特徴は、テストにおいて出力の期待結果(基準解)を人間が導出できるか否かではないでしょうか?
DL(画像認識によって猫の顔を認識させる場合)のテスト工程を、ざっくり以下の通り仮定します。
- 学習用にアノテーションデータを用意する
- 学習させる
- テスト用の入力画像によりテスト実行する
- OK/NG判定 期待解通りに認識しているか否かを確認する
※参考としてTensorflow,Kerasにより猫を認識させた結果を載せます↓
#DLのテスト品質保証に関する考察
ここからが本題になります。各工程でどのように保証できるかを考察してみました。
##1. 学習用にアノテーションデータを用意する
・どのアノテーションデータを使用したのか?
・誰が、いつ、どのツールを用いたか?特に、医療画像をアノテーションする場合は適切な人物が実施したかどうかも管理が必要と思われます(専門医などでしょうか?)。
ただし、数百〜数千枚の教師用画像を1枚ずつ記録すると大変なので、100枚ごとに管理するなどまとめるのが現実的ではないでしょうか。
##2. 学習させる
学習に用いたプログラムのバージョンを管理する必要があるでしょう。
##3. テスト用の入力画像を用いてテスト実行する。
この工程では、テストに用いた画像セットが特定できるよう管理しておく必要があります。
##4. OK/NG判定
ここがDLテストの品質保証での悩みどころなのでは無いでしょうか?
というのも、従来のプログラムとは異なり基準解を人間が用意することが困難なためです。
(上図の例でも、catfaceのスコアが幾つになるべきかを手計算で求めるのは困難かと)
ということで、テスト基準解を考えてみます。
私の現状持ち得る案は以下の2通りになります。
i)期待した通りに猫と判別してくれること。上図の場合は、四角で判定してくれること。タグの後ろに導出されるスコアは考慮しない。
ii)期待した通りに猫と判別してくれ、かつ全てのスコアが○○以上であること。
といったところでしょうか。
さらに、テスト用入力データの何%が基準解(i,ii)を満たすべきか、も設定する必要があると思いますが、これはシステムで求められる精度によって決めることになると思います。
例えば、医療画像の診断装置であれば、
・人間の正答率より高いこと(≒誤診率が人間より低いこと)または
・あらかじめ正解が分かっているものは100%正答率であること
というところを議論する必要があります。
#まとめ
以上、現時点でのAI製品テストの品質保証に関する考察をまとめてみました。
AIを医療、交通といった社会的なインフラに活用する場合にはどうしても気になってしまうポイントかなと思いました。何かのお役に立てたら幸いです。