はじめに: モデルはなぜ説明可能でなければならないのか
L'説明可能な AI (XAI) 深層学習の最も差し迫った課題の 1 つに対処します。 理解する なぜ モデルは特定の決定を下します。のモデル ディープラーニングは多くの場合、 ブラックボックス: 非常に優れた精度を達成しますが、そうではありません 彼らは自分たちの推論について何の説明もしていない。これは意思決定を行う際の重要な問題です 人々の生活に影響を与える: 医療診断、融資の承認、判決など 司法、雇用。
欧州の GDPR 規制では、 説明を受ける権利:国民 彼らには、自動化された意思決定がどのように行われるかを知る権利があります。この記事では モデルを解釈可能にするための主な手法であるSHAP、LIME、GradCAMを検討します。 そして注意の可視化。
何を学ぶか
- ブラックボックス問題: なぜ解釈可能性が重要なのか
- 特徴の重要性: どの特徴が予測に影響するか
- SHAP: ローカルおよびグローバルの説明のための Shapley 値
- LIME: モデルに依存しないローカルな説明
- GradCAM: CNN が「見える」場所を視覚化します。
- トランスフォーマーにおけるアテンションの視覚化
- 公平性とバイアス: モデル内の差別の検出
- GDPR への準拠と説明を受ける権利
ブラックボックス問題
数百万のパラメータを備えた深層学習モデルは、複雑な表現を学習し、 非線形データ。決定木や線形回帰とは異なり、 直接理解する方法はない どの機能が 彼らは、 具体的な予測 として 彼らは相互作用します。
これは矛盾を生み出します。最も正確なモデル (ディープ ネットワーク) は、最も精度の低いモデルでもあります。 解釈可能な。 XAI は、説明を提供することでこのトレードオフを解決しようとします。 事後的な モデルのパフォーマンスを犠牲にすることなく、意思決定を行うことができます。
説明は次のとおりです。
- 地元: なぜこの特定の予測ですか? (例:「収入が低すぎるため融資が拒否された」)
- グローバル: モデルは一般的にどのように機能しますか? (例: 「収入と最も重要な特徴、次に信用スコア」)
機能の重要性: どの機能が重要か
La 機能の重要性 そして解釈可能性への最初のステップ: 定量化 各特徴がモデルの予測にどの程度寄与するか。簡単な方法としては、 順列の重要性: 特徴がランダムに並べ替えられ、測定されます それがどれほどパフォーマンスを低下させるか。パフォーマンスが低下するほど、その機能の重要性が高まります。
from sklearn.inspection import permutation_importance
from sklearn.ensemble import RandomForestClassifier
import numpy as np
# Modello addestrato
model = RandomForestClassifier(n_estimators=100)
model.fit(X_train, y_train)
# Permutation importance
result = permutation_importance(model, X_test, y_test,
n_repeats=10, random_state=42)
# Visualizzazione
feature_names = ['eta', 'reddito', 'credit_score', 'debito',
'impiego_anni', 'n_prestiti_attivi']
for name, importance, std in sorted(
zip(feature_names, result.importances_mean, result.importances_std),
key=lambda x: x[1], reverse=True):
print(f"{name:<20}: {importance:.4f} +/- {std:.4f}")
SHAP: 厳密な説明のための Shapley 値
シャープ (SHApley Additive exPlanations) は協力ゲーム理論を適用します 予測に対する各特徴の寄与を計算します。ザ シェープリーの価値観 考えられるすべての特徴を考慮した、各特徴の平均限界寄与を表す 機能の組み合わせ。
SHAP は、次の 3 つの望ましい特性を同時に満たす唯一の方法です。
- ローカル精度: 予測の SHAP 値の合計が予測自体に等しい
- 欠落: 存在しないフィーチャの SHAP 値はゼロです
- 一貫性: ある特徴が別のモデルよりもあるモデルでより多く寄与する場合、その SHAP 値はより高くなります。
import shap
# TreeSHAP per modelli ad albero (veloce ed esatto)
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X_test)
# Force plot: spiegazione di una singola predizione
shap.force_plot(
explainer.expected_value[1],
shap_values[1][0], # Prima predizione, classe positiva
X_test.iloc[0],
feature_names=feature_names
)
# Summary plot: importanza globale
shap.summary_plot(shap_values[1], X_test,
feature_names=feature_names)
# Dependence plot: come una feature influenza il modello
shap.dependence_plot("reddito", shap_values[1], X_test,
feature_names=feature_names)
# DeepSHAP per reti neurali
deep_explainer = shap.DeepExplainer(neural_model, X_train[:100])
deep_shap_values = deep_explainer.shap_values(X_test[:10])
LIME: モデルに依存しないローカルな説明
ライム (ローカルで解釈可能なモデルに依存しない説明) は、個々の予測を説明します。 複雑なモデルを単純で解釈可能なモデル (通常は 線形回帰)。プロセス:
- 元の入力の摂動を生成します (さまざまなランダムな特徴)
- 各摂動のブラックボックス モデル予測を取得します
- 元の入力から距離重み付けされたローカル線形モデルをトレーニングする
- 線形モデルの係数は、各特徴の局所的な重要性を示します
import lime
import lime.lime_tabular
# Creare l'explainer
explainer = lime.lime_tabular.LimeTabularExplainer(
X_train.values,
feature_names=feature_names,
class_names=['Rifiutato', 'Approvato'],
mode='classification'
)
# Spiegare una predizione
explanation = explainer.explain_instance(
X_test.iloc[0].values,
model.predict_proba,
num_features=6,
num_samples=5000
)
# Visualizzare
explanation.show_in_notebook()
print("Feature contributions:")
for feature, weight in explanation.as_list():
print(f" {feature}: {weight:+.4f}")
GradCAM: CNN を「視聴」できる場所
GradCAM (勾配加重クラス アクティベーション マッピング) はどの領域を表示するか 画像の方が分類にとって重要です。比較される出力の勾配を計算します 最後の畳み込み層の特徴マップに追加し、特徴を強調表示するヒート マップを作成します。 予測に最も貢献した画像の領域。 CNNが分類する場合 「猫」のような画像、GradCAM はネットワークが実際に猫を見ていることを示します 背景ではありません。
トランスフォーマーにおけるアテンションの視覚化
Transformer モデルは、自然な形式の解釈可能性を提供します。 注意の重み。アテンションマトリックスを視覚化すると、次のことがわかります。 各単語を処理するときにモデルが「見る」トークン。これによりパターンが明らかになります 構文 (主語-動詞)、意味 (共参照)、および位置。
from transformers import BertTokenizer, BertModel
import torch
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained('bert-base-uncased',
output_attentions=True)
text = "The cat sat on the mat because it was tired"
inputs = tokenizer(text, return_tensors='pt')
with torch.no_grad():
outputs = model(**inputs)
# Attention weights: (layers, heads, seq_len, seq_len)
attentions = outputs.attentions # Tuple di 12 layer
tokens = tokenizer.convert_ids_to_tokens(inputs['input_ids'][0])
# Visualizzare attention del layer 11, head 0
import matplotlib.pyplot as plt
import seaborn as sns
layer, head = 11, 0
attn_matrix = attentions[layer][0, head].numpy()
plt.figure(figsize=(10, 8))
sns.heatmap(attn_matrix, xticklabels=tokens, yticklabels=tokens,
cmap='Blues', annot=False)
plt.title(f"Attention - Layer {layer}, Head {head}")
plt.tight_layout()
plt.savefig('attention_heatmap.png', dpi=150)
公平性とバイアス: 公平なモデル
XAIは検出に不可欠です バイアス モデルの中で。信用モデルの場合 スコアリングでは、体系的に特定の人口統計グループに低いスコアを割り当てます。 XAI は、特徴(性別、年齢、 民族)が予測に影響を与える。
一般的な公平性の指標には次のものがあります。
- 人口平等: 肯定的な結果の確率はグループ間で等しいはずです
- 機会均等: 真陽性率はグループ間で同等である必要があります。
- 較正: 等しい確率の予測はグループ間で同じ結果になるはずです
GDPR の遵守と説明を受ける権利
GDPR (第 22 条) は、EU 国民が決定の対象とならない権利を有することを確立しています。 法的効果を生み出す自動処理のみに基づいています。そんなとき 決定がなされた場合、個人は以下の権利を有します。
- 1 つ入手 重要な説明 使用されるロジックの
- 決定と要求に異議を唱える 人間の介入
- 自分の視点を表現する
XAI は、これらの変革的な規制要件を満たすための技術ツールを提供します。 法的義務から適切なエンジニアリング慣行までのコンプライアンス。
シリーズの完結編
- このシリーズでは、基礎から高度なアプリケーションまでディープラーニングを探求してきました。
- 基本的なニューラル ネットワーク (MLP) から最先端のアーキテクチャ (Transformer、Diffusion) まで
- トレーニング手法 (バックプロパゲーション、RL) から解釈可能性 (SHAP、LIME) まで
- ディープラーニングは急速に進化し続けています: 最新の状態を維持することが成功の鍵です







