私のブックマーク
AIの品質・安全性へのソフトウェア工学からのアプローチ
石川 冬樹(国立情報学研究所)
1.はじめに:機械学習工学と「テスト・デバッグ・品質保証 /管理」の技術
AIブームを受け,機械学習・深層学習を用いたシステム(以降単に「機械学習型 AIシステム」と書きます)開発が産業界にて盛んに取り組まれる一方で,開発や品質保証,運用をどう系統的に,効果的・効率的に行うかという工学的な方法論への要請が高まってきました.この動きは特に 2017年後半から 2019年頃に顕著でした.例えば,深層学習モデル(ニューラルネットワーク)に対するホワイトボックステスト,つまり内部動作を分析して多様な挙動を試すようにするテスト技術 DeepXploreが Symposium on Operating Systems Principles(SOSP)2017にて発表され,非常に注目を集めました.
また,国内では機械学習工学研究会(日本ソフトウェア科学会)が2018年度から活動を開始するなど,ソフトウェア工学やシステム工学の観点からの機械学習・深層学習の議論が活発になりました.この時期以降に立ち上がった活動をあげればきりがありません.以降,ソフトウェア工学分野において,機械学習型 AIシステムを扱うことは当たり前となり,トップカンファレンスなどでもそのような論文が非常に大きな割合を占めるようになりました.逆に,機械学習や人工知能のトップカンファレンスにおいてソフトウェア工学の研究者による発表も見られるようになりました.
機械学習型 AIシステムのための工学的アプローチは,ステークホルダとの議論や要求分析から,設計,実装支援,テストや,より強力な検証,運用後の保守・監視まで多岐にわたります.本稿では,国内でも特に大きな動きがあった「テスト・デバッグ・品質保証 /管理」のための技術,つまりステークホルダの受入れや納得に直結する技術,従来は「テスト」,「QA(Quality Assurance)」と呼ばれていた活動に関する技術を紹介します.
2.AI品質ガイドライン
まず国内の動きとして特筆すべきは,機械学習型AIシステムの品質に関するガイドラインがいち早く,しかも2種類発行された点です.一つは,ボランティアの有志団体によるAIプロダクト品質保証ガイドライン(QA4AIガイドライン),もう一つは経済産業省系のプロジェクトを経て産業技術総合研究所を中心にまとめられている機械学習品質マネジメントガイドライン(AIQMガイドライン)です.前者は,ソフトウェアベンダの品質保証部門をリードしてきた方などが多く,テスターが具体的に行う活動などについてより踏み込んだ記述があります.一方後者は,標準化も見据え,これまでの標準を踏まえて用語が的確に整理され,普遍的・規範的な指針が示されています.
両者ともに,データやモデル,システム全体の品質に対するチェックリストのようなものを提供しています.機械学習のプロフェッショナルにとっては当たり前のことも含みますが, 1か所にまとまっていることに価値があるとともに,ソフトウェア工学的観点,すなわち問題領域の分析やステークホルダとのコミュニケーション,チームやプロセスのマネジメントに関する記載もあります.
両者は2018年,2019年とほぼ同時発生的に進められたものですが,異なる位置付けをもつため,相互に連携しつつ棲み分けられています.ガイドラインの記述は抽象的になりがちであったり,具体的な技術解が現時点では限定的であったりするため,自動運転やプラント保安など,特定領域でのサブガイドラインやケーススタディを中心に継続的な更新がなされています.
3.テスト技術
前述のDeepXplore以降,ニューラルネットワークを主な対象として,テスト技術の研究が非常に活発になされています.もともとソフトウェア工学分野では,テスト技術は産学ともに最も活発に取り組まれている領域です.
3・ 1 初期の動向
DeepXplore以降の初期の取組みは,2020年前後によくサーベイ論文にまとめられています.代表的なものとして以下があります.
- Zhang, J. M. et al.: Machine learning testing: Survey, landscapes and horizons, IEEE Trans. on Software Engineering, Vol. 48,pp.1-36(2020)
- Riccio, V. et al.: Testing machine learning based systems: A systematic mapping, Empirical Software Engineering, Vol. 25, pp.5193-5254(2020)
この時期は特に,メタモルフィックテスティングとニューロンカバレッジという二つのアプローチが注目を浴びたといえるでしょう.
§1 メタモルフィックテスティング
従来ソフトウェアのテストでは多くの場合,各入力に対し期待される「正解値」を用意し,テスト対象を実行した結果がそれと合わなかったならば欠陥(バグ)があると考え調査します.この際に「正解値」を導く基準をオラクルと呼びます.機械学習型 AIシステム,あるいはより広く AIシステムでは,各入力に対し唯一の正解値を定めるオラクルが存在しない,あるいは得るコストが高いという課題があります.もちろん同様の問題は,シミュレータや数値計算などにおいて従来から存在していましたが,AIシステムに対して改めて高い注目を浴びました.
この問題に対する一つの解として,メタモルフィックテスティングがあります.簡単には,ある入力に対して出力を検証できないときに,「入力を変えると出力はこう変わるはず」という関係(メタモルフィック関係)を定義し検証するという考え方です.これにより,期待する出力が唯一に定まらないような場合でも,「この関係を満たさなければテスト失敗と定義し,欠陥の存在を疑う」という検査が実現できたり,システムが満たす性質を追求して挙動の理解を深めたりすることができます.
機械学習モデルに対する頑健性のテスト,つまりAdversarial Testingは,自然とメタモルフィックテスティングの形となります.DeepXploreの後継であるDeepTestをはじめとして,入力に摂動を与えたときの出力変化を見ていくテスト技術が非常に多数発表されました.
また,訓練パイプライン自体をテストするためにメタモルフィックテスティングを使う取組みも行われました.訓練パイプラインへの入力となる訓練データセット・テストデータセットに対し,RGB入替えや上下入替えを行うことで,特定画像の分類結果など出力が変わらないことを確認することで,訓練パイプラインの実装バグを見つけます.ただ,この手のメタモルフィックテスティングは,「システムとして重要なことをテストしている」というよりも欠陥をあぶり出す手段という感じで,費用対効果の捉え方がなかなか難しいかもしれません.
§2 ニューロンカバレッジ
DeepXploreにおいて注目を浴びたのは,ニューロンカバレッジの概念でした.従来のプログラムコードに対するテストでは,用意したテストスイート(テストケースの集まり)によってどれだけ多くの文や分岐,条件が実行されたかによって,テストスイートの適切さを測ることが慣習となっています. DeepXploreにおいては,深層学習モデル(ニューラルネットワーク)内のニューロンをどれだけ発火させたかによりテストスイートの適切さを測るニューロンカバレッジを提唱し,その値を上げるようにテストスイートを生成しています.当初のニューロンカバレッジは単純なものでしたが,コードカバレッジと同様に,多様なカバレッジ指標が提案されました.
ただし,ニューロンカバレッジの有効性についてまださまざまな実証が行われているところです.少なくとも,人が意図をもって構築した要素に対する網羅性を考えるコードカバレッジとは異なり,網羅性ではなく多様性を指向しているものといえるでしょう.データの空間(画像であればピクセル値)での多様性ではなく,ニューラルネットワークの振舞いの違いに着目する点は,重要であるように思えます.しかし例えば,ニューロンカバレッジは高いが,敵対的サンプルを見つける能力は低いようなテストスイートをつくれる可能性があります.また,敵対的サンプルを見つける能力と,自然な入力で失敗するサンプルを見つける能力との違いなど,多くの議論が巻き起こっています.もともとコードカバレッジ自体は,多くの実証データに支えられたヒューリスティックなものでもあるため,機械学習型 AIシステムの品質に関する実証を積み重ねていくことが重要になるでしょう.
3・ 2 その後の多様な展開
以上の取組みは機械学習工学の立上げ期,初期のものです.これらを踏まえて,機械学習型 AIシステムのテストについての探求が続いています.例えば,テストの適切さについても,訓練データに対する振舞いとの差や不確実性指標(Bayesian Dropoutによるもの)など,別の観点から指標を定めた取組みがあります.
従来,ソフトウェアでは,欠陥をあぶり出してすべて潰すことが重要であったので,「あら探し」のような側面もありました.一方で,機械学習モデルは本来不完全なもので,常に100%の正解を出すことはないため,むやみに「あら探し」をすることの費用対効果が高いとはいえないかもしれません.その意味では,性能限界を示すような成功・失敗の入力ペアを探索したり,失敗が多いような入力領域がどのような属性をもつか探索したりするなど,ステークホルダへの説明・保証につながる情報を探るテストが重要だと個人的には考えています.
- Riccio, V., and Tonella, P.: Model-based exploration of the frontier of behaviours for deep learning system testing, Proc. of the 28th ACM Joint Meeting on European Software Engineering Conf. and Symp. on the Foundations of Software Engineering,pp.876-888(2020)
- Abdessalem, R. et al.: Testing vision-based control systems using learnable evolutionary algorithms, Proc. of the 40th Int. Conf. on Software Engineering,pp.1016-1026(2018)
4.形式手法によるアプローチ
安全性が重要な領域では,従来のプログラムやその前段となる設計モデルの信頼性を確保するために,オートマトンや述語論理,SMTソルバーなど数学的な基盤に基づいた手法(形式手法,formal methods)が用いられています.機械学習モデルに対しても,このような手法の適用が追及されています.
4・ 1 形式検証
形式検証においては,検査対象が仕様を満たすかどうかを検査します.テストがあくまで「仕様を満たさない例を探す試み」であるのに対し,形式検証では「仕様を満たさない例がない場合は,そのことを保証できる」といった強力な性質をもちます.
ランダムフォレストモデルなど,決定木に基づく機械学習モデルは,もともとプログラムに計算構造が近く,SMTソルバーなどで扱うことができます.ニューラルネットワークの場合,活性化関数など固有の計算構造を扱う必要があります.専用のSMTソルバーを構築するような試みもありますが,個人的には抽象解釈と呼ばれる技術を用いた手法に注目しています.抽象解釈においては,一定の入力集合に対し,ニューラルネットワークの出力がとり得る範囲を「広めに」計算します(過大近似).「広め」にもかかわらず,仕様を満たさない例がなければ,本来とり得る出力は必ず仕様を満たすといえます.
ニューラルネットワークに対する形式検証において最も盛んに扱われている仕様は,頑健性に関するものです.ISOでも頑健性に関する形式手法の利用について議論が進んでいます(ISO/IEC FDIS 24029-2).頑健性に関する形式検証では,入力に一定の摂動を加えても出力が変わらないことを示します.上で紹介した抽象解釈の論文も,頑健性を扱う検証技術です.
さらに発展として,生成モデルと分類モデルをつなげて形式検証にかけることで,髪色の変化や顔の角度の変化など,潜在空間上の意味的な摂動により分類結果が変わらないことを検証することもなされています.
ニューラルネットワークに対する形式検証では,頑健性以外の仕様も扱われています.特定の範囲の入力に対して出力が満たすべき要件を定めたり,公平性を扱ったりすることもあります.
ニューラルネットワークに対する形式検証においては,プログラム対象のときと同じく,スケーラビリティが懸念となります.現在はコンペティション(URLは2023年開催のもの)形式でさまざまなツールが競い合うようになっており,今後ツールがより整備されるとともに,より良いツールが選出されていくでしょう.
4・ 2 仕様マイニング・形式的モデル修正
形式検証は,モデルと仕様を入力とし,仕様が満たされるか判断するタスクを扱うものでした.従来形式手法では,他にも「モデルから,それが満たす仕様を抽出する」仕様マイニング,および「仕様を満たすようにモデルを修正する」モデル合成というタスクも考えられてきました.ニューラルネットワークに対してもそのような取組みが出てきています.仕様マイニングの場合,例えば,「入力画像のピクセル値がこれら二つの画像の間なら分類結果は同じになる」「入力のセンシング値がこの範囲の場合は必ずこのコマンドが選択される」というような性質を抽出できます.このような保証付きの仕様マイニングやモデル合成は,より難しい技術となりますが,今後より発展していくとよいなと考えています.
- Gopinath, D. et al.: Property inference for deep neural networks, Proc.of the 34th IEEE/ACM Int. Conf. on Automated Software Engineering, pp.797-809(2019)
- Sotoudeh, M. and Thakur, A. V.: Provable repair of deep neural networks, Proc. of the 42nd ACM SIGPLAN Int. Conf. on Programming Language Design and Implementation, pp.588-603(2021)
5.ニューラルネットワークの問題分析・修正技術
テストや検証の技術により問題を見つけるだけでなく,その問題の原因を探る「デバッグ」まで支援することが重要です.従来,プログラムに対しては,欠陥局所化(Fault Localization)技術とプログラム自動修正(Automated Program Repair)技術が 2010年代に非常に盛んに取り組まれました.欠陥局所化技術としては例えば,成功したテストケースと失敗したテストケースの通過箇所を比べることで,プログラム内の欠陥位置を推定するSpectrum-based Fault Localizationがあります.プログラム技術では,与えられたテストスイートをパスするまで,典型的な欠陥のパターンを踏まえてた修正操作の適用方法を探索するGenerate & Validateアプローチがあります.
ニューラルネットワークに対しても,正しい出力の成功や失敗に影響した要素を推定・分析し,追加訓練データの合成(augmentation)や,ニューラルネットワークのパラメータ調整を行うアプローチがあります.例えば,同じニューラルネットワークのアーキテクチャに対して,訓練データのサブセットのみを用いて構築したバージョンや過去のバージョンなどとの差異を分析することで,現在のモデルが失敗している入力に対して成功させるようなパラメータの修正方法のヒントを得る取組みがあります.ニューラルネットワークの修正・更新は,データを追加しての再訓練を用いることが多いですが,このように異なるアプローチによるモデル修正の研究も増えていっています.
- Zhang, P. and Chan, W. K.: Apricot: A weight-adaptation approach to fixing deep learning models, Proc. of the 34th IEEE/ACM Int. Conf. on Automated Software Engineering,pp.376-387(2019)
- Tokui, S. et al.: NeuRecover: Regression-controlled repair of deep neural networks with training history, 2022 IEEE Int. Conf. on Software Analysis, Evolution and Reengineering,pp.1111-1121(2022)
「ねらった」形でモデル修正をすることは機械学習では難しいことですが,実用上は重要だと考えられます.安全性が重要な領域では,特定種類の誤り発生率が高すぎるとリスクをステークホルダが受け入れられないことがあるでしょう.また,従来ソフトウェアでいう「デグレ」のように,「以前できていたことができなくなる」ことが,ユーザがもつ AIへの期待・性能限界の理解などの観点で望ましくないこともあります.このような要求は,上記のようなモデル修正アプローチに限らず,後方互換性を反映した損失関数を扱うアプローチ(例えばMicrosoftのもの)などでも扱われています.モデル修正の技術は,機械学習コミュニティが本来盛んに取り組んでいる方向性に近いといえますが,プログラムのデバッグ技術を展開していたり過去バージョンの情報を使ったりするなど,多様なヒューリスティックで挑んでいます.
6.システムの安全性を重視したアプローチ:自動運転を例に
6・ 1 包括的な安全性論証
自動運転は,機械学習型 AIの適用対象として最も安全性が重要となる領域の一つです.ここまで紹介した論文も,自動運転を評価の題材としているものが多くあります.多様な取組みがありますが,現時点でガイドラインとして参考になるのは,ANSI/UL 4600でしょう(本稿校正時点ではEdition 3).
ANSI/UL 4600では,機械学習型の自律システムに対して行うべき論証の項目を列挙しています.これは,「システムがどうして安全といえるのか」について,論拠を示しながら木構造で論証するセーフティケースという考え方を想定しています. AIQM・ QA4AIの両ガイドラインについては本稿2章に触れましたが,ANSI/UL 4600では,オントロジーの整理と運行設計領域(ODD:Operational Design Domain)の分析,未知オブジェクトの実行時の検知など,より自動運転や安全性に踏み込んだ項目が列挙されています.
ほかにも,欧州の自動車企業が合同でまとめたガイドライン(SaFAD)をもとにしたISO/TR 4804では,実行時の監視に関するアーキテクチャや原則などが整理されています.また,自動車の安全性に関する二つの標準(ISO 26262, ISO 21448)においては,機械学習型 AIをどう扱うのかがやや不明確でしたが,その点に特化したISO/PAS 8800が本稿執筆時において策定中です.なお,二つの標準というのは,故障などによる事故リスクを低減する古典的な機能安全(ISO 26262)と,センサや AIの性能限界や不適切な動作仕様による事故リスクを低減する意図機能(ISO 21448:SOTIF)の両面を扱う必要があるということです.
6・ 2 安全性のための技術
本稿でここまで紹介した技術に加え,不確かさの測定(いわゆるAleatoric Uncertaintyと Epistemic Uncertainty)など,安全性が重視される領域で注目されている技術については,以下のサーベイ論文によくまとまっています.頑健性など機械学習コミュニティでも盛んに取り組まれているアプローチをカバーしているので,ソフトウェア工学コミュニティに閉じないサーベイとなっています.
本稿でここまで触れていない観点として,ハザード分析やリスクアセスメントの技術があります.より踏み込むと,システム全体のリスクを踏まえて,部品となる機械学習型 AIの性能要件をどう定めるかという問題があります.自動運転では,認知機能,すなわちカメラ入力からの物体の検出・分類に機械学習型 AIを用いますが,それはあくまでシステムの一部にすぎません.例えば,遠くの歩道にいる歩行者を見落としても,システム全体としては全く問題ないことがあります.一方で,目の前の歩行者を見落とすと,必要なブレーキをかけずに大きな事故につながる可能性があります.
このような分析は,従来FMEA(Failure Mode and Effect Analysis)という手法で故障の影響分析を行ってきたものに似ています.このため,Classification-FMEAとして機械学習型 AI(分類タスク)に特化してリスク分析手法を整理した取組みもあります.さらに発展として,具体的な性能要件導出を確率の観点から整理した取組みもあります.従来のリスク分析手法(STPA, FMEA, FTAなど)でも誤識別の影響分析は可能だとは考えますが,そこから機械学習型 AIの性能要件という具体的な定量的指標にどう落とし込むかは重要ながら難しい課題だと感じています.
- Salay, R. et al.: A safety analysis method for perceptual components in automated driving, 2019 IEEE 30th Int. Symp. on Software Reliability Engineering,pp.24-34(2019)
- Salay, R. et al.: The missing link: Developing a safety case for perception components in automated driving, SAE Technical Paper 2022-01-0818,pp.1-13(2022)
7.おわりに
ここまで,ソフトウェア工学やテスト・検証技術の分野で議論されているような技術について紹介してきました.品質や安全性には「総合解」が必要なので,ここでは紹介しなかった訓練・構築のための手法,デザインパターン,MLOps(勉強会が盛ん)とも連動していくことが重要となります.
これまでの取組みには,ソフトウェア工学の研究者や実務者が,機械学習・ AIを学びながら進めたヒューリスティックなものも多くあります.今後,実証的な研究を通して,重要な経験則やテスト指針が確立されていくことが重要でしょう.さらに,本来あるべき姿として,ソフトウェア工学,つまり開発や品質保証,運用に関する原則やニーズ,技術と,機械学習・ AI自体の理論や技術がより深く融合することが必要不可欠です.これにより,高品質・安全な AIの産業応用が安定して効率的に進められるための方法論・技術基盤が整備されていくことを願っています.筆者自身もそのための研究を進めていきます(今はモデル修正と安全性に焦点を当てたプロジェクトを進めています).