🔍 🧠 💡

XAI の手法をイチから理解する

LIME / SHAP / PI / Grad-CAM / Attention ── AIの「なぜ?」を説明する技術

🤔 XAI(説明可能なAI)って何?

そもそもの問題:ブラックボックス問題
ディープラーニングは精度が高いけど、「なぜその予測をしたのか」がわからない

医者:「AIが"癌です"と言ったけど、根拠が見えないと治療方針を決められない」
銀行:「AIが"融資NG"と判定したけど、理由が説明できないと法律上問題がある」
自動運転:「なぜ急ブレーキを踏んだのか説明できないと信頼できない」

XAI = AIの判断の「理由」を人間に見せる技術
XAI = eXplainable AI(説明可能なAI)
「AIが何を根拠に予測したのか」を可視化・説明する技術の総称。
EU の GDPR(一般データ保護規則)では、AIによる自動決定に対して「説明を求める権利」が認められており、XAI の重要性はますます高まっている。

XAI手法の2つの分類軸

🟢 LIME(2016年)

Local Interpretable Model-agnostic Explanations

「局所的に・わかりやすく・どんなモデルでも使える」説明手法。

🔬
たとえ話:地球は丸いけど、足元は平ら
複雑なモデル全体を理解するのは無理。
でも「この1点の周辺だけ」なら単純なモデルで近似できる

地球(=複雑なモデル)は丸くて複雑だけど、
自分の足元(=1件のデータの周辺)だけ見れば平らに見える
その「平らな面」=線形モデルで近似して説明する。

LIMEの仕組み

1
説明したい1件を選ぶ

例:「この患者を"糖尿病"と予測した理由を知りたい」

2
近くに似たデータをたくさん作る

元のデータの特徴量を少しずつ変えた「近所のデータ」を大量に生成。
例:血糖値を少し変えたり、BMIを少し変えたり。

3
作ったデータを元のモデルに通す

複雑なモデルが各データに対してどう予測するかを観察する。

4
その周辺だけで単純なモデル(線形回帰など)を当てはめる

→ 「血糖値が高いとき予測が大きく変わる」「BMIはあまり影響しない」
各特徴量の影響度がわかる!

LIMEの出力イメージ(この患者を「糖尿病」と予測した理由)

血糖値
+0.35(糖尿病方向に押し上げ)
HbA1c
+0.28
BMI
+0.12
年齢
+0.05
運動量
−0.10(健康方向に押し下げ)

→ 「この患者は、血糖値とHbA1cが高いことが主な理由で"糖尿病"と判定された」とわかる

LIMEのキーワード:
Local → 局所的(1件ずつ説明)
Interpretable → 解釈可能(単純なモデルで近似)
Model-agnostic → どんなモデルにも使える
✅ 周辺データを作って局所的に線形モデルで近似する

🔵 SHAP(2017年)

SHapley Additive exPlanations

ゲーム理論のシャープレイ値を使って、各特徴量の貢献度を厳密に計算する手法。

🏆
たとえ話:チームの功績を公平に分配する
サッカーの試合で3-0で勝った。誰のおかげ?

選手A、B、Cの3人がいるとして:
・AとBだけのチームだったら? → 2点取れた
・AとCだけのチームだったら? → 1点取れた
・Aだけだったら? → 0点だった
・A + B + C 全員 → 3点取れた

全ての組み合わせを試して、「Aがいる時といない時の差」を全パターンで計算
→ Aの貢献度が公平に求まる。これがシャープレイ値の考え方。

SHAPの仕組み

1
説明したい1件の予測を選ぶ

例:「この家の価格を"5000万円"と予測した理由を知りたい」

2
特徴量の全ての組み合わせで予測の差を計算

「駅徒歩がある時とない時」「面積がある時とない時」…の全組み合わせを調べる。
各特徴量が「ある時とない時で予測がどれだけ変わるか」を計算。

3
各特徴量のSHAP値(貢献度)を算出

全組み合わせの結果を平均して、各特徴量の公平な貢献度を決定する。

SHAPの出力イメージ(この家を「5000万円」と予測した理由)

全データの平均予測 = 3500万円 → この家は 5000万円(+1500万円高い)

