XAI 系列 02 · LIME for Image Classification

當解釋對象
一張照片

表格資料的特徵是欄位,文字的特徵是詞,那影像呢?224×224 個像素?不 — LIME 用一招漂亮的轉換,把影像變回「可以線性逼近」的東西。本頁帶你看完整 pipeline,並重現經典的哈士奇 → 狼偏誤案例。

核心 · Superpixel as Feature 採樣 · Random Mask Perturbation 擬合 · Weighted Linear Regression 用途 · Saliency & Bias Detection
§ 01 · 表格、文字、影像

影像的「特徵」
到底是什麼

LIME 的精神是「找一個簡單的線性模型來近似黑盒模型在這個樣本附近的行為」。但要做線性迴歸,得先有特徵。不同資料型態,特徵長得很不一樣。

Tabular · 表格資料

每一欄就是一個特徵

收入
年齡
信用
負債
85K
42
720
28%

特徵已經是離散、有意義的單位。直接擾動數值即可。

Text · 文字資料

每一個詞就是一個特徵

這部 電影 真的 超棒 演員 演技 精彩

擾動方式:隨機把詞拿掉(或換成 [UNK])看分類機率變化。

Image · 影像資料

每個超像素是一個特徵

單一像素沒意義 — 224×224 = 5 萬個太多了。聚成 50~100 個 superpixel 才是線性可逼近的特徵。

換句話說:影像 LIME 的關鍵第一步,不是訓練模型,而是把連續的像素場切成有意義的區塊。這一切的開始,叫做 Superpixel Segmentation

§ 02 · Superpixel

把像素,聚成有意義的區塊

Superpixel 演算法把顏色相近、空間相鄰的像素聚成一個區塊。最常用的是 SLIC(Simple Linear Iterative Clustering),它本質上是在 5 維空間(R, G, B, x, y)上做 K-means。

分割完之後,原本 50000 個像素變成大約 50~100 個 superpixel。從此每個 superpixel 在 LIME 眼中就是一個特徵,狀態只有兩種:保留遮蔽

原始影像 → Superpixel 分割 未分割

分割後得到 9 個 superpixel

SP-01 到 SP-09 · 已標號

真實的 SLIC 通常會切出 50~200 個 superpixel,每個約 200~500 像素。為了讓示範清晰,這裡用語義級分割把貓的照片切成 9 塊:天空、草地、貓臉、雙耳、雙眼、鼻子、身體、腳。

實務上你可以選:

  • SLIC — 速度快、邊界整齊,最常用
  • Quickshift — 邊界更貼合物體
  • Felzenszwalb — 適合自然紋理

關鍵概念:切完後,原本連續的像素變成離散的開關陣列,這正是線性迴歸需要的特徵格式。

§ 03 · 完整 Pipeline

五個步驟,跑一次完整 LIME

從一張原圖到一張帶解釋的圖,影像 LIME 走過五步。用上面那張貓圖一路跟到底:

輸入:原始影像

準備好「特徵向量」

輸入是一張要解釋的影像。LIME 不需要知道模型內部 — 它只會把影像餵進去,看模型吐出什麼機率。

但在開始之前,先把影像切成 superpixel,並建立一個「全開」的二進位向量 x = [1,1,1,1,1,1,1,1,1]

這個向量是 LIME 整個分析的「原點」 — 每個位置代表一個 superpixel 是否保留。所有擾動樣本都會圍著它生成。

模型對原圖預測:cat: 0.85

§ 04 · 經典案例

當哈士奇被當成
LIME 揭穿模型的偏見

2016 年 LIME 論文裡的這個例子已經是 XAI 教科書級別 — 一個訓練良好的「狼 vs 哈士奇」分類器,看起來準確率很高,但 LIME 揭穿了它真正在看的東西。

模型預測:狼 (Wolf) · 信心度 91%

看起來「準確」的模型,到底學了什麼?

訓練集中:

  • 的照片,幾乎都在雪地
  • 哈士奇 的照片,幾乎都在草地或室內

模型在驗證集上拿到了 90%+ 的準確率,但它真正學會的不是「狼的特徵」 — 而是背景

當你給它一張哈士奇在雪地的照片,它會自信滿滿地說:「這是狼。」

