視覺化神經網路的一些方法
原文為http://cs231n.github.io/understanding-cnn/
視覺化CNN學到的東西
有一些方法可以用來理解和視覺化CNN, 作為對深度學習不可解釋的論述的反擊。
1. 視覺化啟用值和第一層卷積的權重
最直接的視覺化方法就是展示在前向傳播(forward pass)網路中的啟用值(activation)
對於帶relu的網路,啟用值的map在開始的層會密集,之後逐漸稀疏。
一個陷阱是你可以注意到一些map,他們對於不同輸入,永遠響應是全零圖。(換句話說,他們對於網路沒有貢獻)
他們成為了dead filter,這可能是由於高的learning rate導致的。
第二個方法是視覺化網路中的權重。 通常第一個conv的filter是最容易解釋的,但也是可以視覺化其他filter。
在well-trained的網路中filter往往記憶了一些好看和平滑的filter,如果出現了noise 的視覺化結果可能你網路沒有train足夠,
或者正則項太小了(weight decay),導致過擬合了。
2.找圖片中 啟用值最大的區域
另一個視覺化技巧是 拿一堆圖片把它們前饋到網路中,找到圖片中哪一部分啟用值最大。
然後我們可以畫出圖片。看看對應的receptive field。
(接受域:這個值之前從那些區域的值計算得到的。比方你一次3*3卷積得到一個value,這個value的接受域是3*3
如果3*3中每個值,是由再之前原圖3*3得到的,我們不考慮overlap的話,這個value在原圖的接受域就是9*9)
3. 用tSNE來embedding
convent是把圖片慢慢變成一個表達(這個表達最後可以用線性分類器分類)的過程。
我們可以把影象embedding到2維表達,然後用二維畫到圖上表達相似的關係。
在這些embedding 到2維方法中,比較有名的方法是tSNE產生視覺上pleasing的結果。
首先,產生一個embedding,我們需要用一些圖片通過CNN(比如Alexnet,最後fc 4096維的結果)
我們把他扔到tSNE中每張圖得到對應的一個2維向量。然後我們可以把這個2維向量看成座標,扔到grid裡。
4. 遮擋圖片的一部份
假設Convnet識別出了一條狗。那麼會不會是狗的背景,讓cnn識別出狗,而不是狗本身呢?
一種方法是 遮擋圖片的一部分 然後看狗那一類的啟用值。
按照我們所想,如果遮住狗的話,那判斷為狗的啟用值應該顯著下降。