駅徒歩3分
+600万円 ↑
面積90m²
+450万円 ↑
築5年
+350万円 ↑
南向き
+200万円 ↑
1階
−100万円 ↓

→ 合計 +1500万円 → 平均3500万 + 1500万 = 5000万円
全てのSHAP値の合計が、予測値と平均値の差にぴったり一致する!

LIME vs SHAP ── 何が違う?

SHAPのキーワード:
シャープレイ値(ゲーム理論)に基づく
全ての組み合わせから公平に貢献度を計算
✅ SHAP値の合計 = 予測値 − 平均値(加法性
✅ LIMEより理論的に厳密だが、計算コストが高い
✅ 局所的 + Model-agnostic

🟠 PI(Permutation Importance)

特徴量をシャッフルして重要度を測る

LIME・SHAPは「この1件の予測」を説明する局所的手法だった。
PIはモデル全体で「どの特徴量が重要か」を調べる大域的手法。

🔀
たとえ話:チームメンバーの目隠し実験
サッカーチームで、ある選手が本当に重要かを調べたい。

その選手の目隠しをして(=特徴量をシャッフルして)試合をする。
→ チームの成績がガクッと落ちた → その選手は重要!
→ 成績がほとんど変わらなかった → その選手はあまり重要でない

これを全選手(全特徴量)に対して1人ずつやる。

PIの仕組み

1
元のモデルの精度を測定する

例:精度 = 90%

2
1つの特徴量の値をランダムにシャッフルする

例:「血糖値」列のデータをバラバラに並び替える。
→ 血糖値と結果の関係性が壊れる

3
シャッフル後の精度を測定する

例:精度 = 65%(25%低下)→ 血糖値は超重要!

4
全ての特徴量に対して②③を繰り返す

精度低下が大きい順に並べれば、特徴量の重要度ランキングが完成。

PIの出力イメージ(精度低下 = 重要度)

血糖値
精度 −25%(超重要)
HbA1c
精度 −18%
BMI
精度 −8%
年齢
精度 −3%
性別
精度 −0.5%

→ 「このモデルにとって血糖値とHbA1cが全体的に最も重要な特徴量」とわかる

PIのキーワード:
大域的(Global)な手法 → モデル全体の特徴量重要度
✅ 特徴量をシャッフル(並び替え)して精度低下を見る
Model-agnostic(どんなモデルにも使える)
✅ 仕組みが非常にシンプルで理解しやすい
✅ LIME/SHAPとは違い「1件ずつの説明」はしない

🔴 CAM & Grad-CAM

CNN が「画像のどこを見て判断したか」をヒートマップで可視化

CAM(Class Activation Mapping)── 2016年

🗺️
ひとことで言うと
CNNが画像を分類するとき、画像のどの領域が判断に影響したかをヒートマップで表示する技術。
「猫」と判定 → 猫の顔のあたりが赤く光って表示される。

CAMの仕組み

入力画像
🐱
CNN
畳み込み層
特徴抽出
GAP
Global Average
Pooling
全結合層
重み wk
猫: 95%
CAM = 最終特徴マップ × 全結合層の重み → ヒートマップ
各特徴マップの「重要度(重み wk)」で加重平均して、1枚のヒートマップを作る

⚠️ CAMの制約:Global Average Pooling(GAP)を持つCNNでしか使えない。
GAPがないモデルでは構造を変更して再学習が必要。

Grad-CAM(Gradient-weighted CAM)── 2017年

📈
CAMの制約を解決した改良版
CAMはGAPが必要だったけど、Grad-CAMは勾配(gradient)を使うことで
どんなCNNでもそのまま使えるようになった。再学習も不要。

Grad-CAMの仕組み

1
普通に予測を行う

入力画像 → CNN → 「猫: 95%」

2
「猫」クラスのスコアから勾配を逆伝播させる

「猫」のスコアが最終畳み込み層の各特徴マップにどれだけ依存しているかを勾配で計算
→ CAMでは「全結合層の重み」を使ったが、Grad-CAMでは「勾配」を使う。

3
勾配で重み付けした特徴マップを合成 → ヒートマップ

勾配が大きい特徴マップ=「猫」判定に重要な特徴マップ → 重みが大きくなる。
結果をReLUに通して正の部分だけ残す → ヒートマップ完成。

Grad-CAMの出力イメージ

🐱
入力画像
ヒートマップ
赤い部分 → 最も重要
青い部分 → やや重要
暗い部分 → 重要でない

猫の顔周辺が赤い
→ 「顔を見て猫と判断した」

CAM / Grad-CAMのキーワード:
CNN専用の手法(Model-specific)
✅ 画像のどこを見て判断したかをヒートマップで可視化
✅ CAMはGAPが必須、Grad-CAMは勾配を使って汎用化
局所的(1枚の画像ごとに説明)
✅ Grad-CAM は Gradient-weighted Class Activation Mapping の略

🟣 Attention(アテンション)の可視化

Transformer が「どこに注目したか」を見る

👀
ひとことで言うと
Transformerモデルは内部にAttention weight(注目度の重み)を持っている。
この重みを可視化すれば、「どの入力にどれだけ注目したか」が追加の計算なしにわかる。

Grad-CAMやLIMEのように別の処理が必要なのではなく、
モデル自体が「注目度」を持っているのが特徴。

自然言語での例:翻訳時のAttention

「I love cats」→「私は猫が好きです」の翻訳で、各出力単語がどの入力に注目したか

I
love
cats
私は
0.85
0.10
0.05
← 「I」に強く注目
猫が
0.03
0.07
0.90
← 「cats」に強く注目
好きです
0.05
0.82
0.13
← 「love」に強く注目

色が濃い = 注目度が高い。モデルが正しく対応関係を学習していることがわかる!

Attention可視化のキーワード:
Transformer専用(Model-specific)
✅ モデル内部のAttention weightをそのまま見るだけ(追加の計算不要)
✅ 自然言語では「どの単語にどれだけ注目したか」がわかる
✅ 画像でもViT(Vision Transformer)で「画像のどの領域に注目したか」を可視化可能

⚔️ XAI手法の全体比較

LIME SHAP PI Grad-CAM Attention
2016 2017 2010 2017
説明
範囲
局所的
1件ずつ
局所的
1件ずつ
大域的
モデル全体
局所的
1画像ずつ
局所的
1入力ずつ
モデル
依存
非依存 ✅ 非依存 ✅ 非依存 ✅ CNN専用 Transformer
専用
やり方 周辺データで
線形近似
シャープレイ値
全組み合わせ
特徴量を
シャッフル
勾配
ヒートマップ
Attention
weightを可視化
出力 特徴量ごとの
貢献度
特徴量ごとの
SHAP値
特徴量の
重要度ランク
画像の
ヒートマップ
注目度の
行列
計算
コスト
中程度 高い 低い 低い ほぼゼロ

🏁 全体まとめ

XAI手法の全体マップ

XAI(説明可能なAI)
「なぜその予測をしたのか」を説明する技術
Model-agnostic
どんなモデルにも使える
LIME
局所的 / 線形近似
SHAP
局所的 / シャープレイ値
PI
大域的 / シャッフル
Model-specific
特定のモデル専用
CAM / Grad-CAM
CNN専用 / ヒートマップ
Attention 可視化
Transformer専用 / 注目度
G検定で問われるポイント:

LIME: 局所的 / Model-agnostic / 周辺を線形モデルで近似
SHAP: 局所的 / Model-agnostic / シャープレイ値(ゲーム理論)/ 理論的に厳密
PI: 大域的 / Model-agnostic / 特徴量をシャッフルして精度低下を見る
Grad-CAM: 局所的 / CNN専用 / 勾配でヒートマップ生成 / CAMの改良版
Attention: 局所的 / Transformer専用 / モデル内部の重みをそのまま見る

頻出の分類軸:
✅ 局所的(LIME, SHAP, Grad-CAM)vs 大域的(PI)
✅ Model-agnostic(LIME, SHAP, PI)vs Model-specific(Grad-CAM, Attention)

GDPR との関連:
✅ EUのGDPRでは「自動化された意思決定に対する説明を求める権利」が規定されている
✅ AI が融資や採用の判断をする場合、説明責任が必要 → XAIの重要性