ソフトウェアの品質を学びまくる2.0

ソフトウェアの品質、テストなどについて学んだことを記録するブログです。旧ブログからゆっくり移行中です。http://blog.livedoor.jp/prjmng/

AI/DLシステムの説明可能性と組み合わせテストの関係

はじめに

 辰巳敬三さんが先日、このようなツイートをされていました。

 「An Application of Combinatotial Methods for Explainability in Artificial Intelligence and Machine Learning」(人工知能や機械学習の説明可能性に対する組み合わせメソッドの適用)。

csrc.nist.gov

 AIを組み込んだシステムの説明可能性(explainability)は、よく言及されるところです。5月に発行された『AIプロダクト品質保証ガイドライン』では、説明可能性について以下のように述べています。

 説明可能性・解釈性(Explainability/Interpretability)は、システムからの出力を用いる人間が、出力を得る際に用いられた判断基準(モデルが学習した規則性)について把握することができる程度を表す〔ガニング2016〕。要求や振る舞いを明確に形式知として書き出せない場合でも機能を実現できることが機械学習の強みである。しかし、人間が出力を参考にして意思決定を行う場合など、アプリケーションによっては説明可能性・解釈性が必要となる。

 説明可能性をもったAIは、「XAI」(eXplainable AI)と呼ばれています。
 システムがどのような推論を経て最終的な判断・結論を得たかを考える説明可能性の話と、ソフトウェアテスト技法の文脈で現れる組み合わせテスト。一体何が関係あるのかと思って、紹介いただいた資料を読んでみました。なお本資料はホワイトペーパーのドラフトという位置づけです。

概要

 もしかするとこちらを見れば一瞬で理解できるのかもしれませんが・・・。

csrc.nist.gov

 以下、ポイントを要約してみます。誤読あればご指摘ください。

Abstract

  • 組み合わせテストにおける欠陥の所在特定(location)の方法を、AIによる判断の説明に適用することができる。
  • 適用するのは、対象の特性(characteristics)に基づいてメンバーシップを決定する、分類(classification)の問題。
  • メンバーであれば持っているが、非メンバーは持っていない特性の組み合わせを特定する。

Background

  • AIの正確さと説明可能性はトレードオフの関係にある。
    • たとえばCNNは現在もっとも正確な方法であるが、内部計算についての説明には欠けている。ドメインには詳しいがAI/MLに詳しくない人に、結論を理解してもらう必要がある。
    • ルールベースのシステムは結論を理解しやすい。たとえば、「もし症状Aが、症状Bか症状Cと一緒に現れていたら、診断はXである」というロジックがわかる。一方、正確さでは劣る。
  • 機械学習における分類の問題と、ソフトウェアの組み合わせテストにおける欠陥の所在特定は、ともに非常に多くのプロパティや値の組み合わせを特定することが目的。
    • 組み合わせテストにおいては、SUTの故障のトリガーとなる組み合わせ
    • AI/DLシステムにおいては、ある結論を導き出す組み合わせ
  • AI/DLシステムが結論を導く変数の組み合わせを特定するために、組み合わせテストのツールを活用できる。

Fault Location

  • 組み合わせテストの難しさは、faultのトリガーになる要素が1つでないことに起因する。どの値の組み合わせが故障につながるのかを特定したい。
    • 15個あるパラメタから4個の組み合わせをとると、1,365パターンになる。
  • 従来のパラダイムとしては、「成功したテストには現れず、失敗したテストに現れる組み合わせ」を探す。前者に現れる組み合わせは明らかにトリガーでない。
  • ComXAIというツールを使って、クラスに分類されなかったデータにおける、t-way組み合わせを分析する。

