E試験 2024#2 シラバスメモ④-6 深層学習の応用 深層学習の説明性

E試験のシラバスとその概要をメモしたものです。
書籍、各サイトや生成AIに聞いたものを自分なりに解釈したツギハギです。

シラバスは2024#2に準拠しています

https://www.jdla.org/certificate/engineer/

本記事は4．深層学習の応用 のうち
- 様々な学習方法

についてとなります。
試験範囲外部分は割愛しています。

## 判断根拠の可視化
### XAI (eXplainable AI)
基本的にNNは重みによる特徴学習がブラックボックス状態であり、どういう因果でその予測がされるのかはわからない状態にある。
XAIは予測結果や推定結果に至るプロセスが人間によって説明可能になっている技術や研究分野、機械学習のモデル。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/a02446e4-edd0-8a74-9acc-5bf84d9895b0.png)

- データのどの特徴が予測・認識に重要だったかを説明・提示する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/3bf164fe-356f-74da-c708-7eecfbf91226.png)
- どの学習データが予測・認識に重要だったかを説明・提示する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/b7823038-f441-0944-5213-e152e2d083c2.png)
- 予測・認識のプロセスを人が可読な表現で記述する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/f811a314-7d8d-b83f-2c00-831bee5e0bdd.png)
- データのどの特徴が予測・認識に重要だったかを自然言語で説明文として提示する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/3bae9bf4-e173-8bf8-6f87-5ee3a37a0cfa.png)
出所：https://www.soumu.go.jp/main_content/000587311.pdf

### CAM (Class Activation Map)
XAIの手法の一つ。
ResNetのようにGAP(GlobalAveragePooling)を使用するモデルに適用出来る。
クラス分類に寄与したとされる入力領域をActivation Map(下記ヒートマップのようなもの)表示させる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/bddc60fa-4035-81a5-b675-490d31a52f68.png)

とある与えられたclass cに対して可視化したいとして
- 学習済モデルから特徴量マップを取得(モデルの最後の畳み込み層など。下記画像中のレイヤごとのヒートマップ)
- Global Average Pooling(GAP)層の出力する値、すなわちk番目のチャネルに対するGAP後のスカラー値とクラスcをつなぐ重み${w^c_k}$を取得(画像中の$w_1,w_2...$)
- 特徴量マップのチャネルごとに重みを乗じたのち足し合わせる
$S_c=\sum_k{w^c_k}\sum_{x,y}f_k(x,y)=\sum_{x,y}\sum_k{w^c_k}f_k(x,y)$
$w^c_k$:クラスcに接続する重み, k:特徴マップの何番目か, $f_k(x,y)$: k番目の特徴マップのx,y座標ピクセル

cに対するActivation Map $M_c$は
$M_c = \sum_k{w^c_k}f_k(x,y)$
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/3424c14f-2ebb-656b-c29d-e31cf30c7418.png)
出所：http://cnnlocalization.csail.mit.edu/Zhou_Learning_Deep_Features_CVPR_2016_paper.pdf

- 課題
上記の通りGAPの出力を利用しているので、GAPを使用しないモデルには適用出来ない。

### Grad-CAM(Gradient-weighted Class Activation Mapping)
CNNの最終的な畳み込み層の出力値に対する勾配を利用して、Active Mapを作成する。(出力値の勾配の大きいところが重要だと判断)
既存のアーキテクチャの変更や再トレーニングは不要で、様々な構造のCNNに適用する事ができる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/d667ccc8-5b44-02af-a455-de97be6d9fe1.png)
出所：https://arxiv.org/pdf/1610.02391
1. **画像の入力と前向き伝播 (Forward Propagation)**
   - まず、対象の画像と特定のクラス（例：『トラ猫』）を入力として準備します。
   - 入力画像をCNNモデル（畳み込みニューラルネットワーク）に通して、モデル内の各層を順に処理します。
   - モデルの最終的なタスクに基づく計算を通じて、入力画像が特定のクラスに属するスコア（生のスコア）を取得します。

2. **勾配の設定 (Setting Gradients)**
   - モデルの出力に対して、注目したいクラス（『トラ猫』）以外のすべてのクラスに対する勾配（変化率）を0に設定し、注目したいクラス（『トラ猫』）の勾配を1に設定します。
   - これにより、モデルが『トラ猫』クラスに関連する特徴にのみフォーカスするようになります。

3. **逆伝播 (Backpropagation)**
   - 勾配を逆伝播（バックプロパゲーション）し、モデルの中で特に注目すべき箇所（特徴マップ）に焦点を当てます。この時、特徴マップはReLU関数（Rectified Linear Unit）を通った後の畳み込み層の出力です。
   - 逆伝播によって得られた勾配情報を利用して、重要度を示すための重みを計算します。

4. **粗いGrad-CAMローカライゼーションマップの作成 (Creating Coarse Grad-CAM Localization Map)**
   - 勾配の重みを、関心のある特徴マップと組み合わせることで、Grad-CAMの粗いローカライゼーション（局所化）マップを生成します。
   - このマップ（青いヒートマップ）は、モデルが特定のクラスを決定するために画像のどの部分を見ているのかを示します。

5. **Guided Grad-CAM可視化の生成 (Generating Guided Grad-CAM Visualizations)**
   - 最後に、得られたヒートマップを、Guided Backpropagation（ガイド付き逆伝播）と点ごとに掛け合わせます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/a1b61a00-cc02-c494-cb6a-37247e00e6e2.png)