按下左邊「執行 LIME 解釋」 — 看看模型究竟把哪些區域當成了「狼」的證據:

★ LIME 揭露的真相
模型在看雪,不在看狗。

LIME 高亮的「支持狼」區域全部集中在雪地上 — 哈士奇本身的臉、毛、耳朵幾乎沒有被當作判斷依據。這就是資料偏誤(dataset bias)透過 XAI 暴露出來的瞬間。如果沒有 LIME,這個模型可能會堂堂正正進入產線,直到某天部署在沒有雪的地方表現崩壞。

§ 05 · 實務指南

,比用更重要

影像 LIME 是診斷工具,不是公布欄。錯誤的設定會給出誤導性的解釋。以下是常見的注意點:

該做的

  • 分割演算法選擇要匹配你的影像類型 — 自然影像用 SLIC,醫學影像可能要試 Quickshift
  • 樣本數至少 1000 個以上,否則局部擬合不穩定
  • 使用 Lasso 做特徵選擇,避免所有 superpixel 都拿到一個小係數
  • 多跑幾次不同隨機種子,看解釋是否穩定 — 不穩定 = 不可信
  • 每個類別都跑一次解釋(不只是 top-1)— 看模型如何排除其他類別

! 該避開的

  • 太多 superpixel(>200)會讓擬合過擬合,每個係數都很小且不穩
  • 黑色遮蔽小區域 — 對某些模型反而會引入新訊號,改用平均色
  • 只看單一樣本就下結論 — LIME 是局部解釋,不能推到整個模型行為
  • 把 LIME 結果當成「ground truth」拿來訓練 — 它是診斷工具,不是訊號來源
  • 忽略採樣分佈 — Bernoulli(p=0.5) 不一定是最佳遮蔽率
# Python · lime 套件最小骨架 from lime import lime_image from skimage.segmentation import slic # 1. 建立 explainer explainer = lime_image.LimeImageExplainer() # 2. 對單張影像生成解釋 explanation = explainer.explain_instance( image, # numpy array (H, W, 3) classifier_fn=model.predict, # 回傳 (N, num_classes) 機率 top_labels=3, # 解釋前 3 個類別 hide_color=0, # 遮蔽色(0=黑,None=均值) num_samples=1000, # 擾動樣本數 segmentation_fn=lambda img: slic(img, n_segments=80) ) # 3. 取得對應某個類別的解釋圖 temp, mask = explanation.get_image_and_mask( label=explanation.top_labels[0], positive_only=True, # 只顯示支持該類別的區域 num_features=5, # 顯示前 5 個重要 superpixel hide_rest=False )

📝 iPAS 考點提醒

LIME 是模型無關的可解釋 AI(XAI)方法,iPAS 中級科目三考點。重點:在單一預測附近用可解釋的簡單模型(線性)做局部近似,找出哪些特徵或影像區塊(superpixel)推動了這次判斷。易混點:LIME 是局部、單筆解釋(不是全局),且 model-agnostic(任何黑盒都能套);與 SHAP(基於 Shapley 值、有理論保證)路線不同。情境:解釋影像分類為何判成這類。

想練情境題與詳解 → AI 學習與考證地圖

❓ 常見問題

LIME 是什麼?

Local Interpretable Model-agnostic Explanations,一種事後可解釋方法:對單一預測在其附近擾動取樣,用簡單模型(如線性)近似,解釋這次預測受哪些特徵影響。

Local 和 Model-agnostic 是什麼意思?

Local 指只解釋單筆預測的局部行為(非整個模型);Model-agnostic 指不需知道模型內部、把它當黑箱,任何模型都能解釋。

LIME 在影像上怎麼運作?

把影像切成超像素(superpixel),隨機遮蔽部分區塊產生擾動樣本,看預測怎麼變,找出對該分類最關鍵的區域並標示。

LIME 的限制?

解釋是局部近似、可能不穩(取樣隨機,每次略不同)、對擾動方式敏感、只說相關不保證因果,適合輔助理解而非絕對依據。

為什麼需要可解釋(XAI)?

高風險領域(醫療、金融、司法)需要知道為什麼這樣判,以建立信任、除錯、合規與發現偏誤;黑箱模型不利問責。

🧭 相關主題

← 返回 AI 學習與考證地圖