Examples

  • 「爬虫類かそうでないか」の分類を、16個の属性から判定する例。2つの属性の組み合わせ(2-way)は120、3つの属性の組み合わせ(3-way)は560種類ある。
  • たとえば属性の1つ「歯があるかないか」が取りうる値には「歯がある」「歯がない」があるが、これらの値はともに、「爬虫類」クラスに分類されたものにも、「非爬虫類」クラスに分類されたものにも現れる。つまり、属性「歯があるかないか」は、単独ではクラスを識別することができない
  • 次に2-way。「歯がある」「足の数が4」という組み合わせは、「非爬虫類」クラスのデータのうち2.1%に現れる組み合わせ。よってこれでもクラスの識別のための属性群としてはまだ弱い。
  • 3-wayになると、「爬虫類」クラスのデータには現れるが「非爬虫類」クラスのデータにはまったく現れない値の組み合わせが出てくる。
    • たとえば、「水棲である」かつ「歯がある」かつ「足の数が4」。
  • これらの組み合わせは、「爬虫類である」と判断するためのルールと見なすことができる。

Discussion

  • 「あるクラスには現れるが、それ以外のクラスには現れない」パラメタ値の組み合わせを見つけてルールセットとすることで、AI/DLシステムによる結論に、直感的な説明を与えることができる。
  • 結論の説明だけでなく、DLの分類モデルのアルゴリズム実装にもこのアプローチを使うことができるかもしれない。
  • 小規模な問題であっても組み合わせパターンは膨大になるため、得られたルールセットは巨大なものになりうる。また過学習も問題になる。

所感

 AIシステムと組み合わせテストの関係がまったく想像つかなかったのですが、読んでみるとシンプルなアイデアで、面白いと思いました。ただ、いくつかよくわからない部分もあります*1

(1)どちらにも現れない組み合わせ

 上の例を借りると、「非爬虫類のデータには現れない値の組み合わせは逆に、爬虫類であると判定するためのルールと見なすことができる」というアイデアです。でもたとえば「足が13本である」というデータは、「爬虫類」側にもない(または希少)なので、「爬虫類」であるとする判定には使うべきでないでしょう。「爬虫類クラスのデータには十分に現れている組み合わせ」であることも必要条件なのではないかと思いました*2

 「足が13本」のような極端な話でなくても、「爬虫類」クラスのデータにたまたま現れなかった値の組み合わせをもって「非爬虫類」クラスに分類するためのルールとされても困る。これが Discussion にあった過学習の問題でしょうか。

(2)用意されたデータ

 「画像を見てどの動物かを分類する」というシステムにおいて、「歯がある」「足が4本ある」のような属性と値のセットがデータとして与えられるのは普通なのかな?と思いました。
 このペーパーでは、爬虫類か否かの分類の例の他、二酸化炭素濃度などのセンサーデータから部屋が使用中か空きかを判定する例と、リンパ系造影法(lymphography)の画像から病理診断を行う例が紹介されています。ともに、分類を行うための属性と値が明確。属性自体が不明の場合はまた話が別ですね。

(3)予想もしなかった組み合わせ

 ルール導出の結果、「なるほど」と思えるものだけでなく、「はあ!?」となる「ルール」が現れる可能性があります。一見、まったく無関係に思える組み合わせが、結論に関与しているようなケースです。これにどう対応するのかというのが疑問でした。
 これは Conclusion and Research Direction の最後にちらっと書かれています。

 クラスを特徴づける要素の組み合わせがユーザの期待に合致しないようであれば、導出されたクラスに欠陥があるのかもしれない。あるいは、予期していなかった関係が結果に影響しているのかもしれない。いずれにしても、モデルをより理解することにつながる。

 得られた組み合わせ・ルールを必ずしも真と見なすわけではなく、モデルの見直しや、未知の要因の発見につなげるのですね。

*1:ペーパーの問題ではなく、読む側の問題だと思われますが・・・

*2:ComXAIで計算しているのは、「爬虫類」のデータに現れた組み合わせに絞っているのかもしれない。

Open QA4AI Conferenceに参加してきました。#qa4ai

 5/17(金)に、「Open QA4AI Conference」が上野にて開催されました。

qa4ai.connpass.com

 この日に合わせて、QA4AIコンソーシアムによる『AIプロダクト品質保証ガイドライン』も公開されており、セッション1では電通大の西先生がその解説をされています。

