XAIについての検証 - 手法比較

はじめに

前回までいくつかのXAI手法の検証を行ってきた。
今回はそれらの手法を比較するコードを実装し、githubに公開した。
https://github.com/NeverendingNotification/pytorch-xai-analyze

このコードを用いていくつかの状況で各XAIアルゴリズムの挙動を検証した。

比較したアルゴリズム

  • Anchors1
  • SHAP2
  • Grad-CAM3

初期値依存性

Deep Learningの学習結果はネットワーク重み初期値にある程度依存する。
XAIアルゴリズムの初期値依存性を見るために、 乱数SEED以外のパラメータを
固定して数回学習し、 XAIの可視化結果を比較した。

学習曲線 (評価データ)

f:id:nakamrnk:20201017064850j:plain

精度 (評価データ)

class-F run1 run2 run3
T-shirt/top 0.872945 0.867698 0.870871
Trouser 0.987443 0.985915 0.98542
Pullover 0.897 0.891337 0.897654
Dress 0.921944 0.92323 0.924303
Coat 0.869186 0.880193 0.88101
Sandal 0.978894 0.979879 0.980529
Shirt 0.766631 0.765803 0.771222
Sneaker 0.962451 0.961727 0.959334
Bag 0.986028 0.988 0.985522
Ankle boot 0.972348 0.970707 0.965377
mean-F 0.921487 0.921449 0.922124
acc 0.9221 0.9218 0.9225

評価データに対する性能的には初期SEEDごとのブレはほぼ存在しない。

XAI結果比較 (Ankle bootクラス)

f:id:nakamrnk:20201017064713j:plain

4行ずつ一組で(元画像、Anchors, SHAP, Grad-CAM)。
上から順にrun1, run2, run3。

  • Anchorの挙動はrunごとにややぶれているが、靴底の窪んでいる部分と正面部分に反応しているものが多い。
  • SHAPは共通してつま先付近(+かかとも?)に強く反応している。
  • Grad-CAMは共通して靴の正面部分に反応している。

モデル初期値によってXAIアルゴリズムの挙動が大きく変わることはないようだ。

ネットワークのパラメータ数依存

ネットワークの複雑さによってXAIの挙動が変化するか検証した。
変更したパラメータは

  • チャンネル数 (model.feature.c0)
    • (16, 32, 64, 128)
  • 層数 (model.feature.num_layres)
    • (2, 3 ,4)

はデフォルト値。

チャンネル数比較

学習曲線 (評価データ)

f:id:nakamrnk:20201017070633j:plain

精度 (評価データ)
class-F channel_16 channel_32 channel_64 channel_128
T-shirt/top 0.856566 0.872945 0.878073 0.885328
Trouser 0.981891 0.987443 0.988978 0.989442
Pullover 0.873657 0.897 0.898709 0.905698
Dress 0.910366 0.921944 0.924988 0.937406
Coat 0.861098 0.869186 0.886608 0.906126
Sandal 0.974975 0.978894 0.981379 0.987976
Shirt 0.746842 0.766631 0.793354 0.799401
Sneaker 0.957594 0.962451 0.969966 0.96895
Bag 0.982491 0.986028 0.98854 0.989033
Ankle boot 0.965169 0.972348 0.974333 0.972152
mean-F 0.911065 0.921487 0.928493 0.934151
acc 0.9111 0.9221 0.9289 0.9341

チャンネル数は増加するほど性能が向上している。

XAI結果比較 (Ankle bootクラス)

f:id:nakamrnk:20201017072520j:plain

上から順にチャンネル数(16, 32, 64, 128)。
全体の傾向としてはどのアルゴリズムも多くは変わっていない。

層数比較

学習曲線 (評価データ)

f:id:nakamrnk:20201017073148j:plain

精度 (評価データ)
class-F layers_2 layers_3 layers_4
T-shirt/top 0.821782 0.872945 0.889555
Trouser 0.972039 0.987443 0.990964
Pullover 0.82341 0.897 0.907023
Dress 0.856865 0.921944 0.945744
Coat 0.778786 0.869186 0.909
Sandal 0.940759 0.978894 0.986987
Shirt 0.66242 0.766631 0.807771
Sneaker 0.92137 0.962451 0.971852
Bag 0.960716 0.986028 0.987026
Ankle boot 0.942799 0.972348 0.973764
mean-F 0.868095 0.921487 0.936969
acc 0.8687 0.9221 0.9372

層数が増加するほど性能が向上している。

XAI結果比較 (Ankle bootクラス)

f:id:nakamrnk:20201017073457j:plain

上から順に層数 2, 3, 4。

Anchorsの挙動

層数を増やすほど反応箇所が減少している。
Anchorsの反応箇所はその部分を残すと予測結果があまり変わらない
superpixels領域を示しているため、層数が増加し、視野の広い特徴を
獲得するほどに、ローカルなsuperpixelsに対しての依存度が下がっている
ためと思われる。 解釈性という観点ではあまりよくないため、
superpixelsのとり方を考えるなど対策が必要。

SHAPの挙動

層数2の場合、つま先やかかと付近に強く反応している。
層数が増えると特定箇所への反応は弱くなり、正面付近の輪郭
全体に分布するようになる。 Anchorsと同様画像の特定部位への
依存性が落ちているためと思われる。

Grad-CAMの挙動

Grad-CAMは全てのパラメータで2層目の特徴マップを可視化している。

2層モデルの場合可視化している層は最終層であり、 靴の履き口、
正面、つま先など凹んでいる局所構造に反応している。
3層モデルの場合は靴正面のライン上に反応している。

4層モデルの場合はGrad-CAMが消滅しているものがある。
これはGrad-CAMが特徴量マップの重み付け和をとったあとに
ReLUを通すため、得られたマップ全体が負値ならば0となってしまうためである。
(最終層(4層目)を可視化する場合はこのような挙動はしないはず)
潰れていないマップを見るためには最終層を可視化するほうが良いが、
解像度がさらに落ちるため、局所性は失われる。

まとめ

各XAIアルゴリズムの挙動を比較した。
チャンネル数を増やした場合はあまり挙動が変わらないのに、
層数を変えると挙動が大きく変わるのはおもしろいと思った。
ネットワークのアーキテクチャや問題を変えた場合の挙動も理解したい。

参考文献