Interpretable Machine Learningを調べてみた

# 挨拶

[ACCESS Advent Calendar 2020](https://qiita.com/advent-calendar/2020/access) の7日目です。

今日のテーマは **Interpretable Machine Learning (解釈可能な機械学習)** です。
機械学習の様々な学習モデルを多少なりとも勉強したことはありますが、 機械学習の推論結果を解釈するという分野については全く知りませんでした。なのでこの機会に調べてみました。

# Interpretable Machine Learningとは?

通常、(深層)推論モデルを使って画像認識等の推論したとしても一見して何故その結果が吐き出されたかわからないものです。例えば次の画像をみてください.可愛いマルチーズの写真です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76979/2f4fcdd0-a2d6-7e99-fe89-ec0563ea5a7f.png)

この写真を学習済みの画像認識モデル Inception-v3 で推論させてみます。

```python
import numpy as np
import tensorflow as tf
from tensorflow.keras.applications.inception_v3 import InceptionV3, preprocess_input, decode_prediction

model = InceptionV3(weights='imagenet')

feature_image = preprocess_input(input_image[np.newaxis, :, :, :])
preds = model.predict(feature_image)
result = decode_predictions(preds, top=3)
print(result[0])
```
```:output
[('n02085936', 'Maltese_dog', 0.8959191), ('n02098413', 'Lhasa', 0.016740749), ('n01494475', 'hammerhead', 0.0029848719)]
```

上述の通り,推論結果ではマルチーズが最上位に来ています。
ここで InceptionV3 の推論結果がどのようにして導かれたかが気になります（えっ、気にならないという人います？）。 「学習データにマルチーズのラベル付き画像が含まれていたから」、「白色の長い被毛に覆われた犬だから」、「誤差逆伝播法で誤差関数の出力が最小値になるようにパラメータをうんぬん」ということはできますが、依然としてInceptionV3　のパラメータの結果を解釈することは難しいです。この問題は以前から「深層学習で得られたモデルはブラックポックスである」と指摘されていました。近年では学習で得られたモデルに対して何かしら調べられないかをいう研究も盛んに行われるようになったようです。例えば、推論モデルから次の図のような情報を受け取る事で、「口元周りの白色の長い被毛によってマルチーズと判定してくれたのではないか」と解釈する事が出来ます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76979/e8e3660c-92b1-50be-d3b0-5a2d53664b7c.png)