www.qa4ai.jp

 各団体の代表の方によるプレゼンテーションも学ぶところが大きかったのですが、最後のパネルディスカッションにおける議論が白熱してとても面白かったので、忘れないうちにメモしておきます。

 その際のトピックは「期待のマネジメント」 (Expectation Management) だったのですが、メディア枠で参加されていた進藤智則さん*1に西先生が、「世の中にAIのシステムの特性を理解してもらうために、メディアはどのような役割を果たすべきか」と無茶ぶりした際の議論です。
 自分の理解の範囲での表現・サマリーなので、誤りがあるかもしれません。

twitter.com

「確率論的」という言葉について

 進藤さんのご指摘は以下の通り。 

  • 「決定論的」 (deterministic) という言葉と「確率論的」 (stochastic) という言葉の使い方が粗く、概念が揺れていると感じる。
  • 「確率論的」という話は、モデル実装時とモデル利用時の2つのフェーズで使われるため、明確に分けるべき。
  • 実装時、たとえばSDG (Stochastic Gradient Descent、確率的勾配降下法) にはランダム性がある。つまり確率論的である。
  • 利用時について、「同じモデルに対して同じ入力を入れれば、得られる出力も同じ」という決定論的な表現があったが、GAN (Generative Adversarial Networks) ではランダムシードを入れるので、確率論的になる。一方CNN (Convolutional Neural Network)では決定論的になる。

 産総研の石川先生はこのご指摘を受け入れたうえで、「さらにもう一つの軸がある」とおっしゃっていました。

  • モデル利用時の出力が決定論的であっても、人間が同じように感じるとは限らない。人間にとっては等価な(しかし実際には別の)入力に対し、モデルが別の出力をすれば、人間は「ふるまいが確率論的だ」と感じるかもしれない。

「確率的」がネガティブな意味を伴うことについて

 進藤さんのご指摘は以下の通り。 

  • 「確率的である」ことが、ネガティブなニュアンスで説明されている。このスタンスは、世の中への啓蒙には適切でない。
  • SDGにはランダム性があり、それによって複雑なポテンシャルを探索して賢くなる。ランダム性・ノイズは機械学習の本質。*2

 パネラーである産総研の大岩さん*3からの回答は以下の通り。

  • 今はランダム性による探索がうまくいっているが、実はなぜそれがうまくいくのかはよくわかっていない状況。将来はランダム探索よりよい探索方法が見つかるかもしれない。
  • いずれにせよ現時点では、サイエンスコミュニケーションを通じて世の中の人たちに確率を理解してもらう必要がある。

 文字にするとあまり長くないのですが、15分くらい話が続いていたと思います。
 「なぜその判断となったか」の説明可能性についてはこれまでもよく聞いていましたが、「確率論的とはどういうことか」も社会全体が広く理解していくべきテーマだということがわかりました。

*1:『日経ロボティクス』編集長の方です

*2:ここでいう「ランダム性」は、モデル実装時の話

*3:にしさんに教えていただきました、ありがとうございます。

ドメイン分析テスト周りの用語の整理メモ

 Twitter上で不定期に議論になる、ドメイン分析テストにおけるOn/Off、In/Outなどについての整理メモ*1です。
 同値分割、境界値分析、ドメイン分析についての概要を知っていることを前提としています。

用語の定義

 『ソフトウェアテスト技法ドリル』でも『はじめて学ぶソフトウェアテスト技法』でも、On/Off、In/Outはドメイン分析テストで導入される概念です。

ソフトウェアテスト技法ドリル―テスト設計の考え方と実際

ソフトウェアテスト技法ドリル―テスト設計の考え方と実際

 ドメイン分析テストでは、あるパラメタの境界値に対し、別のパラメタの「あたりさわりのない値」を組み合わせていきます。これをクリアに整理するために、境界値分析ではなくドメイン分析テストで説明しているのではないかと思います。

