穩健性與可解釋性

顯著性圖(saliency map)

/ SAY-lee-un-see map /

顯著性圖,是鋪在輸入(通常是影像)之上的一張熱力圖,顯示模型在做決定時最關注的是哪些部位。模型看得最用力的地方亮堂堂,它忽略掉的地方則暗下去。對一個把照片標成「狗」的模型來說,一張好的顯著性圖,理想情況下應當把狗點亮,讓草坪保持昏暗。它是最直觀、最具畫面感的解釋形式,而這份鮮明,既是它的長處,也是它的陷阱。

最簡單的版本問的是:我若把每個像素輕輕一推,模型的答案會變多少?最能撬動答案的像素,就最「顯著」。這是從模型的梯度算出來的——和訓練時所用的,是同一批導數。還有許多更花哨的變體(把雜訊抹平、沿一條路徑做積分、動用內部激活值),每一種都想造出更乾淨、對「模型實際所用」更忠實的圖。

顯著性圖之所以要緊,是因為一團亮斑落在正確的物體上讓人安心,而一團亮斑落在背景上則是警報——就像那個「狼還是雪」的案例。可這個領域在此處學到了一份艱難的謙卑。有些流行的顯著性方法,即便把模型的權重隨機化成一堆胡言亂語,仍能產出看上去幾乎一模一樣的圖——這意味著那張漂亮的圖,壓根沒在解釋那個訓練好的模型。一張顯著性圖,可能是一扇真窗,也可能是一塊羅夏墨跡;單憑「它看起來有多合理」,你分辨不出是哪一種。

一個胸片模型標記出「肺炎」。它的顯著性圖亮得很——可亮的是影像角上那塊印著醫院元資料標籤的地方,而不是肺。原來模型學到的是:某家醫院(接診的病人病情更重)用了一種特定的標籤,於是它讀的是標籤,而非疾病。這張熱力圖抓住了一條捷徑,而任何一張指標表格都抓不住。

一張顯著性圖能揭示出:模型在「讀標籤,而非讀肺」。

信任一張顯著性圖之前,先做這道「健全性檢查」:如果把模型權重隨機化後,圖幾乎沒變,那這張圖反映的就是輸入、或方法自身的怪癖,而非那個訓練好的模型——它什麼也沒解釋。一張漂亮、直觀的熱力圖,並不自動就是一張忠實的圖。

又稱
attribution mapheatmap explanation显著性图归因图顯著性圖歸因圖