假定在圖片分類任務中有一張圖片,Local Explanation則要求機器說明爲什麼它認爲這張圖片是某個類別(比如“cat”)。
Explainable AI(Local Explanation)的目標是,知道每個component對於最終結果的重要性。我們可以通過remove或者modify其中一個component,看decision會有什麼變化。
基於梯度判斷Component重要性
假設輸入是\(x\),它有很多component \(\{x_1,x_2,\dots,x_N\}\)組成。如果輸入是image,則component一般是pixel、segment或patch等;如果輸入是text,則component一般是word。對於圖片,我們可以在圖片上“放置”一個灰塊以覆蓋圖像的一小部分,觀察其對結果的影響,見《Visualizing and Understanding Convolutional Networks》。注:component的選取、remove或者modify也是需要研究的。
還有另一種方法是,輸入爲\(\{x_1,...,x_n\}\),對某個pixel \(x_n\)加上\(\Delta x\),用\(\frac{\Delta y}{\Delta x}\)來表示擾動\(\Delta x\)對結果\(y\)的影響,即通過\(\frac{\partial y_k}{\partial x_n}\)的絕對值表示某個pixel對\(y_k\)的影響,見《Deep Inside Convolutional Networks: Visualising Image Classification Models and Saliency Maps》。
還有很多其它基於梯度來判斷Component重要性的方法:
-
Grad-CAM
-
SmoothGrad
-
Layer-wise Relevance Propagation(LRP)
Redistribute the output, Backward propagation until reaching input
-
Guided Backpropagation
梯度飽和
基於梯度來判斷component重要性的方法也存在着侷限性:梯度飽和(Gradient Saturation)和Noisy Gradient。
考慮\(\frac{\partial大象}{\partial鼻子長度}\),可知在一定範圍內,鼻子越長,則判定爲大象的概率就越大,但隨着鼻子長度增加到一定數值後,鼻子長度對於判定大象的影響幾乎爲0,這時就出現了梯度飽和,如下圖所示。
那如何解決梯度飽和的問題呢?解決方法就是Global Explanation,可以參考Integrated gradient和DeepLIFT。
相對於梯度飽和,另外一個問題就是Noisy Gradient,即Gradient變化非常大,解決方法是SmoothGrad(在計算梯度時添加噪聲以擾動生成多個樣本,並計算平均梯度)
Attack Interpretation
向輸入中加入一些細微的噪聲,這樣並不影響視覺效果和模型的輸出,但這樣可以攻擊explanation,如下圖所示,詳見《Interpretation of Neural Networks is Fragile》。
Github(github.com):@chouxianyu
Github Pages(github.io):@臭鹹魚
知乎(zhihu.com):@臭鹹魚
博客園(cnblogs.com):@臭鹹魚
B站(bilibili.com):@絕版臭鹹魚
微信公衆號:@臭鹹魚
轉載請註明出處,歡迎討論和交流!