深度學習的可解釋性研究(二)——不如打開箱子看一看

深度學習的可解釋性研究(二)——不如打開箱子看一看

來自專欄 BIGSCity

深度學習的可解釋性研究(二)——不如打開箱子看一看

在上一節中我們介紹了深度學習可解釋性的三種方法:1. 隱層分析法,2. 敏感性分析法 3. 代理/替代模型法。在這一節中我們主要介紹第一種方法:隱層分析法。

黑箱真的是黑箱嗎?——深度學習的物質組成視角

通過上一節的介紹我們也了解到,深度學習的黑箱性主要來源於其高度非線性性質,每個神經元都是由上一層的線性組合再加上一個非線性函數的得到,我們無法像理解線性回歸的參數那樣通過非常solid的統計學基礎假設來理解神經網路中的參數含義及其重要程度、波動範圍。但實際上我們是知道這些參數的具體值以及整個訓練過程的,所以神經網路模型本身其實並不是一個黑箱,其黑箱性在於我們沒辦法用人類可以理解的方式理解模型的具體含義和行為,而神經網路的一個非常好的性質在於神經元的分層組合形式,這讓我們可以用物質組成的視角來理解神經網路的運作方式。比如如下圖所示,人體的組成過程是從分子-細胞-組織-器官-系統-人體:

人體的組成結構示意

而通過一些對神經網路隱層的可視化我們也發現:比如下圖的一個人臉識別的例子,神經網路在這個過程中先學到了邊角的概念,之後學到了五官,最後學到了整個面部的特徵。

(以上內容參考了@YJango在如何簡單形象又有趣地講解神經網路是什麼?中的回答,侵刪)

如果我們能夠用一些方法來幫助我們理解這個從低級概念到高級概念的生成過程,那麼就離理解神經網路的具體結構就近了很多。而這也可以逐漸幫助我們完成一個「祛魅」的過程,將調參的魔法真正變成一項可控、可解釋的過程。

要理解這個概念的生成過程很重要的一點就是要研究隱層的概念表示,在接下來的部分中我將給大家介紹業界關於隱層分析方法的幾個研究工作。

模型學到了哪些概念?

要理解神經網路中每層都學到了哪些概念一個非常直觀的方法就是通過對隱層運用一些可視化方法來將其轉化成人類可以理解的有實際含義的圖像,這方面一個非常具有代表性的一個工作就是14年ECCV的一篇經典之作:《Visualizing and Understanding Convolutional Networks》,這篇文章主要利用了反卷積的相關思想實現了特徵可視化來幫助我們理解CNN的每一層究竟學到了什麼東西。我們都知道典型的CNN模型的一個完整卷積過程是由卷積-激活-池化(pooling)三個步驟組成的。而如果想把一個CNN的中間層轉化成原始輸入空間呢?我們就需要經過反池化-反激活-反卷積這樣的一個逆過程。整個模型的結構如下圖所示:

反池化:

反池化其實很好理解,以下面的圖片為例,左圖可以表示是池化(pooling)過程,右圖表示反池化(unpooling)過程,池化過程中我們將3*3的一個pooling塊中的最大值取出,而反池化則是將pooling後的值恢復成3*3的像素單元,由於我們現在只有一個激活值, 所以只將該激活值對應原pooling塊中位置的值還原回去,其他的值設定成0。所以在max-pooling的時候,我們不光要知道pooling值,同時也要記錄下pooling值的對應位置,比如下圖pooling值的位置就是(0,1)。

反池化過程

反激活:

在典型的CNN模型中,我們一般使用Relu作為激活函數,而反激活的值和實際的激活值沒有任何區別:只保留正數,其餘值為0即可。

反卷積:

反卷積的過程其實非常有意思,其實反卷積這個名字多多少少有些誤人子弟,和真正的反卷積並沒有多大關係,真實的含義應該是轉置卷積(Transposed Convolution),CNN模型的卷積過程本質上來講和一般的神經網路沒有任何區別(只不過將一些共用參數組合成了一個濾波器的形式),都可以轉變成一個矩陣乘法的操作(只不過對CNN模型來說是一個參數重複度很高的稀疏矩陣),我們不妨將這個稀疏矩陣表示為 C ,那麼後一層和前一層的關係就可以表示為:

CX^{l} = X^{l+1}

