深度學習一直被認為是一個黑盒子,但是試圖對模型的理解仍然是非常必要的。先從一個例子來說明解釋神經網絡的重要性:古代一個小鎮上的一匹馬能夠做數學題,比如給它一個題目 2+3
,它踏馬蹄 5 下后就會停下,這匹馬被當地稱作神馬漢斯。后來人們發現,漢斯其實並不會做數學題,它通過觀察主人的反應來判斷什么時候停下。因此當一個訓練好的網絡模型根據輸入來輸出他的答案時,有時候雖然也能得到正確的結果,但是我們更多時候還需要知道網絡輸出這個結果的原因,這樣能夠幫助我們來判斷模型得到的這個結果是否可靠。進一步地,我們可以憑借解釋的結果來進一步優化我們的模型,而不僅僅是從結果層面來進行約束。
在之前的一篇研究中,網絡能夠准確地將一幅大熊貓地圖片識別為大熊貓,但是當這張圖片混有一定的噪聲時,網絡識別的結果是長臂猿。由此可見,網絡有時候只能根據數據集和損失函數來優化它的擬合過程,但是網絡具體做出決定依靠的是圖像的哪些特征則很難進行判斷。就像考試的目的是為了讓學生更好地掌握書本知識,然后取得高分,往往我們會通過題海戰術來更方便快捷地總結出題規律,能達到更好的效果,這顯然與素質教育的本質背道而馳。
筆者曾在2021年CVPR上發表過一篇關於圖像去噪的文章,里面提到了“提高神經網絡的可解釋性”,最近在面試中經常被問到相關的問題,但是我回答的總是不能令面試官滿意,直到真正了解到針對神經網絡可解釋性的文章,我才明白其中的區別:
- 我們文章的可解釋性是針對在網絡設計時網絡結構,模塊等都是經驗性地選取,因此我們根據傳統的算法進行理論推導,然后使用神經網絡的擬合能力對理論進行建模,完成整個網絡的設計過程;
- 而本篇文章提到的可解釋性是對網絡輸出結果的原因進行討論,試圖解釋網絡輸出結果的原因,來幫助我們判斷模型得到的結果是否可靠。
Local Explanation主要解釋做出決定的原因,比如一張圖片模型輸出是貓,那么local explanation的目的就是解釋為什么它覺得這張圖片是貓?很容易想到關於Attention機制的一些研究,通過 Attention 機制能夠給特征賦予不同的空間和通道權重,從而使網絡更加重視重要信息。通常在解釋Attention的效果時,會采用 Salience Map 來表示。如下圖所示:
想象一下:如果我對圖片的某個區域做干擾,那么如果干擾后影響了網絡的判斷結果,證明該干擾區域在網絡做出判斷時是重要的,反之則不重要。數學描述為:對於輸入 \(X = [x_{1},x_{2},...x_{n}]\),其中 \(x_{i}\) 代表了每個輸入,對於圖片而言就是每個像素點。如果判斷 \(x_{i}\) 對輸出 \(y\) 的影響,那么可以給 \(x_{i}\) 增加一個擾動 \(\Delta x_{i}\),相應地輸出結果的變化量為 \(\Delta y\),於是 \(x_{i}\) 的重要程度就可以描述為:
計算 Salience Map 的PyTorch代碼如下:
def compute_saliency_maps(X, y, model):
"""
X表示圖片, y表示分類結果, model表示使用的與訓練好的分類模型
輸出為salience map: A Tensor of shape (N, H, W)
"""
# 確保model是test模式
model.eval()
# 確保X是需要gradient
X.requires_grad_()
saliency = None
logits = model.forward(X)
logits.backward(torch.FloatTensor([1.])) # 計算梯度
saliency = abs(X.grad.data) # 返回X的梯度絕對值大小
saliency, _ = torch.max(saliency, dim=1)
return saliency.squeeze()
輸出結果如下:
除了 Salience Map 外,類激活的熱力圖也可以顯示原始圖片的不同區域對某個CNN輸出結果的 “貢獻” 程度,如下圖所示:
其實對於神經網絡而言,它所看到的只是一堆數據而已,通過損失函數可以使模型將這一堆數據映射為我們想要的值,其實人是無法真正理解機器想的是什么的,這些只是想找一些合理的方法來將機器想的內容合理化為人們所期望的那個樣子而已。所以對一些新入門的朋友而言,不必過分糾結於神經網絡到底是怎么實現特定的功能的,就像一位大佬說過:The question of whether machines could think was “about as relevant as the question of whether Submarines Can Swim. 個人理解就是:思考和游泳都是人類具有的屬性,目的能夠幫助我們解決事情或者能夠在水里生存,但是反過來不一定成立,解決事情或者在水里生存不一定非要是我們人類具有的屬性,機器也能擁有這些,但是他們在以什么樣的方式進行工作,我們不得而知,討論這個問題也就沒什么意義,我們只需要關心結果是否是我們所需要的就行了。