On/Off、In/Out

 ドリル本では以下のように定義しています。文章からの抜粋です。

  • On 注目している境界値
  • Off Onポイントに対して境界値分析をしたときに見つかる隣接したもう一つの境界値
  • In ドメインの内側(On/Off以外)
  • Out ドメインの外側(On/Off以外)

 ドメインの内側か外側かというのは排他であり、OnとOffも排他なので、この4つの概念はMECEです。

ドメイン開/閉の定義

 ドメインの開閉は以下のように区別されます。リー・コープランドさんの『はじめて学ぶソフトウェアテスト技法』を参考にしています。

はじめて学ぶソフトウェアのテスト技法

はじめて学ぶソフトウェアのテスト技法

  • ドメイン境界が「=」「≧」「≦」で表現される場合、そのドメインは「閉じて」いる。
  • ドメイン境界が「>」「<」で表現される場合、そのドメインは「開いて」いる。

 ではそれぞれ、絵と一緒に見ていきます。

ドメインが「自然数n≧10」である場合

 これ以降の絵の黒丸●と白丸〇は、有効同値・無効同値の意味ではなく、明示した数字を含む(●)か含まない(〇)かの意味です。

01

 ドメインの定義に使われている「10」がOnになります。境界の逆側すぐそばにある「9」がOffになります。
 ドメインの内側にあるもののうち、On/Offを除く11以上の自然数がInになります。
 ドメインの外側にあるもののうち、On/Offを除く8以下の自然数がOutになります。

ドメインが「自然数n>10」である場合

02

 ドメインの定義に使われている「10」がOnになります。On自体はドメインの内側にないことに注意が必要です。
 境界の逆側すぐそばにある「11」がOffになります。
 ドメインの内側にあるもののうち、On/Offを除く12以上の自然数がInになります。
 ドメインの外側にあるもののうち、On/Offを除く9以下の自然数がOutになります。

ドメインが「自然数n=10」である場合

03

 ドメインの定義に使われている「10」がOnになります。
 この場合、隣り合うドメインは、10の右と左の両側にあるので、境界の逆側すぐそばにある「9」と「11」がOffになります。
 ドメインの内側にある10がInになりそうですが、Onに該当する値はInから除かれるので、この場合Inはありません。
 ドメインの外側にあるもののうちOn/Offを除く、8以下の自然数と12以上の自然数がOutになります。

各要素の関係

 On/Off/In/Out、ドメインの開閉、ドメインの内外で、単純には組み合わせが16パターンありそうですが、以下の制約があるために実際には8パターンしか現れません。

  1. 開いている ∧ On ⇒ 当該ドメイン外*2
  2. 開いている ∧ Off ⇒ 当該ドメイン内
  3. 閉じている ∧ On ⇒ 当該ドメイン内
  4. 閉じている ∧ Off ⇒ 当該ドメイン外
  5. In ⇒ ドメイン内
  6. Out ⇒ ドメイン外

 Boris Beizerさんはこの2個目と4個目を、「COOOOI (Closed Off Outside, Open Off Inside)」と称しているそうです。

ドメインの内外と、クラスの有効無効

 さて、ここまで「有効同値クラス」「無効同値クラス」という言葉を使っていません。最初の例がもし、「10以上の自然数のみを受け入れる」というものであれば、9以下の自然数は無効クラスになります。よってドメイン内は有効同値クラスに相当し、ドメイン外は無効同値クラスに相当することになります。

 一方、「10歳以上は有料とする」という仕様を対象にするテストであれば、10以上も9以下も有効同値クラスです。この閉じた境界仕様で「9歳」はOffにあたりますが、無効同値クラスではありません。
 ドメインの内外と、クラス有効無効を混同しないというのも注意点の1つかなと思います。

コープランドさんの定義

 さて、コープランド本も確認しておきましょう。

はじめて学ぶソフトウェアのテスト技法

