XAI| 透過 LIME 解釋複雜難懂的模型

Local Interpretable Model-agnostic Explanations (LIME)

Sherry Su
Sherry.AI
7 min readJun 30, 2021

--

一、背景介紹

為了理解模型,2016年 “Why Should I Trust You?” 論文中,提出了局部可解釋性模型 – LIME(Local Interpretable Model-agnostic Explanations)的概念,為 XAI 的研究提供了一些啟發。這篇文章就來大家了解 LIME 是如何解釋模型的吧!

> 想瞭解更多模型可解釋性的重要,可參考以下的文章:

假設我們利用特徵 x₁ x₂ 建立了一個複雜且準確的模型 f (x)去預測個體是 ★(黃色區域)還是 ▲(綠色區域)。從下圖可以發現,若我們想要解釋為什麼這個個體(instance)會被分類至 ★(黃色區域)是非常困難的。

而 LIME 方法就是為了解決上述問題,在該個體的附近建立一個簡單可解釋的模型 g(𝑧′) (下圖中的虛線;例如:線性模型或是決策樹),作為此個體的解釋模型。而可解釋模型 g(𝑧′) 在該個體附近的預測準確度必須與原模型 f(x) 相當,但在離該個體較遠的區域其預測力就會大幅下降,這就是所謂的「局部(local)」忠實性。

LIME 的目標主要是針對一個複雜難解釋的模型,根據欲解釋的個體提供一個局部可解釋的模型,其主要的概念為針對某個體在局部區域找出一個簡單可理解的模型,用以回答「為什麼模型會將某個體分類到特定的類別」。

如果你也想嘗試著用LIME解釋模型,下面提供了 python 的程式碼讓大家練習與參考:
💻 Python code:Google Colab Python code

二、方法與原理

假設我們建立了一個大眼仔與樹蛙的分類器 f(x),若想直接從解釋這個模型為什麼會這樣子分類是非常困難的。

根據LIME的做法,或許我們能選定一個欲解釋的個體資料(如下圖中的星星-玩具樹蛙),並且用一個簡單的線性迴歸來fit這條決策邊界,試圖解釋模型f(x)在這個邊界上是怎麼做決策的。

備註: 黃色區域(星星)為樹蛙,綠色區域(三角形)為大眼仔。

.LIME 的分析步驟如下:

Step1: 將資料分割成小區塊,隨機擾動預解釋的個體的小區塊 (Perturbed Instance) 產生新樣本,丟進模型預測結果。

將玩具樹蛙的圖片丟入此模型預測出來為樹蛙的機率為 0.54。為了瞭解模型所做的決策,將此圖片根據「超像素分割算法」切割成 M 個 Super Pixel(SP₁, SP₂,…,SPᴍ)

原始圖片(Original Image)進行辨識時, 丟入分類器的話,特徵會是一個三維的向量 (RGB),而每個維度代表所對應 pixel 在該 channel 的數值;而 super pixel Image,則是以二元向量 {0, 1} 來表示第 i 個 super pixel是否有存在於這張圖片之中。

接著根據所選定的個體資料進行擾動產生新的資料集 z (Pertubed Instances;),擾動的方式為隨機指派 super pixel 為 0 或 1,若第 i 個 super pixel 為 0,代表將第 i 個 super pixel 以灰色覆蓋;若第 i 個 super pixel 為 1,則是保留該 super pixel。

將新產生出來的資料集以RGB的資料型態丟回原先的分類模型 f,就能得出產出結果 y (這裡的 y 代表的是樹蛙的機率),就能了解到此新資料集在分類模型的分布狀況。

右圖:將擾動的樣本以RGB的資料型態丟回f(x)進行預測得到結果y;左圖:擾動樣本的分布狀況

Step2: 根據樣本相似度(例如特徵距離)給予樣本權重

利用核函數(kernel function)來計算新擾動樣本 z 與愈解釋的個體 𝑥 (玩具樹蛙)的相近的程度,與愈解釋的個體越近的給予較大的權重,較遠的給則給予較小的權重。

根據核函數

Step3: 根據擾動樣本訓練一個簡單線性回歸的模型 𝑔(𝑧′),並且根據模型的係數解釋個體。

這裡的 𝑧′ 代表的是樣本中的第 i 個 super pixel 存在與否,而這裡建模的label則是擾動資料丟回 f 模型所產出的 y。因此就可以根據擾動樣本建立出一個簡單線性回歸。並且找出係數值最大的 M 個特徵,在取得對應的意義,便可以了解該樣本被模型判斷程樹蛙的根據。

如下圖我們可以理解模型會將玩具樹蛙的照片判斷成樹蛙的原因,主要是因為玩具樹蛙的頭部特徵。

對於結構型資料也是進行上述的三個步驟,進行資料擾動(擾動的方式則是隨機選擇特徵進行擾動) → 定義相似度→訓練簡單可解釋的模型。

.LIME的代價函數

Ω(𝑔)用來避免模型過度複雜化,導致不易解釋而用來衡量複雜模型 f 與簡單模型 g 間差異的函數為 𝐋(f, g, 𝜋ₓ)

其中 𝜋ₓ(𝑧) 則是核函數來計算 𝑧𝑥 的接近的程度,用來定義 𝑥 的附近區域之局部性,例如:Gaussian kernel。

三、結果呈現

非結構型資料的結果

根據lime的解釋,我們就能理解模型是基於圖片上的哪些特徵進行判斷的。

.結構型資料的結果

lime 套件可以選擇把連續變數切成不同區間,進行此個體預測結果的解釋。

四、總結

雖然 LIME 提供了一個有效方法用以解釋模型的行為,並且能應用在結構與非結構資料上。但仍然有一些缺點:

  1. 由於他需要建立一個隨機「擾動」的資料集,因此結果並不是一致且穩定的(具有隨機性)。
  2. 此方法是根據局部擾動資料去配適一個線性簡單模型,但有許多情況下即使在局部的資料上仍然不是線性關係。因此,很有可能得到錯誤的解釋。
  3. 需要定義樣本相似度給予權重,但要定義出「合適」的衡量方法並不是那麼的容易與直觀。
  4. 擁有特徵獨立的強烈假設。

最後,感謝你認真讀完這篇文章,如果你喜歡我的文章,請給我一些「掌聲👏🏻「追蹤我的專欄」,你的支持會是我持續分享的動力。若有希望我分享的主題,也歡迎在下面留言 📝讓我知道。

參考資料

  1. “Why Should I Trust You?” Explaining the Predictions of Any Classifier — Ribeiro, Singh, Guestrin (2016)
  2. https://github.com/marcotcr/lime

--

--

Sherry Su
Sherry.AI

Data Scientist @Trend Micro. Graduated from National Taiwan University.