【ニューラルネットワークの判断根拠抽出】TCAV - ピクセルの重要度から概念の重要度へ -

今回はICML2018に採択された論文，[Interpretability Beyond Feature Attribution: Quantitative Testing with Concept Activation Vectors (TCAV)](https://arxiv.org/abs/1711.11279)に関してまとめたいと思います。

判断根拠系の手法では基本的にどのピクセルが判断に重要であったか？を主眼に置くことが多いですが（[この辺](https://arxiv.org/abs/1312.6034)とか[この辺](https://github.com/marcotcr/lime)），この論文で提案される手法はピクセル単位ではなく**人間の考える概念**的な観点から重要度を抽出する面白い方法を取っています。（認知心理学とかヒューマンインターフェースとかそう言った観点の研究ではないです。念のため。）


第一著者はニューラルネットの判断根拠抽出手法としてはメジャーな[Smoothgrad](https://arxiv.org/abs/1706.03825)の著者の一人です。所属はGoogle Brainであり，機械学習の判断根拠をまさに研究されている人です。

本論文の著者によるスライドが[slide share](https://www.slideshare.net/SessionsEvents/interpretability-beyond-feature-attribution-quantitative-testing-with-concept-activation-vectors-tcav-123005780)に上がっているので合わせてご覧ください。

# 概要を3行で
* ある画像サンプルに対するニューラルネットの判断根拠を示す手法としてTCAVを提案。Pixel-wiseな既存手法ではなく，概念画像に対する感度を計算することで，より解釈性を高める
* 概念画像と実際の画像群の中間表現を分類する線形分離器を学習することで概念方向のベクトルを取得し，入出力の感度との内積を取ることで概念方向にどれだけ敏感であったかを定量化
* 実験において人間の直感に合うことと，Pixel-wiseな手法との比較から本手法が優れていることを示した

# この手法の問題意識
[Saliency Map](https://arxiv.org/abs/1312.6034)や[LIME](https://github.com/marcotcr/lime)といったニューラルネットの判断根拠を示す手法は，ピクセル毎に重要度を算出します。

例えば以下の例を見てみます。（筆者のスライドから抜粋）

<img width="208" alt="スクリーンショット 2019-08-18 18.49.56.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185518/8eeb0507-e9d5-d7bc-07b1-a8ae7eae79bc.png">

上の画像の入力した際にモデル上は「Cash machine」と判断し，その重要度をSaliency Mapの派生形である[Smoothgrad](https://arxiv.org/abs/1706.03825)で算出したものになります。確かに人の部分が反応していたり，ATMの機械部分が反応していたりして，何やら重要そうな部分を示しているように見えるのですが，結局何が重要なのか人間が解釈することは難しいです。

例えば，以下の実験を考えてみます。

画像を表すクラス名のキャプションや全く関係のないキャプションを入れた画像で学習したモデルに対して判断根拠を抽出する手法を適用してみます。以下の４つのモデルを用意します。

* モデル1: キャプションのない画像で学習したモデル
* モデル2: 画像のクラス名をキャプションとして含む画像で学習したモデル
* モデル3: 30%の画像でキャプションをランダムなクラス名にした画像で学習したモデル
* モデル4: 100%の画像でキャプションをランダムなクラス名にした画像で学習したモデル

実験では，上記４種類のモデルに対して，Cabというキャプションとタクシーが載った画像を入力した際の判断根拠を示す複数の手法を適用して抽出したピクセルの重要度の画像を提示します。

もし従来手法が判断根拠を忠実に示されるのならば各モデルにおける重要視するピクセルは以下のようになっているはずです。

* モデル1: キャプションは重要視せず，画像を重要視する
* モデル2: キャプションを強く重要視する
* モデル3: キャプションと画像両方を見る，または画像のみ重要視する
* モデル4: キャプションは重要視せず，画像を重要視する

結果は以下の画像となります。

<img width="475" alt="スクリーンショット 2019-08-18 19.59.03.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185518/eab24e9d-351c-08ef-3b27-8dc4da065cf5.png">

Saliency MapやIntegrated Gradientの場合はどのモデルにおいても基本的にキャプションと画像両方に反応していて上記の仮説とは異なる出方をしてしまっています。（ネタバレになりますが，実は本手法を適用してみるとタクシーの判断にはキャプションは重要視していなかったという事実があとで明らかになります。）

## 本手法でやりたいこと
人間が判断根拠を説明するのであれば，普通はピクセルではなく，**「人がいるから」**だとか**「ATMの文字があるから」**だとかそういう説明を行いますよね。

本研究では上記のような**ピクセルではなく人間の感覚に近い概念画像（論文中ではConceptと呼んでいます）に対する重要度を定義**することで，より分かりやすい判断根拠の提示を行なっています。

論文中で概念画像として挙げられているのは，シマウマに対する「縞模様」のモチーフの画像や「馬」の画像となります。

# 本手法の概要
<img width="974" alt="スクリーンショット 2019-08-18 19.02.17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185518/d389b8c1-6f5b-4b70-a38d-b59ceefebb48.png">

本手法の概念図は上記の通りです。a)モチーフとなる模様などの概念画像，b)判断させたい画像，c)学習済みモデル（画像に対するNNの分類器）を用意し，以下の順に処理をすることで概念画像に対する重要度（正確には感度）を定量化します。

1. 予め概念画像群と通常画像群をそれぞれ入力し，中間層$l$の中間出力を抽出する
2. $l$の中間出力から概念画像群と通常画像群を分類する線形分離器を学習し，それを通常画像と概念画像の決定境界に対する法線ベクトル$v_C^l$を得る(図中のd)
3. 判断させたい画像を改めて入力し，中間層$l$の出力に対する偏微分値と$v_C^l$の内積を取ったものをコンセプトに対する感度として得る

肝は概念画像と通常画像の分類器を利用して**概念への方向**を得ることにあります。今までの判断根拠を抽出する手法が出力への感度のみを取り扱っていたのに対して，本手法ではその感度を概念画像に向けることで，**どの概念に対して出力は敏感であったか？**を得られるため，概念画像ごとの重要度を知ることができる，という仕組みになっています。

本論文ではこれを通じて行う重要度抽出と，これを以ってモデルの認識が人間と合っているかをテストすることをTesting with Concept Activation Vectors(TCAV)と呼んでいます。

# 評価実験
いくつか面白い実験を行なっているのもこの論文の特徴です。それを抜粋して説明します。

## 重要度を観察してみる
学習済みモデル(Googlenet)に判断させたい画像と概念画像を入力して，どの概念画像に反応したかを中間層$l$を変化させながら見てみます。

<img width="444" alt="スクリーンショット 2019-08-18 19.35.58.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185518/68912d0f-ede1-7b9b-9401-586ed3a035b4.png">

左上は消防車を判断させる画像として，赤いや黄色などの色を概念画像として与えた時の重要度の値を表しています。赤の概念に強く反応しているのが分かりますね。また，面白いのは左上のシマウマに対する重要度で，浅い層では概念画像に対する感度はほとんど0に近いのに対して，途中から感度が急上昇しているのが見えます。CNN系は層を重ねるに連れて単純なパターンではなく概念的なものを見るようになると言われていますが，この実験ではシマシマなどの模様の概念に対して程度深い層で認識しています。

下の二つは人間の直感とずれている例になります。ラグビーを判断するのに白人に対する感度が高くなっていたり，スクールバスを判断するのに幼児が得られていたりしています。

## 画像とキャプションを含む画像の重要度を見てみる
<img width="542" alt="スクリーンショット 2019-08-19 16.49.53.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185518/9d01abc9-1f3b-a2bd-e150-8796fa9e74b3.png">

導入のところで触れたキャプション付きの画像に対してTCAを適用して見ます。今回はタクシー画像ときゅうりの画像にそれぞれキャプションをつけた画像に対して，導入実験と同様に４種類のモデルに対してキャプションの概念画像と，それぞれのクラスの概念画像に対してどのように反応するか見てみます。

<img width="509" alt="スクリーンショット 2019-08-19 16.49.34.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185518/06c2337e-9ade-8c15-260b-bd15906b664d.png">

タクシーの場合はどのモデルもタクシー画像に対して高いスコアを取っており，実はタクシーの判断にはキャプションを使っていなかったことが観察されます。一方で，きゅうりの場合は正しいキャプションで学習したモデル(0% noisy & 30% noisy)はほとんどキャプションを見ていて，キャプションが間違っている，またはキャプションがない画像で学習したモデル(100% noisy & no captions)では画像に反応していることがわかります。

# まとめ
本手法では，概念画像への感度をみることでモデルが実際に何を見ているかをピクセルより概念的な粒度を荒くみることができるようになりました。
最近はこの分野，ピクセル毎の重要度ではなく別の特徴やサンプルで説明出来ないか？ということが議論されている気がします。

何かと注目されているAIの説明性ですが，研究的にもいい意味でまとまっていなく，様々なアプローチがあって非常に面白い分野だと思います。