ちなみに上記の図はSeldonIOのalibiを使って出力しました。詳細な使い方は[こちら](https://docs.seldon.io/projects/alibi/en/latest/examples/anchor_image_imagenet.html)を参照してください.

```python
from alibi.explainers import AnchorImage
import matplotlib
%matplotlib inline
import matplotlib.pyplot as plt

predict_fn = lambda x: model.predict(x)
segmentation_fn = 'slic'
kwargs = {'n_segments': 15, 'compactness': 20, 'sigma': .5}
explainer = AnchorImage(predict_fn, image_shape, segmentation_fn=segmentation_fn, segmentation_kwargs=kwargs, images_background=None)
explanation = explainer.explain(data[i], threshold=.95, p_sample=.5, tau=0.25)
plt.imshow(explanation.anchor);
```

このように推論モデルの推論結果に加えてユーザが追加情報をモデルから抽出できるようにするための仕組みを技術を開発したり研究する分野がInterpretable Machine Learningとなります。

# Interpretable Machine Learningは必要か？

> ここに一人の柔道家がいる。日本人なら誰でも知っている最も有名な柔道家だ。CMでも見かけた事がある。
彼は「世界最強の男」と呼ばれながらも慢心することなく真面目に鍛錬を重ねることもあって、誰もが来年のオリンピックで金メダルを取れることを疑わなかった。

> ある日の事、驚くべきニュースが流れた。世界最強の男と呼ばれた柔道家がオリンピック選手の候補から外されたのである。もちろん多くの国民から非難を受けることとなった。国民の一人が言った。
「何故、金メダリストに最も近いあの男がオリンピックに出場しないんだ！」
あるデータサイエンティストが答えた。
「世界各国で出場するであろう選手との組み合わせからAIシステムが他の選手の方が妥当と判断したのだろう。」



AI・人工知能を社会の中で有効かつ安全に利用できるために考慮するべき問題を列挙し、システムのあるべき姿を原則としてまとめた文書「[人間中心の AI 社会原則](https://www8.cao.go.jp/cstp/aigensoku.pdf)」が内閣府から公開されています。文書の中には7つの原則が記述されていますが、その中の一つに「公平性、説明責任及び透明性の原則」というのがあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76979/adea02b5-1650-26ba-b638-bd7b171fa7fc.png)
(引用:人間中心の AI 社会原則)

文書に記載されているように構築されたAIシステムの信頼を担保する必要があり、そのためにはAIシステムの動きが適切か判断できる仕組みや、AIシステムの出力結果を説明ができる仕組みが要求されています。このような要求は国外でもAIの説明可能性、解釈可能性の必要性について言及されています。（例えば[Recommendation of the Council on Artificial Intelligence](https://legalinstruments.oecd.org/en/instruments/OECD-LEGAL-0449)）

機械学習の解釈可能性が重要な理由は他にもあります。深層学習などの機械学習は化学などの自然科学の分野にも応用されていますが、このような分野では様々な現象の原理を解明することが重要になることも多いため機械学習を用いる場合はその推論モデルの出力結果の説明性/解釈性がとても重要なものになります。また推論モデルが意図しない結果を出力した場合(例えば異常検知システムが通知するべき場面で通知してくれなかったなど)はその原因を調査・特定して修正する必要があるため推論モデルの出力結果の説明性/解釈性が重要になってきます。


# Interpretable Machine Learningの手法の分類

推論モデルから出力結果を解釈するための手法はいくつかの観点で分類されます。

## __透明な推論モデル__ vs __不透明な推論モデル__

推論モデルには複雑なものとそうでないものがあります。例えばロジスティック回帰や決定木、ナイーブベイズ は比較的単純な構造をしています。このようなモデルは透明性が高く学習済みの推論モデルのパラメータ等を見れば特徴量と出力結果との関係を理解することが可能です。このようなモデルを"Transparent model"とも呼ばれます。例えば例えば線形回帰であれば推論モデルが $y=w_0+w_1x_1+w_2x_2+...w_nx_n$と表現されますが、このモデルはある特徴量$x_i$が$1$だけ値を変化させると出力結果に$w_i$だけ変化させるだろうことが理解できます。

一方で深層学習モデルなどの推論モデルはパラメータ等を前述したように特徴量と出力結果の関係が不明瞭なので何かしらの工夫が必要になります。例えば[LIME](https://github.com/marcotcr/lime)は推論した一つのデータに対して、推論モデルを線形モデルに近似することで特徴量と出力結果の関係を解釈しやすくするといった工夫しています。(LIMEの詳細な説明は[こちらの記事](https://qiita.com/fufufukakaka/items/d0081cd38251d22ffebf)をご参照ください。)このような解釈可能にするためのアルゴリズムを使って解釈する方法を"post-hoc interpretation"と呼ばれます。post-hoc interpretationはさらに2つの解釈手法に分類されます。

## __モデル非依存の解釈手法__ vs __モデル依存の解釈手法__

モデル非依存の解釈手法は記述通り、推論モデルがどのような構造もっているか（例えばCNNの深層学習なのか、RNNの深層学習なのか）に依存せず任意の推論モデルに使える手法になります。例えば[SHAP](https://github.com/slundberg/shap)はその手法の一つになります。詳細な説明は他の記事（例えば[こちら](https://dropout009.hatenablog.com/entry/2019/11/20/091450)）をみていただければと思いますが簡単に説明すると、推論モデルに与える各説明変数（特徴変数）が出力結果にどの程度貢献したかを算出する手法です。

一方で特定の推論モデルでしか使えない手法の分類もあります。例えばConvolution Neural networkを使った画像認識の推論モデルの出力結果を解釈するために中間層の出力値を利用して画像のどの部分に反応して出力結果が導かれたかを可視化する技術が提案されていますが、この手法は他の推論モデル（例えばSVMなど）では使えないでしょう。

## __特徴量ベースの解釈__ vs __事例ベースの解釈__

これまでの分類は解釈対象の推論モデルの特製によって分類されました。ここでは推論モデルの出力結果の解釈手法は、特徴量の組み合わせから解釈する特徴量ベースか、または参考となるデータからをもとに解釈する事例ベースの2種類に分類することもできます。前者はこれまで紹介してきた線形回帰の例や,LIME,SHAPといった手法のように各説明変数（特徴変数）が出力結果にどのように影響を与えたかを解釈できる手法になります。一方で事例ベースの解釈は推論のターゲットとなったデータの推論結果を説明するためのデータを提示したり、推論モデルを構成するデータの分布を解析するのに使われます。

例えば、次の画像の野菜の名前を当てるゲームをしたとします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76979/58002603-093c-3c95-dbd9-9d6e48cae609.png)
(引用:[食材・料理のフリー写真素材 無料画像のフード・フォト](https://food-foto.jp/))

正解は「ゴーヤ」です。もしあなたがこの写真を見て「細長い形状で、緑色でゴツゴツとした外装の特徴をもつ野菜はゴーヤだ」と判断すれば、その解釈方法は特徴量ベースの解釈となります。一方で「前に似たような野菜を見たぞ！その野菜の名前はゴーヤだ。だからこの野菜はゴーヤだ」と解釈すれば、その解釈法は事例ベースの解釈となります。

また別の例も紹介します。ある人物が銀行から住宅ローンを借りれるか[収入, 経歴, 信頼度, 年齢]を入力してローン審査の推論モデルに判定させてみたところ却下とされてしまったとしましょう。もちろんその人物は簡単に納得いくわけがないので銀行員に説明を要求します。銀行員は何故ローン審査が通らなかったのかデータサイエンティストに調べてもらったところ、「収入、経歴、年齢は問題ないようであったが、信頼度の低さが大きかったのが原因である」こと、そして「もし収入をもう少しあげればローン審査が通る」ことがわかりました。この明らかになった2つの事例のうち前者が特徴量ベースの解釈の説明、後者が事例ベースの解釈の説明となります。

# 精度と解釈可能性のトレードオフ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76979/ee12e2d4-ff2a-0ee8-b44a-8d553163b59c.png)

この技術/研究分野では推論モデルの精度を追求すればそのモデルの解釈可能性が下がってしまい、逆に推論モデルの解釈可能性を上げようとすればモデル精度が下がりがちになるという、推論モデルの精度と解釈可能性のトレードオフが知られています。このトレードオフが発生してしまう所以は次のような理由が考えられます。

まず推論モデルの精度を上げたいとするならば、複雑な推論モデルと大量のデータを使って学習することになります。しかし推論モデルが複雑であるために推論モデルのどの構成が推論結果に影響しているのかわかりにくく、また大量のデータを使っているためにどのデータが推論モデルの構築にどの程度貢献してるのかもわかりにくくさせています。
逆に推論モデルをシンプルにするとモデルの構造がわかりやすくなるため解釈可能性は高くなりますが、一方で制約が多くなるため推論結果の精度を下げることになります。

このような理由でモデルの精度と解釈可能性のトレードオフが発生します。

# 最後に

Interpretable Machine Learningについて調べたことをまとめました。（本当は個々の解析手法のアルゴリズムの説明やOSSを使ったサンプル実装の紹介など掘り下げたかったのですが、間に合わなかったり。。。力尽きてしまったり。。。）

さて、深層学習のような複雑な推論モデルも推論結果の解釈ができるように技術があることを紹介しましたが、実はその使用には注意が必要です。例えば画像認識で正しく推論されているにも関わらず、いざ解釈を確認してみるとおよそ関係ない領域を判定理由として提示することができることが報告されています。解析結果を真に受けずユーザ自身が確認する必要もありそうです。

この分野について疎かったので多少の知識は付けたいと調べてみましたが、推論結果を解釈できるようにするためのたくさんの工夫を目にすることができて楽しかったです。今回は概要レベルしか調査できていませんが、さらに調査を進めたり[公開されているライブラリ](https://github.com/jphall663/awesome-machine-learning-interpretability#python)を使用して実際どのように動くのか確かめながら理解を深めたいと思います。

# 参考文献

- [Interpretable Machine Learning](https://christophm.github.io/interpretable-ml-book/)
- [Explainable Artificial Intelligence (XAI): Concepts, Taxonomies,
Opportunities and Challenges toward Responsible AI](https://arxiv.org/pdf/1910.10045.pdf)
- [機械学習モデルの判断根拠の説明](https://www.slideshare.net/SatoshiHara3/ver2-225753735)
- [SHAP(SHapley Additive exPlanations)で機械学習モデルを解釈する](https://dropout009.hatenablog.com/entry/2019/11/20/091450)
- [Counterfactual Explanations for Machine Learning: A Review](https://arxiv.org/pdf/2010.10596v1.pdf)
- [The Effects of Example-Based Explanations in a Machine Learning Interface](https://hci.stanford.edu/courses/cs147/2019/au/readings/example_based_explanations_ml_interface.pdf)
- [ＡＩ利活用ガイドライン](https://www.soumu.go.jp/main_content/000624438.pdf)
- [人間中心の AI 社会原則](https://www8.cao.go.jp/cstp/aigensoku.pdf)
- [Recommendation of the Council on Artificial Intelligence](https://legalinstruments.oecd.org/en/instruments/OECD-LEGAL-0449)