はじめて学ぶソフトウェアのテスト技法

 On/Off、In/Outは以下のように定義されています。

  • Onポイント 境界上の値
  • Offポイント 境界上になく境界に隣接する値
  • Inポイント すべての境界条件を満たすが境界上にはない値
  • Outポイント いずれの境界条件も満たさない値

 ドリル本と、Offの定義が違うように見えませんか?

  • Off Onポイントに対して境界値分析をしたときに見つかる隣接したもう一つの境界値

 ドリル本では、Offを「もう一つの境界値」としている。コープランド本では、Offを「境界上にない」としている。
 この違いはどこから生まれるのかいろいろ考えたのですが、「境界」に対するイメージの違いなのかなと解釈しています。

 ドリル本だと、境界はこの斜線部分の両端です。物理的なパーティションと同じように厚みがあり、その表面がそれぞれ「境界」です。

04

 コープランド本だと、境界はあくまで「10」上の、厚みのないものです。よってOffは境界上にないことになります。

05

 この例ではnを自然数としていますが、値が連続値の場合はどうなるでしょう。パーティションの厚さはどんどん薄くなり、最終的には、そして数学的にはゼロになりそうです。

 ソフトウェアの場合はどうでしょう。
 精度が無限に高いということはなく、どこかの桁で止まることになります。パーティションは有限の厚さ(ドリル本でいう「d」にあたる)を持つことになります。と考えると、イメージとしてはドリル本の定義の方がしっくりくるように思います。

 同値分割に関する湯本さんの記事に、以下のようなお話がありました。

境界値に仕切り板は1枚なはずですが、同値クラスの箱で考えると隣接する複数の仕切り板があるように考えられてしまいます。けど、そんなことテストケースの洗い出しで考えられないです。仕様からちゃんと境界値、つまりOnPointを分析しなければならないのはそう言う理由だと思います。

 この「複数の仕切り板」というのが、「有限の厚みをもつ壁の両端」に当たるのではないかなあと思います。

*1:この記事は、以下のスレッドなどで秋山さんや辰巳さん に教えていただいたことを自分なりに表現したものです。いつもありがとうございます。

*2:ドリル本では「隣接ドメイン内」と呼んでいます。

同値分割の「partition(ing)」という単語についてのメモ

 同値分割に関する湯本さんのnoteを読んでの、単なるメモです。

note.mu

 そもそも、part、partition、partitioning と、英単語の時点でややこしいんですよね。以下、Oxford Dictionaryからの引用ですが、適宜はしょっています。

part

An amount or section which, when combined with others, makes up the whole of something.

 日本語でいう「部分」ですね。他の「部分」と合わせることで、「全体」を為す。ちょっと哲学的な言い回しです。

partition

 こちらは、名詞と動詞の両方の意味があります。

(n.)1. the action or state of dividing or being divided into parts.
部分に[分割する|される][動作|状態]。

 4つの組み合わせがありますが、JSTQBの文脈では「分割された状態・結果」が近そうです。なぜなら、「equivalence partition」が以下のように説明されている*1ためです。  

Equivalence partition
A portion of the value domain of a data element related to the test object for which all values are expected to be treated the same based on the specification.

 名詞の方はもう一つあります。

(n.)2. A structure dividing a space into two parts, especially a light interior wall. 空間を2つの部分を分割する構造、特に軽量な室内用壁。

 これは日本語でいう「パーティション」に相当しますね。

 次に動詞。

(v.)1. Divide into parts.
部分に分割する。

 「分割する」という動詞ですね。
 「区画する」という言葉もぴったりするかもしれません。

 ただJSTQB的には、「partition」は(n.)1的な意味で使って、動詞っぽさを出す時には、後述する「partitioning」を使っているのかも。また、(n.)2的な意味で使うと混迷が深まりそうです。  

partitioning

 これは動名詞であり、「分割すること」と捉えていいでしょう。
 Equivalence Partitioning は「同値(クラスに)分割(すること)」と補うと自然ですね。

 以上、特にスルドイ考察、深い見解はありません・・・・・・。

*1:湯本さんの記事からの孫引き・・・

【読書メモ】世界の「かつて」と「今」を正しく捉えるための『FACTFULNESS』