而在反向傳播的過程中, C^T 往往可以表示為卷積層對輸入層的梯度,也就是說通過對卷積層進行適當的補0操作,再用原始的卷積核轉置之後的卷積核進行卷積操作,就可以得到相應的梯度矩陣與當前卷積層的乘積,而我們在這裡使用反池化-反激活之後的特徵(其中包含了大部分為0的數值)進行該操作其實表徵了原始輸入對池化之後的特徵的影響,因為在反激活過程中保證了所有值非負因此反卷積的過程中符號不會發生改變。

反卷積是個上採樣過程

通過上面的介紹我們其實可以明白,這個反卷積的方法之所以能夠成功地將CNN的隱層可視化出來,一個關鍵就在於通過反激活-反池化的過程,我們屏蔽掉了很多對當前層的激活值沒有實際作用的輸入層的影響將其歸為0,通過反卷積操作就得到了僅對當前層有實際貢獻的輸入層的數值——將其作為該層的特徵表示因為我們最後得到的這個特徵表示和原輸入空間的大小是一致的,其數值表示也對應著原始空間的像素點,所以在一定程度上,這是我們可以理解的一個特徵表示。

從實驗結果可以看出來,第二層對應著一些邊角或色彩特徵,第三層對應著紋理特徵,第四層對應著一些如狗臉、車輪這樣的局部部位,第五層則對整體的物體有較強的識別能力。

通過上面這篇論文的工作,我們可以大致地用肉眼來判斷神經網路學到的概念類型,但如果能識別一些語義概念的話對我們來說可能更有意義,在這方面一個非常有代表性的工作是在CVPR 2017上發表《Network Dissection: Quantifying Interpretability of Deep Visual Representations》,這篇文章提出了一種網路切割(Network Dissection)的方法來提取CNN的概念表示。

所謂的網路切割(Network Dissection)方法其實分為三個步驟:

1. 識別一個範圍很廣的人工標註的視覺語義概念數據集

2. 將隱層變數對應到這些概念表示上

3. 量化這些隱層-概念對的匹配程度

為了獲得大量的視覺語義概念數據,研究人員收集了來自不同數據源的分層語義標註數據(包括顏色、材質、材料、部分、物體、場景這幾個層次),如下圖所示

而如何將隱層變數對應到這些概念表示上並獲得隱層-概念對的匹配程度呢,本文提出了如下的方法:

對於每個輸入圖像x,獲取每個隱層k的activation map A_k(x) (其實也就是feature map),這樣就可以得到隱層k激活值的分布,對於每個隱層k,我們都可以找到一個 T_k 使得 P(A_k > T_k) = 0.005 ,這個 T_k 可以作為接下來判斷區域是否激活的一個標準。

為了方便對比低解析度的卷積層和輸入層的概念激活熱圖 L_c(x) (其實就是標註出了相關概念在圖像中的代表區域),我們將低解析度的卷積層的特徵圖 A_k(x) 通過插值的方法擴展為和原始圖片尺寸一樣大的圖像 S_k(X)

之後再建立一個二元分割 M_k(x)=S_k(x)ge T_k ,這樣就得到了所有被激活的區域,而我們通過將 M_k(x) 和輸入層的概念激活熱圖 L_c(x) 作對比,這樣就可以獲得隱層-概念對的匹配程度:

可以發現如果匹配度高的話,那麼分子就比較大(交叉範圍大),分母就比較小(合併範圍小),我們通過和顏色、材質、材料、部分、物體、場景不同層次的概念作匹配就能得到隱層學到的概念層次了,這個模型的結構如下圖所示:

Network Dissection的模型結構

模型在AlexNet上的實驗結果

從實驗結果中我們也可以發現隨著層數的增加,神經網路學到的概念類型也逐漸變得高級,比如在AlexNet中,前面的卷積層對顏色、材質的識別力較強,後面的卷積層對物體、場景的識別力較強。特別是對物體的識別上,後面的卷積層有突出的優勢。

低級到高級=泛化到特化?

當然從低級概念到高級概念的一個過程中總是會伴隨著一個非常有意思的現象:泛化性逐漸降低,特化性逐漸升高。比如在細胞層次上,人類和其他動物的區別比較小,這個層次的泛化性就高,但到組織器官層次區別就比較大,這個層次的特化性就高。Bengio團隊在2014年發表的一篇工作《How transferable are features in deep neural networks》就是通過研究特徵的可遷移性來對這個從泛化的特化的過程進行評估。

特徵在遷移任務上的表現往往是評價特徵泛化性能的一個非常好的依據。在遷移學習中,我們首先基於基礎數據訓練一個基礎網路,然後將特徵改換到另一個任務上,如果特徵是具備泛化性的,那麼其在遷移任務中應該也是適用的。在這個工作中,作者將1000個ImageNet的分類分成了兩個組,每個組個包含大約500個分類和645000個樣本。然後利用這兩組數據各訓練一個八層的卷積網路baseA和baseB,然後分別取第1到第7個卷積層訓練幾個新的網路,以第3層為例:

