---
# System prepended metadata

title: 李宏毅_Explainable ML
tags: [NTU, Hung-yi Lee, Explainable ML]

---

# 李宏毅_Explainable ML
###### tags:  `Hung-yi Lee` `NTU` `Explainable ML`

## Explainable ML (1/8)
[課程連結](https://www.youtube.com/watch?v=lnjrn3bF9lA)

課程說明：我們希望機器知道某些事情，但我們更希望機器告訴我們它為什麼知道。
### Explainable ML
![](https://i.imgur.com/SWkMI5r.png)

我們都已經知道如何訓練一個分類器來判斷圖片裡的東西是什麼，但我們希望機器可以給我們理由，讓我們知道為什麼它那樣判定。這分為兩類作法：
* Local Exmpanation：為什麼機器覺得圖片裡面是一隻貓
* Global Explanation：在機器的內心世界裡面，一隻貓是長什麼樣子
### Why we need Explainable ML?
![](https://i.imgur.com/TFZILvJ.png)

就好像最近流行用機器來判讀履歷，我們會希望機器告訴我們它的關注點，機器到底是看人的能力還是性別。

又或者以機器來判斷是否可以讓罪犯假釋，這時候我們會希望讓我們知道它是依據什麼事證，或者單純的有歧視而是以膚色來判定。

在金融界裡面，如果要拒絕給人貸款，也是需要原因，我們也會希望知道機器是依據什麼而拒絕。

機器可解釋了，我們就可以診斷模型，瞭解機器到底學到什麼，一個模型的好壞並不單純的看它的正確率。
### Explainable ML
![](https://i.imgur.com/34Gs5q7.png)

上面是一個實事漫畫，大概是挖苦機器學習的黑盒子。
### My Point of View
![](https://i.imgur.com/mV9TrSX.png)

李弘毅老師個人觀點：
* Explainable ML並不代表完全瞭解模型如何判斷，而且也未必需要這麼秀撤
    * 雖然多數人覺得深度學習是一個黑盒子，但人類也是黑盒子，你也未必瞭解走在路上的路人
* Explainable ML的目標就是讓人高興，而這個人就是被服務者，也是客戶，也許老闆，也許是寫程式的那個人
* 未來或許Explainable ML會對不同的對向有不同的解釋
### Interpretable v.s. Powerful
![](https://i.imgur.com/aomISUY.png)

有一些模型在本質上就已經很容易瞭解，不需要過多的解釋：
* 線性模型，單純的weights x features，透過weights的大小還要正負號你很直觀的可以瞭解這個feature是不是重要的
* 缺點是並不是那麼強

深度網路就很難以解釋：
* 有些人認為，深度學習是一個黑盒子，無法解釋，我們不應該使用它，但我們該思考的是，如何讓深度學習的模型是可以解釋的
* 一個故事，有個人車鑰匙不見，在旁邊的路燈下找，路人問他，你的鑰匙掉在這嗎?車主回答，不是，在陰暗的地方，但是這裡有光
    * 這故事說明著，因為可以解釋就堅持使用，而放棄一個更強大的模型
### Interpretable v.s. Powerful
![](https://i.imgur.com/3Fsv080.png)

決策樹或者是一個可解釋又非常強大的的模型，但這並不一定。
### Interpretable v.s. Powerful
![](https://i.imgur.com/5MhB5yV.png)

決策樹在某種情況下是非常難以解釋的，而且單一決策樹並不見得可以得到一個好的結果，也許我們需要的是森林，但這種情況下就更難解釋。

## Explainable ML (2/8)
[課程連結](https://www.youtube.com/watch?v=pNpk6DPYUh8)

課程會從Local Explainable開始說起
### Basic Idea
![](https://i.imgur.com/Hsv2JWb.png)

假設，Object x是由很多的components所組成(可以是pixel、或是segment，或是word)，而我們希望機器告訴我們，當它判斷這個object x的時候，那些components對它而言是重要的。

觀念上很簡單，只要將components移除掉對模型的判斷影響很大，那就可以證明這個components對機器而言是重要的。
### Local Explainable
![](https://i.imgur.com/glGTDGR.png)

上面的圖可以看的到，藍色是冷區，紅色是熱區，灰色的區塊是一個遮蔽，由左到右為狗、車輪、狗。可以明顯看的到，當區塊遮蔽到重要部位的時候是會影響模型的判斷，這可以證明模型的關注點是正確的。至少最右邊的那張並不是將兩個人判斷為狗。

這邊要注意的是遮蔽大小的選擇。
### Local Explainable
![](https://i.imgur.com/gIm6pSG.png)

另一種作法，將某一個component加上$\Delta x$，然後計算加入之後對$y$的影響，計算的方式也很簡單，就是計算它的梯度，即計算$\vert \dfrac{ \partial y_k}{\partial x_n} \vert$，計算$x_n + \Delta x$對$y_k$的偏微分，再取絕對值。

用這種作法，你就可以畫一個Saliency Map，也就是圖片上下排的影像。從圖可以清楚看的出那些pixel是比較重要的。圖上每一個亮點都代表我們計算這個點加上$\Delta x$之後對$y_k$的偏微分的絕對值。
### To Learn More ..
![](https://i.imgur.com/Atmz3I7.png)

相關作法如上清單參考。
### Limitation of Gradient based Approaches
![](https://i.imgur.com/cUHoRhk.png)

上面說明利用gradient來計算的方法有一個潛在的問題，那就是Gradient Saturation。

上圖以大象及其鼻子長度為例說明，大家都知道大象有長鼻子，但是可以發現，當鼻子長到一個程度之後，對它是大象的信心分數就封頂幾乎不會再增加。這意味著，在信心分數到頂之後，多出來的部份你去計算所得的梯度幾乎是零。

相關的解決方式可以參考：
* [論文連結_Gradients of Counterfactuals](https://arxiv.org/abs/1611.02639)
* [論文連結_Learning Important Features Through Propagating Activation Differences](https://arxiv.org/abs/1704.02685)
### Attack Interpretation?!
![](https://i.imgur.com/UaOxb0p.png)

[論文連結_Interpretation of Neural Networks is Fragile](https://arxiv.org/abs/1710.10547)

Interpretation是可以被攻擊的。上排兩張圖是我們用了不同的作法來產出Saliency Map，也清楚的看的到模型對卡車的判斷。

下排兩張圖片是我們加入一個人眼看不出來的神奇噪點，而這個噪點並不會影響模型對卡車的類別輸出，但它卻影響解釋出來的結果。

## Explainable ML (3/8)
[課程連結](https://www.youtube.com/watch?v=K6TpPWLc52c)

### Case Study: Pokemon v.s. Digimon
![](https://i.imgur.com/sbIjSWj.jpg)

舉一個實際案例來說明，我們要訓練一個分類器來辨別現在輸入的影像是神奇寶貝還是數碼寶貝。

### Task
![](https://i.imgur.com/YwIKBUM.png)

[Pokemon images](https://www.Kaggle.com/kvpratama/pokemon-images-dataset/data)
[Digimon images](https://github.com/DeathReaper0965/Digimon-Generator-GAN)

網路上有相關的資料集，需要的話可以自行取用。
### Experimental Results
![](https://i.imgur.com/psCDTWY.png)

這是用keras隨意堆出來的一個分類器。
### Saliency Map
![](https://i.imgur.com/qEUOSog.png)

上圖是各照片的Saliency Map，讓人訝異的是，關注點是在邊緣，而非生物的本體。
### Saliency Map
![](https://i.imgur.com/YfLtHyi.png)

這張圖更明顯，機器關注的是邊緣，而不是本體。
### What Happenend?
![](https://i.imgur.com/HsxGQFI.png)

後來發現，原來Pokenmon是png檔，而Digimon是jpg檔....因此只要看背景就知道是什麼寶貝了.....=..=


## Explainable ML (4/8)
[課程連結](https://www.youtube.com/watch?v=yORbWn7UsBs)

課程說明Global Explanation
### Activation Maximization(review)
![](https://i.imgur.com/D2WcZYn.png)

Activation Maximization，找一張圖片讓neuron或是filter最大化。以手寫數字分類器為例說明，假設我們希望知道對機器而言5是長什麼樣子，那我們就把那相對應的output的neuron拿出來，以$y_i$表示，而我們希望找一張輸入的圖片$x$讓$y_i$的值愈大愈好，即：
$x^* = \arg \max_x y_i$

先前的課程提過，畫出來的樣子就跟壞掉的電視差不多。還記得在Attack Model課程有提過，我們可以加入一些雜訊就讓機器瞬間壞掉誤判，這是一樣的道理。
### Activation Maximization(review)
![](https://i.imgur.com/69CZMh4.png)

我們需要加入一些額外的限制，我們除了希望輸出的機率愈大愈好以外，還希望它看起來像是一個數字：
* $x^* = \arg \max_x y_i + R(x)$
* R(x)= - \sum_{i, j} \vert x_{ij} \vert
    * 意味著這個輸入的$x$有多像一個數字
    * $R(x)$可以有多種不同的定義，這邊舉的是將所有的pixel加起來，因為對數字而言，就只有數字的那個筆劃是會有值的，影像上的多數部位是沒有值的。因此我們可以利用所有pixel的強度總合來判斷它像不像一個數字(如果是雜訊強度就非常強)
### Global Explanation
![](https://i.imgur.com/SKtqOHk.png)

文獻上可能會常看到像上方那麼漂亮的解釋圖，要得到這種圖需要加入多種正規

## Explainable ML (5/8)
[課程連結](https://www.youtube.com/watch?v=1xnhQbAV1m0)

### Regularization from Generator
![](https://i.imgur.com/oVG7rmq.png)

剛才的作法是以人想的一些function來告訴機器怎麼樣的東西看起來像是正常的影像。但有另一種方法，就是利用generative model，訓練一個generator。給定一個低維度的向量，經過generator之後變成圖片。這可以利用GAN或是VAE來達成。

原本我們的構想是，找一個$x$讓$y_i$的值愈大愈好，現在加入一個generator之後，就變成是找一個$z$來讓$y_i$的值愈大愈好，即：
$z^* = \arg \max_z y_i$

我們希望找一個$z$，經過generator之後得到$x$，再通過classifier讓$y_i$的信心分數愈大愈好。當我們找到那個$z$之後，只需要讓它經過generator就可以看它是長什麼樣子了。

這麼做的好處是，generator本身就是一個限制，我們可以確保機器產生的東西是我們人可以看的懂的，而不再是雜訊。
### Result
![](https://i.imgur.com/MeGIcCB.jpg)

[論文連結_Plug & Play Generative Networks: Conditional Iterative Generation of Images in Latent Space](https://arxiv.org/abs/1612.00005)

文獻上的結果如上圖。


## Explainable ML (6/8)
[課程連結](https://www.youtube.com/watch?v=K1mWgthGS-A)
課程說明的是，利用一個model來解釋另一個model，利用一個可以被解釋的模型來解釋另一個不能被解釋的模型
### Using a model to explain another
![](https://i.imgur.com/WnhDFbO.png)

利用一個可以解釋的模型來模仿一個不能解釋的模型。假設我們有一個Black Box，這也是許nn，也許是其它演算法，都可以。我們要訓練另一個模型跟這個Black Box有相同的行為，而我們希望這個模型的輸出跟Black Box的輸出愈接近愈好。

如果用的是linear model會希望，無法模仿，因為linear model本身就相對簡單，因此難以模仿。但如果只是要單純的模仿某一小部份的話還是可行的。
### Local Interpretable Model-Agnostic Explanations(LIME)
![](https://i.imgur.com/cQm8i1P.png)

LIME在Python上有套件可以使用，這可以google一下。

假設我們的Black Box是一個一維的input與一維的output。我們雖然無法用linear model來完整的模仿Black Box的行為，但可以模仿一部份的行為。LIME的流程如下：
1. 決定你的分析的data point
2. 在欲分析的data point附近sample幾個data point
3. 將要分析的資料與sample出來的資料帶入Black Box，觀察得到的輸出
4. 訓練一個linear model來模仿在這個區域內的行為
5. 分析之後可以得知，在這個區域內的x值變大情況下，其y值會變小

以上就是LIME的基本概念，這裡面比較重要的是"sample附近"的資料，裡面的"附近"，不同的"附近"的定義就會有不同的分析結果。
### Local Interpretable Model-Agnostic Explanations(LIME)
![](https://i.imgur.com/uxbrhED.png)

我們可以看到，如果你的"附近"的定義是如上圖那麼樣的寬的話，那得到的linear model就會完全的不同。

## Explainable ML (7/8)
[課程連結](https://www.youtube.com/watch?v=OjqIVSwly4k)
課程概略說明LIME的概念
### LIME - Image
![](https://i.imgur.com/RWEEISy.png)

LIME通常只能應用於Local Explanation，因為linear model並不能fit整個nn。

範例說明：
1. 我們要用LIME來看為什麼分類器會將它分類為樹蛙(data point)
2. 加入一些雜訊，或拿掉一些pixel，但如果是單純的拿掉1個pixel對整個分類器可能沒什麼影響，效果可能不是很好(sample)
    * 常見作法是將影像切割為小區塊，以小區塊為單位，做為後續的分析
    * 隨機丟棄一些區塊，產生不同的影像，這就是sample
    * 將sample的資料丟入Black Box，得到各sample的分數

### LIME - Image
![](https://i.imgur.com/IxblTxA.png)

3. fit輸入的sample與輸出分數之間的關係
    * 如果直接將所有的pixel做為輸入，這對分析而言也不是很容易，因此實作上會先執行feature extract，再丟linear model
    * 如果是採用segment的作法，那你將照片切成幾個區塊，我們開的向量就有幾維，切割成M個區塊，那向量就是M維，刪除的那個區塊的索引就是0，而1代表沒有刪除

### LIME - Image
![](https://i.imgur.com/x39desz.png)

4. 解釋學習到的模型
    * linear model: $y = WX + b$，維度則視切割區塊數量而定
    * 從linear model的weight就可以知道每一個區塊的重要性，舉例來說，第m個區塊對應到的weight趨近於0，這意味著這個區塊並不影響模型判斷，如果weight是正數，那代表這個區塊對模型是有正向的影響，如果是負值，那就代表看到這個區塊會告訴機器這不是青蛙
### LIME - Image
![](https://i.imgur.com/rTBcfck.png)

上圖是一個實驗的結果。

## Explainable ML (8/8)
[課程連結](https://www.youtube.com/watch?v=gotiBlOu18I)

### Decision Tree
![](https://i.imgur.com/6Ubw4kx.png)

除了linear model，我們也可以採用decision tree做為解釋用的模型，只要夠深，相信decision tree是可以完全的模擬Black Box的行為。但實際上我們並不希望這樣做，而是希望利用一個有限的decision tree來fit，這個decision tree我們以$T_\theta$來表示，而以$O(T_\theta)$來表示這個decisiion tree的複雜度，我們希望這個複雜度是小的。

### Decision Tree - Tree regularization
![](https://i.imgur.com/M9JTTnr.png)

[論文連結_Beyond Sparsity: Tree Regularization of Deep Models for Interpretability](https://arxiv.org/pdf/1711.06178.pdf)

假設要分析的是一個nn的話，那我們就訓練一個特別的nn，而這個nn在訓練的時候就已經想到它要被decision tree分析，也就是希望這個nn可以很容易利用decision tree來解釋：
$\theta^* = \arg \max_\theta L(\theta) + \lambda O(T_\theta)$

這個目標函數意味著，我們除了找到一組$\theta$來最小化loss之外，我們還希望其解釋模型的decision tree的複雜度愈小愈好。現在的問題就是，要用梯度下降求解就必需要可以求微分，但後面的項目是無法微分的。這就是這篇論文神奇的地方。