一、概述
- 分類
通常一個深度學習模型是黑盒子的,但我們也希望有一些方法來使得模型是可解釋的(Explainable/Interpretable)。可解釋的機器學習技術分為Local Explanation和Global Explanation兩種。
對于一個圖像識別模型來說,Local Explanation指的是:
Why do you think this image is a cat?
Global Explanation指的是:
What do you think a “cat” looks like?
- 用途
為什么需要可解釋的機器學習技術呢?可以考慮以下例子,也就是說在具體應用的場景中,模型不只需要告訴人們結果,也需要告訴人們為什么會有這樣的結果:
①用機器來協助判斷履歷
具體能力?還是性別?
②用機器來協助判斷犯人是否可以假釋
具體事證?還是膚色?
③金融相關的決策常常依法需要提供理由
為什么拒絕了這個人的貸款?
④模型診斷:到底機器學到了什么
不能只看正確率嗎?想想神馬漢斯的故事
我們可以通過可解釋的機器學習技術來改善我們的模型,同時可解釋的目的并非要使得網絡模型完全地可解釋,它的主要目的是為了Make people (your customers, your boss, yourself) comfortable。
- Interpretable v.s. Powerful
某些模型本質上是Interpretable,比如線性模型,只需要看線性模型的權重大小即可較直觀地解釋模型的作用,但是這樣簡單的模型不夠Powerful。而有的模型比如深度模型是比較Powerful,但是并不容易被解釋,因此我們需要想辦法使得深度模型變得可解釋。
那么是不是有的模型既Interpretable又是Powerful的呢?可以考慮一下決策樹,決策樹具備比較強的分類能力,但也容易被解釋,比如在下圖中,我們可以通過決策樹的結構來分析它的運作機理:
但事實上在使用決策樹時,有時候決策樹也會過于復雜而不易解釋,有時候我們會使用隨機森林,也會使模型變得難以解釋:
二、Local Explanation
- 遮擋組件的方法
Local Explanation回答“Why do you think this image is a cat?”的問題。對于被分類對象來說,我們希望知道組成
的眾多組件
中哪一部分的作用比較大。如果
是圖像,則組件可能是像素或者片段,如果
是文字,則組件可能是詞。例如,下圖顯示了一張圖以及組成它的組件:
我們的操作方法就是剔除或者修改某一組件的值,然后來看是否會對分類結果產生影響。例如下圖中我們使用灰色框來進行圖片的遮擋,最終發現灰色框遮擋住藍色區域時會使得分類錯誤,這說明模型的確是關注了圖像中正確的地方得出了結論:
需要注意這里灰色框的大小甚至顏色是需要作為超參數來調試的,這說明使用這種方法需要調試一些參數才會取得比較好的效果。
- 顯著圖的方法
另一種方式是為某一個組件添加微小的擾動,然后觀察對應輸出類別的變化幅度(分類問題會輸出一個類別向量),如果輸出的類別變化較大的話則說明這個組件對判定對象的類別有重要的作用:
通過評估來衡量組件的重要性,具體操作時要看的是
,最終通過每個組件的梯度就可以獲得顯著圖(Saliency Map),如下所示:
有時也有可能判定對象類別的特征在計算梯度的時候并不顯著,比如下圖中,當大象的鼻子作為識別大象的依據時,如果大象的鼻子長到一定的程度即使在唱也不會使得大象更加像一只大象,也就是說,這叫做梯度飽和(Gradient Saturation ):
解決這個問題的方法有兩個,這里列出兩個鏈接:
①Integrated gradient:https://arxiv.org/abs/1611.02639
②DeepLIFT:https://arxiv.org/abs/1704.02685
要注意的是這種方法也可能會受到攻擊,舉例來說,在下圖中,使用Integrated gradient和DeepLIFT方法都得到了正確的顯著圖,而如果給圖像添加一些噪聲(這些噪聲對人肉眼觀察不會造成影響),就會造成圖像分類不變但顯著圖中顯著的位置變成了白云而非卡車的位置,這說明可解釋的機器學習技術可以用來進行攻擊:
三、Global Explanation
- CNN的可視化
Global Explanation回答“What do you think a “cat” looks like?”的問題。在之前CNN的部分曾經提過的可視化方法也是一種可解釋機器學習的方法,通過固定神經網絡的參數然后通過最大化某一類別來試圖得到神經網絡模型心中的手寫數字的樣子。然而事實上通過
的方法會得到一些類似雜訊的圖:
我們可以根據實際情況來為優化函數加入一些正則化項,比如我們認為對于手寫數字圖片來說圖片的大部分是白色的,只有數字的位置是黑色的,因此我們可以加入正則化項,即通過優化
來查看效果。下圖中是根據上述方法得到的結果,可以看到有幾個數字已經比較像真實的數字了,但是總體上還是不很清晰:
通過合理地設置正則化項,可以獲得比較清晰、適合肉眼觀看的,這里提供一個鏈接供參考:https://arxiv.org/abs/1506.06579,這里有比較好的效果圖:
- 生成器的方法
生成器會輸入一個低維的向量,然后生成一張圖像。如果我們有一個訓練好的生成器(無論是GAN還是VAE等等),我們就可以使用這個生成器來對解釋分類器做出一些限制,具體操作是將生成器與分類器連接到一起,并且在優化過程中固定生成器和分類器的參數。如下圖所示,我們現在不再尋找一個最佳的
,而是要尋找一個最佳的
,然后
通過生成器產生的圖像就會是一張人類可以看的圖像,同時它也可以使得分類器對應的類別的值達到最大:
以下是生成器生成的結果:
四、用一個模型來解釋另一個
- LIME
我們試圖用一個容易解釋的模型來解釋另一個,被解釋的模型相當于一個黑盒子。具體的操作方法是使得容易解釋的模型擁有與被解釋的模型同樣的輸入,然后通過使容易解釋的模型盡量輸出與被解釋的模型同樣的輸出來訓練它。在下圖中,我們試圖使用線性模型來解釋深度模型:
但是這種方法的局限性在于線性模型的容量(capacity)太小而不足以解釋深度模型,但是我們可以嘗試用線性模型來解釋深度模型的局部區域,這也就是LIME(Local Interpretable Model-Agnostic Explanations)技術的思想。
例如在下圖中(以一維為例),我們采樣了一些樣本點然后使用線性模型來解釋黑盒子的局部:
LIME的具體操作步驟是:
①選取一個想要解釋的點;
②在這個點附近取樣;
③使用線性模型(或者其他易于解釋的模型)來進行擬合;
④解釋線性模型(或者其他易于解釋的模型)。
不應該認為LIME的方法就是在計算梯度,可以看到上述直線的斜率并不等于中間的樣本點處的梯度。
需要注意第②步中,我們要在取樣的點的周圍進行取樣,如果取樣范圍過大的話可能會造成下圖中的問題,解釋的效果就不會太好:
- LIME舉例
我們試圖用一個線性模型來解釋圖片分類器中的一張圖片。這里的步驟如下:
①選取一張需要解釋的圖片,比如我們使用一張跳蛙的圖片:
②在這張圖片附近取樣,取樣的方法是將這張圖片分成多個區塊:
然后隨機拿掉一部分片段從而獲得這張圖片“附近”的多個樣本,然后計算模型對每張圖片的“frog”這一類的輸出:
③使用線性模型來擬合,這里往往直接將圖片轉換成向量然后用線性模型來擬合是不現實的,通常我們需要將圖片轉換為一個低維的向量,比如轉換成一個維度為分成的區塊的數量的向量,每一維取值為0或1,0表示該區塊被刪除,1表示被保留,然后再使用線性模型進行擬合:
④最終我們可以根據每個區塊的權重的大小來確定各個區塊對于判定這張圖片屬于“frog”這一類別的作用:如果
說明這個區塊對于判定是無關的;如果
說明這個區塊表明圖片屬于“frog”;如果
說明這個區塊表明圖片不屬于“frog”。
- 使用決策樹來解釋另一個模型
如上圖,我們希望使用決策樹來解釋另一個模型,假設要解釋的模型的參數為,用來解釋它的決策樹是
,我們使用
(
舉例來說使用平均深度)來度量決策樹的復雜度。我們希望用來解釋的決策樹的復雜度不要太高,因為我們使用一個很復雜的決策樹來解釋神經網絡模型的話,就可能使得決策樹因為過于復雜而沒有較強的解釋能力。
我們使用的方法是樹正則化(Tree regularization)的方式,即在訓練被解釋的模型時,要將用來解釋它的決策樹的復雜度作為一個正則化項來進行優化,也就是說在訓練被解釋的模型的同時也要保證解釋它的決策樹盡可能地不復雜。其優化函數如下:
我們面臨的問題是使用平均深度無法做微分,因此這里提出一種有效的解決方案,也就是我們訓練一個另外的神經網絡(前饋網絡即可),這個網絡的輸入是一個神經網絡的參數,然后可以預測這個輸入的神經網絡轉換成決策樹后的平均深度。訓練這個網絡的方式是收集一些神經網絡然后將它們轉換成決策樹獲得其平均深度,然后就有了這個網絡的一些輸入和輸出,也就可以訓練這個網絡了。有了這個網絡以后我們就可以通過這個網絡來獲得,也就可以進行微分了。