自我複製網路(selffer network)B3B,前三層從baseB上複製並凍結。剩餘的5個卷積層隨機初始化並在數據集B上訓練,這個網路作為控制組

一個遷移網路(transfer network)A3B:前三層從baseA上複製並凍結。剩餘的5個卷積層隨機初始化並在數據集B上訓練。如果A3B的任務表現和baseB一樣好,那麼就說明第三層的特徵至少對於B任務來講是泛化的,如果不如baseB,那麼說明第三層特徵就是特化的。

一個自我複製網路B3B+,網路結構和B3B一樣,但所有層都是可學習的

一個遷移網路A3B+,網路結構和A3B一樣,但所有層都是可學習的

這些網路的結構圖如下圖所示:

而從實驗結果來看,transferAnB的隨著層數的增加性能在不斷下降(泛化降低,特化提升,這印證了我們對泛化特化性質隨層數變化的基本判斷),而控制組的selfferBnB的性能出現了先下降後上升的現象(泛化和特化都不足夠的中間層既缺乏可學習性,特徵的描述性又不夠強,因而出現了性能下降的現象),transferBnB+和transferAnB+一直維持著比較好的性能,但其中transferAnB+的性能確是最好的,特徵在遷移任務上表現出來的優勢其實也對應了我們在上一節中講的模型本身也意味著知識

真的需要那麼多層嗎?

對於神經網路來說,隱層的數量永遠都是一個玄學,我們如何理解隱層的數量和模型性能之間的關係呢?Bengio在2016年還做過一個工作《Understanding intermediate layers using linear classifier probes》。這篇文章的思路非常簡單,就是通過在每個隱層中添加一個線性探針來測試隱層的表徵性能。什麼是線性探針呢?也很簡單,就是以每個隱藏層為輸入,判別的label為輸出建立一個邏輯回歸模型,通過評估模型的準確率我們就能得到隱層在整個訓練過程中以及訓練結束之後表徵性能的變化。

通過32個隱層在二分數據上的實驗我們可以發現隨著隱層的增加表徵性能不斷提高,但提高的比率也逐漸趨於緩慢。

在基於Minist數據訓練的CNN模型上,經過10個周期的訓練,第一個卷積層的表徵性能提升非常明顯,但之後的卷積層並沒有很明顯的提升。

小結

本文中我們主要介紹了四個在隱層分析上有代表性的工作,這類方法在神經網路可解釋性的研究中向我們揭示了隱層性質的變化和概念生成的過程,在之後要講到的敏感性分析方法中,也會不可避免地涉及對隱層的分析。如果大家對這幾個工作感興趣,可以找到相關的文獻做更深入的閱讀,如果有相關的文獻推薦,歡迎私信或者回復。

關於BIGSCity

北航智慧城市興趣組BIGSCITY是隸屬於北京航空航天大學計算機學院的一個學術研究小組,小組致力於研究機器學習與數據挖掘在城市科學、社會科學等領域的交叉應用技術。BIGSCITY的研究興趣包括:城市計算,時空數據挖掘,機器學習可解釋性,以及AI在交通、健康、金融等領域的應用等。本專欄將介紹BIGSCITY的一些研究成果,不定期更新與課題組研究相關的研究工作介紹,以及介紹與BIGSCITY相關的一切有趣的內容。

關於BIGSCITY的詳細情況參見研究組主頁:bigscity.com/

參考文獻

Matthew D. Zeiler, Rob Fergus. Visualizing and Understanding Convolutional Networks[J]. 2013, 8689:818-833.

David Bau, Bolei Zhou, Aditya Khosla, et al. Network Dissection: Quantifying Interpretability of Deep Visual Representations[J]. 2017:3319-3327.

Yosinski J, Clune J, Bengio Y, et al. How transferable are features in deep neural networks?[J]. Eprint Arxiv, 2014, 27:3320-3328.

Alain G, Bengio Y. Understanding intermediate layers using linear classifier probes[J]. 2016.

推薦閱讀:

反卷積層/轉置卷積層--transposed convolution arithmetic
解讀Squeeze-and-Excitation Networks(SENet)
【mask_rcnn】ResNet及mask_rcnn中使用的ResNet網路結構
激活函數/損失函數匯總

TAG:機器學習 | 計算機視覺 | 深度學習DeepLearning |