出所：https://arxiv.org/pdf/1610.02391 より一部編集

任意のクラスcにおけるGrad-CAMは
$L^c_{Grad-CAM}=ReLU\underbrace{(\sum_k{\alpha^c_k A^k})}_{線形結合}$

$\alpha^c_k$は重みで
```math
\alpha^c_k = \overbrace{\cfrac{1}{Z}\sum_i\sum_j}^{GAP} \underbrace{\cfrac{\delta y^c}{\delta A^k_{ij}}}_{逆伝播された勾配}
```
$y^c$:クラスCの出力値(ソフトマックスを行う前の値)
$A^k$:畳み込み層の特徴マップ
$A^k_{ij}$:特徴マップ$A^k$の座標(i,j)でのアクティベーション
Z :特徴マップのピクセル数
i,j:画像のXY座標

#### Guided Backpropagation
特定のクラスに関連する特徴を強調するために用いられる手法で、通常の逆伝播と異なり、順伝播及び勾配が負の場合はゼロに設定します。これにより、画像中でモデルが注目する重要なピクセルが強調され、高解像度の視覚化が得られます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/f07a7a80-da58-8709-1b71-351f72be4a4f.png)
出所：https://arxiv.org/pdf/1412.6806 より一部編集

## モデルの近似
###　LIME(Local Interpretable model-agnostic explanations)
予測結果に対する、特徴量の寄与を可視化する。
局所的に近似させた単純な分類器を作り、その分類器を使い予測に寄与した特徴量を選ぶ処理を行っている。
モデルを問わず、様々な機械学習モデルに適用可能。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/2c7b8b20-f9f8-4df2-5b61-b41bdebad4ad.png)

#### 局所的な解釈
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/85e4979e-32f3-4207-6115-be43edcb16a7.png)

モデル全体の複雑な決定関数（図の青/ピンクの背景）は線形モデルでうまく近似できませんが、特定のインスタンス（太い赤い十字）に注目し、その周囲の局所的な領域で線形近似を行います。

図のように、LIMEはそのインスタンス周辺のデータポイントをサンプリングし、元のモデルf の予測結果を取得します。これらのサンプルに対して、元のインスタンスへの近さに基づいて重み付け（点のサイズで表現）を行います。破線は、特定のインスタンス周辺で忠実な説明を提供するための線形モデルです。この線形モデルは局所的には正確であるものの、全体的には正確ではないかもしれません。


### SHAP(SHapley Additive exPlanations)
LIMEとは異なり全体のデータに対して、大局的な予測の根拠を示す事が出来る
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/76dce95d-4b83-a382-8f55-adb85b1ea8aa.png)
出所：https://christophm.github.io/interpretable-ml-book/shap.html


#### Shapley Value
**Shapley Value**は、協力ゲーム理論に基づいて、複数のプレイヤーが協力して得られる総報酬を、それぞれのプレイヤーにどのように公平に分配するかを決定する方法です。この値は、各プレイヤーの貢献度に応じて報酬を配分するためのもので、特に機械学習のモデル解釈において、各特徴がモデルの予測にどの程度寄与しているかを評価するために使用されます。

1. **協力ゲーム理論の基本**
   - 協力ゲーム理論では、複数のプレイヤーが協力することで得られる利益（報酬）を、どのようにプレイヤー間で分配するかを考えます。ゲームは「提携可能ゲーム（cooperative game）」と呼ばれ、各プレイヤーの集合が「連合（coalition）」を形成し、連合が得る報酬の合計を「特徴関数（characteristic function）」で表します。

2. **Shapley Valueの定義**
   - **Shapley Value**は、各プレイヤーがゲームの結果にどの程度貢献したかを数値で表すもので、以下のような方法で計算されます：
     - すべてのプレイヤーの順列（並び順）を考え、それぞれの順列においてプレイヤーが参加するまでに他のプレイヤーが形成した連合に対するプレイヤーの限界貢献（marginal contribution）を計算します。
     - すべての順列にわたる限界貢献の平均を取り、これをそのプレイヤーのShapley Valueとします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666388/06c71fcc-4c0e-eee6-1487-27f700565a48.png)
出所：https://www.datarobot.com/jp/blog/explain-machine-learning-models-using-shap/
上記図のそれぞれのプレイヤーの限界貢献度の平均をとったものがShapley Value
A さん: (10 + 10 + 24 + 44 + 18 + 44) / 6 = 25万円
B さん: (20 + 38 + 6 + 6 + 38 + 12) / 6 = 20万円
C さん: (30 + 12 + 30 + 10 + 4 + 4) / 6 = 15万円

3. **Shapley Valueの特徴**
   - Shapley Valueは以下の4つの公正性の公理を満たすように設計されています：
     - **効率性（Efficiency）**: すべてのプレイヤーのShapley値の合計は、全体の報酬と等しくなる。
     - **対称性（Symmetry）**: 貢献度が同じであるプレイヤーは同じShapley値を持つ。
     - **ダミー性（Dummy Player）**: ゲームの結果に全く影響を与えないプレイヤーのShapley値はゼロである。
     - **アドオン性（Additivity）**: 2つのゲームのShapley値の和は、それぞれのゲームのShapley値の和に等しい。

SHAPでは、プレイヤー＝特徴量、報酬＝予測値として利用している