FACTFULNESS(ファクトフルネス) 10の思い込みを乗り越え、データを基に世界を正しく見る習慣

FACTFULNESS(ファクトフルネス) 10の思い込みを乗り越え、データを基に世界を正しく見る習慣

  • 作者: ハンス・ロスリング,オーラ・ロスリング,アンナ・ロスリング・ロンランド,上杉周作,関美和
  • 出版社/メーカー: 日経BP社
  • 発売日: 2019/01/11
  • メディア: 単行本
  • この商品を含むブログ (1件) を見る

 『FACTFULNESS』は、「人間の正解率がランダム以下」になってしまう「チンパンジークイズ」でも話題になったようです。最近の『東洋経済』でも、「統計的な事実を知らない人々」という文脈で紹介されています。 factquiz.chibicode.com

 しかし『FACTFULNESS』を「統計に関する本」と分類してしまうと、大きく外してしまうことになります。

 確率や統計を面白く語った本は、これまでもたくさんありました。
 たとえば、人間の行動の不可思議さを、統計を使って説明するダン・アリエリー氏の著作。

ずる 嘘とごまかしの行動経済学

ずる 嘘とごまかしの行動経済学

 ここでいう統計は主にインタビューの結果であり、そこから得られるのは「設問に答えに対する真実」よりもむしろ、「人々がどう振る舞うかの真相」でした。たとえば、「祖母が亡くなる確率」は、中間試験の前は10倍、期末試験の前には19倍に跳ね上がる。成績が芳しくない学生は、そうでない学生に比べて、「祖母を亡くす」確率が50倍も高い、のだそうです・・・。

 あるいは、『リスク・リテラシーが身につく統計的思考法』。こちらは、統計から得られる結論が時に非常にミスリーディングなものになることを教えてくれます。

www.kzsuzuki.com

 『FACTFULNESS』は、このどちらとも違います。
 数字は容易に手に入るもの。そこから読み取れる「事実」も、シンプルなもの。しかし人々はそもそも、単純な統計から得られるそれらの事実を知らない。賢い人も含めて多くの人が、世界の現在を正しく把握できていない、というのです*1

 「過去と現在の世界のありよう」を正しく理解しするには、「正しい統計を正しく見る」必要があります。世界の状況についての「正しい統計」を手に入れることがそう困難ではない一方、「正しく見る」ためにはいくつかの注意が必要であることを、本書は教えてくれます。

 それでもなお、この本は「統計に関する本」ではないと言いたい。

 それぞれの物語に裏にある数字を見ようとすることは大切だ。でもそれと同じくらい、数字の裏にある物語を見ようとすることも大切だ。数字を見ないと、世界のことはわからない。しかし、数字だけ見ても、世界のことはわからない。(第5章 過大視本能 より引用)

 世界は決して最善ではないけれど、確実に善くなっている。「先進国」のわたしたちが「あの人たち」と分断しがちな国の人々の暮らしは、わたしたちがそう遠くない過去に克服してきた暮らしなのだ。統計と、その背後にある事実を正しく理解すれば、あるべき方向に向かうことができる。世界はこれからも善くなっていける

 それが本書のテーマなのだとわたしは受け取りました。

 400ページというそれなりの厚さ、扱っているのは「世界」と「統計」、にもかかわらず、著者(たち)の一貫した強いパッションが伝わってきてグイグイ読み進めてしまう、意欲的でとってもフェアな、素晴らしい本でした。
 そしてついでに、「お、このバブルチャートは仕事にも使えそうだな・・」と、「世界」とまったく関係ないことにも思いを巡らせたのでした・・・。

 ちなみにこの本を読んで、糸井重里さんの有名な以下のツイートを思い出しました*2。  

*1:その「誤解」の内容が本書の読みどころでもあるので、内容を書いてしまうと読む楽しみを損ねてしまうので、書けないのですが。

*2:このツイートのツリーにも、思った以上に悪意がぶら下がっていて驚いた・・・。