可視化神經網路:Grad-CAM小簡介 — 論文筆記(1)什麼是Grad-CAM
深度學習運用在電腦視覺領域已經有一段時間了,在初期剛發展有一定成效的時候,一個主要被討論的點是「如何知道模型確實是照人類所想的方式達成目標」。這是因為在最早的年代,從上個世紀末的LeNet,一直到2012年的AlexNet,深度學習模型主要在電腦視覺的任務,是圖片分類。整張照片要歸類成人類指定的分類,模型做到了不錯的分類準確度。
然而,人們開始思考,模型是否確實根據圖片中的物件分類圖片?當然,這個問題,在如今已經進展到物件偵測、甚至是圈選的任務,大家已經比較沒有疑問了。但在當時,這確實是一個有趣的問題,也是許多「黑箱論」的主要質疑。
要知道模型判斷的根據,就要擷取其在神經網路中間學習的結果。有一些方法可以做到:例如找出每一層學到的特徵,這個可以從被啟動的神經元著手;或者,找出每一層的梯度流向,這就是今天要介紹的這篇文章:Grad-CAM: Visual Explanations from Deep Networks via Gradient-Based Localization [1]要討論的。
透明的模型
如上所述,與其花費時間試著不斷使用外部資料來反覆驗證模型的能力(當然,這件事我覺得也一樣重要,但這某方面來說已經是在使用模型了),要從根本上建立使用者對於模型的信任,還是要「證明」模型確實根據人們的判斷來達成任務。
Why they predict what they predict
所以,直觀的做法就是將模型可視化:有時被稱為視覺化神經網路,或者可解釋性AI,無論怎麼稱呼,就是讓模型透明,而不再被稱為黑箱。作者認為在AI發展的三階段,可解釋性的模型都有其意義:
- AI模型表現仍弱於人類判斷時:可解釋性AI可以顯示出錯誤的地方,幫助人去修正弱點。
- AI模型表現接近人類判斷時:可解釋性AI可以展現其說服力,幫助人類建立信心去使用它。
- AI模型表現超過人類判斷時:可解釋性AI有「教育」意義,告訴人類其判斷的依據,或許有助於人類抓到一些按照一般想法找不到的關鍵。
不過,透明跟可解釋性,有時確實存在矛盾。亦即模型的透明度高,準確度可能較差。在過往,專家系統[2]的可解釋性是高的,因為模型的判斷依據基本上由人類提供。然而,其極限將接近或略低於人類的判斷能力,由此可能無法達到更理想的準確度。反之,深度學習的模型最大的特色就是層數多[3],雖然單一層的運算原理算清楚,但堆疊起來之後是否還是同一回事就很難說,由此產生不透明的現象。不過,深度學習的準確性,經過這些年的演進,相信是不用再質疑了。
Class Activation Mapping (CAM)
在之前的文章[4]中就有發現,CNN本身就具備定位物件的能力。例如:在圖片分類任務中,隨意遮罩圖片的部分區域,以評估模型的表現。
利用這樣的方式,可以檢驗模型判斷圖片分類的依據,也可以用來自我教育,改善模型的表現。這其實是一種弱監督式學習,有點類似不精確(inexact supervision)。不管怎樣,這個實驗證明CNN有定位物件的能力。
在分類任務的深度學習網路中,通常最後一層是全連接層,並經過一個函數(通常是softmax),透過給予不同分類的分數,來判斷應該屬於哪個分類。先不看最後的全連接層,而只看到它前面的最底層卷積網路。從這個卷積網路運算出來之後,在每一個位置上應該會有好幾個特徵圖對應,這取決於設計神經網路時在這一層預計輸出多少張特徵圖;在最底層的卷積網路,通常會設計成和分類的數目一樣多。
在這裡要講一個概念:global average pooling(GAP)。這是一種運算方法,說穿了不是太複雜的概念,就是把剛剛提到的複數張特徵圖,各自取平均:例如第一張特徵圖對應第一個分類,就把這張特徵圖裡面的每個數值加總,並除以單元數,取代原本全連接層的運算,直接進到softmax。但進softmax前會再設定一個權重,並將特徵圖的向量與其相乘。
假設k為最後一層卷積網路產生出來特徵圖上位置(x,y)的結果,
這是包含經過啟動函數運算的結果。則GAP的運算,針對一張特徵圖,
若此特徵圖對應分類c,則在進入softmax前和權重的運算(相乘)為
要注意的是,每一張特徵圖都會經過GAP,轉換成一個向量。在針對特定的分類時,其他特徵圖也會有一個針對此分類的權重,也要和它相乘。最後把這些相乘的結果相加,才進入softmax。因此,w可視為對於特定的分類c,F的重要程度。
如果把權重和每個單元k直接相乘,而跳過GAP的步驟:
就可以解釋成對於特定的位置,對於特定的分類c的重要程度。換句話說,就是每個分類在特定位置上的重要性 — 也就是熱區。是的,這個就是class activation map(CAM)。利用這個方法,我們可以畫出神經網路在分類時的依據是什麼:
這個概念是本篇文章的基礎。接下來要介紹的Grad-CAM是這個概念的廣泛應用。在CAM的概念裡,神經網路架構會受到調整,因為原本的全連接層消失。此外,這個方法還是比較適用於較淺層的神經網路架構,在模型透明度和模型的表現上仍然有所取捨。
比較好的視覺呈現方法
根據先前的文章[5],好的視覺呈現方法應該包括:
- 可以輕易鑑別分類
- 高解析度(可呈現細部特徵)
先看看下面這張圖。
這是一張圖片針對不同的分類(貓、狗)所做的activation map。利用相素級別的反向傳播梯度法(如(b)(h)),可以很清楚的看到神經網路擷取的特徵,幾乎把物件在圖片中很清楚的描繪出來。然而,這個方法缺乏分類鑑別度(兩張圖片很相似)。相反的,CAM系列的做法可以很清楚的定位物件的位置,不過稍嫌不精確(顯示一個區域,但不會很好的描繪出輪廓)。
本文試圖將兩者的優點結合在一起,使圖片中感興趣的部分(即模型認為據以分類圖片的部分)的細節描繪出來,如(d)(j)。所以如果假設分類是「虎斑貓」,則Grad-CAM應當把貓及其條紋都描繪出來,以顯示其次分類(虎斑)的依據。
這篇文章想要探討什麼?
- 提出Grad-CAM,是一個提供精確可視化的神經網路,可用於任何卷積網路,並且不需要更改原本的架構,也不需要重新訓練。在本文中將會提供Grad-CAM關於精確定位的資訊,以及其反映卷積網路模型表現的忠實度。(section 3–5)
- 將Grad-CAM運用在電腦視覺任務中表現出色的幾個神經網路,這些任務包含分類(classification),捕捉(captioning)和視覺問答(visual question answering,VQA)。在分類任務中,Grad-CAM將會解釋某些看似不合理的分類有其可合理的解釋;在捕捉和視覺問答任務中,Grad-CAM會證明常用的CNN-LSTM模型,即使不用標註的image-text資料訓練,也能找到物件在圖片中的位置。(section 4–5)
- 利用Grad-CAM的解釋性找出資料集中的偏誤(bias)。(section 6)
- 利用Grad-CAM的神經元分析模型判斷的細部資訊。(section 7)
- 展現Guided Grad-CAM幫助建立人類信心,而且協助較缺乏經驗的使用者在模型的預測相近時,仍可判斷模型表現的優劣。(section 8)
看起來很有野心,不是嗎?看到這邊,其實有一種「幫深度學習研究者出氣,告訴那些完全不相信神經網路,認為就是亂整一通的傳統資料分析專家,我們不是毫無根據」的感覺。實際上這篇文章也算長,所以應該會分好幾個段落,好好的整理一下。在這篇,礙於篇幅,將只整理section 3。
Grad-CAM (section 3)
模型概觀
回顧一下前面CAM的段落。利用進入全連結層之前的最底層卷積層有兩個好處:1. 擷取的是最細部的特徵 2. 仍保留相關的方位資訊(spatial information)。後者尤其在進入全階層之後會被破壞,因此要掌握位置的資訊,就必須跳過全連接層。
Grad-CAM利用梯度流入最後一層的卷積層,來調整對於個位置的神經元的權重,也就是重要性,藉此達到掌握圖片中特定分類物件的位置。理論上,這個技術也可以用在任何一層的卷積網路 — 如果你想知道更高層、更大尺度的特徵擷取狀況 — 但本文將以最底層卷積層為目標。
下圖是Grad-CAM和各種任務模型的嫁接示意:
圖中不考慮個別任務模型中的細微變化(例如ResNet的residual block),而把上層的基礎架構統一視為卷積網路層(CNN)。由最後一層卷積層得到的特徵圖就是A,rectified conv feature maps。接著,視任務的不同,最後一層會有些不同;例如分類任務就是全連接層,捕捉任務要描述圖片裡的物件,牽涉到自然語言,要搭配LSTM等等。最右邊的三個大長方形就是模型最底層的結構。
黑色的箭頭表示正向傳播的路線。圖片作為輸入端進入複數卷積網路層,並產生特徵圖。接著視任務需求進入對應的神經網路架構。輸出和標註進行對照,如果有誤差,會由損失函數計算,並將誤差轉為梯度。到此為止都和一般的神經網路訓練一樣。
接著是藍色箭頭的反向傳播。梯度將沿著神經網路架構逐層傳回,先從最底層的架構回傳。這裡和一般有些不同,跳過了全連接層/LSTM,而直接回到特徵圖。在特徵圖,計算權重,或者說重要性,是利用回傳的梯度,和特徵圖裡的向量(經過啟動函數運算)計算而成,這個部分稍後再解釋。接著通過CAM的方式,產生熱圖。另一方面,梯度經過guided-propagation得到圖片中比較細節的資訊。最後,把兩者結合起來,顯示出熱圖區域的細節資訊,就是模型分類判斷的依據。
這就是Grad-CAM的整個流程,可以看到是架在原本的模型外面,也不干涉原本的模型訓練。
我們來看一下在特徵圖計算權重的部分。
和CAM的比較
在上面CAM的段落裡,提到GAP之後要進入softmax前的運算為
這個權重可視為對該分類而言,特徵圖內的向量重要性。如何知道確切權重是多少?還是要從梯度來看。在初始時,只有目標分類設為1,其他分類都是0。從標註得到模型預測和實際分數的落差,和特徵圖的向量做偏微分:
但
故可視為
則
但由式1可知
因此
兩邊把特徵圖內的每個向量加總:
權重在單一特徵圖是固定的,不受向量所在位置而改變。向量的總數為Z,Z為常數,亦不受加總影響。
除去Z,得到
就是權重了。到這裡,Grad-CAM的計算和CAM應該是一樣的,我覺得不一樣的地方在接下來的步驟。權重和特徵圖向量相乘後加總,然後要經過一個ReLu函數。
α就是權重w,A就是上面的f。經過ReLu的目的是把小於等於0的值全部過濾掉。還記得前面說的嗎?初始時,只有目標分類設為1,其他為0。此時出現的負值,有可能是其他分類的項目,如果也納進來,會干擾表現。只有正值的位置才是目標分類 — 我們感興趣的區域(region of interest)。
另外一點就是,這裡產生的特徵圖,其大小和最後一層卷積網路輸出的一樣大,但通常是小於原始圖案的(因為前面經過複數個卷積層)。作者也試過把Grad-CAM放在較上層的卷積網路,結果發現表現較差,他們的推測是可能上層萃取的特徵屬於較大的尺度,無法掌握到較細部的地方。
Guided Grad-CAM
有一些先前的研究,實現藉由梯度追蹤[6],或者反卷積[7]的方式來掌握物件位於圖片中的細節。除此之外,也可以將特徵圖的尺寸還原到與原本圖片一樣。為了把Grad-CAM的熱圖做的更細緻,讓使用者可以看到模型判斷物件的細節,而不是只有大略位置,作者把兩者結合在一起。
由於兩者尺寸不同,因此要先把Grad-CAM的圖upsampling(利用雙向內插bilinear interpolation)還原至一致的尺寸。然後再把兩者做點對點的乘積,取其交集。
關於反卷積和upsampling的概念,之後應該會在FCN系列開一篇。
Counterfactual Explanations
這個算是反向實驗,把原本應該是對於分辨該物件有意義的地方移除,可以看到其他可能會影響模型分類判斷的區域,通常就是其他物件。把剛剛Grad-CAM裡的梯度改成負的就可以了。
展現出來的熱圖如下:
可以看到對於貓分類而言,影響模型分類判斷的區域位於狗上面;反之亦然。這可以從側面增加使用者對於模型判斷的信心。
以上是Grad-CAM架構相關的簡單介紹。下一篇要整理的是Grad-CAM定位的能力,以及和幾個模型合作的時候,其表現,是否能忠實反映模型判斷的依據。
參考資料
[1] International Journal of Computer Vision, https://doi.org/10.1007/s11263-019-01228-7
[2] Jackson, P. (1998). Introduction to expert systems (3rd ed.). Boston,MA: Addison-Wesley Longman Publishing Co., Inc,
[3] He, K., Zhang, X., Ren, S., & Sun, J. (2016). Deep residual learning for
image recognition. In CVPR.
[4] A. Bergamo, L. Bazzani, D. Anguelov, and L. Torresani. Self-taught object localization with deep networks. arXiv preprint arXiv:1409.3964, 2014.
[5] Deng, J., Dong, W., Socher, R., Li, L.-J., Li, K., & Fei-Fei, L. (2009).
ImageNet: A large-scale hierarchical image database. In CVPR.
[6] Springenberg, J. T., Dosovitskiy, A., Brox, T., & Riedmiller, M. A. (2014). Striving for simplicity: The all convolutional net. CoRR. arXiv:1412.6806
[7] Zeiler, M. D., & Fergus, R. (2014). Visualizing and understanding con- volutional networks. In ECCV.