這是一篇14年的老文章:Visualizing and Understanding Convolutional Networks,文中針對的模型爲12年的 AlexNet,從可視化的角度對卷積神經網絡的理解提出了一個新的視角。網絡
做者可視化卷積網絡的手段爲添加新的反捲積模塊,以下圖所示:框架
將感興趣層的卷積網絡輸出的特徵中選取一個激活單元(通常取最大的),特徵中其餘單元所有置零,送入一個等效的反捲積網絡,還原輸出大小。函數
網上找到的示意圖,出處見水印,展現了反最大池化的流程。post
relu 函數的反向仍爲 relu 函數,各個框架反向傳播的實現也確實是這麼寫的。學習
反捲積實現邏輯如上圖(出處見水印),不過本文種描述的方法是將對應層的卷積核轉置便可,和印象中的處理不太一致,不過這不是本文重點,咱們只要知道這裏能夠還原卷積便可,權且略過,轉置卷積邏輯見:『TensotFlow』轉置卷積。spa
做者首先對比了不一樣 layer 提取到的特徵:設計
做者給咱們顯示了在網絡訓練過程當中每一層學習到的特徵是怎麼變化的,上面每一整張圖片是網絡的某一層特徵圖,而後每一行有8個小圖片,分別表示網絡epochs次數爲:一、二、五、十、20、30、40、64的特徵圖 :htm
(1) 從層與層之間作比較,咱們能夠看到,低層在訓練的過程當中基本沒啥變化,比較容易收斂,高層的特徵學習則變化很大,收斂須要較多輪數blog
(2) 從高層網絡conv5的變化過程,咱們能夠看到,剛開始幾回的迭代,基本變化不是很大,可是到了40~50的迭代的時候,變化很大,說明高層會在高輪數後快速收斂(訓練時不要心急233)
而後討論了不一樣層 layer 提取特徵的不變性:
上圖解釋:
第一列表示原圖的各類變換(a爲平移,b爲放縮,c爲旋轉)
第二列表示layer1層特徵在原圖變換先後的像素歐式距離,橫座標爲平移像素距離/放縮倍數/旋轉角度
第三列表示layer5層特徵的變換先後像素間歐式距離
第四列表示真實類別的得分變化狀況
做者但願說明底層特徵對原圖的變換很敏感 高層特徵對原圖的某些變換並不敏感,平移變換和放縮變換時高層特徵歐式距離變化近似線性 卷積神經網絡對平移和放縮不變性較好,可是除了特定圖片(自己形狀特殊)外,旋轉對網絡影響很大。
再以後做者探討了圖像特定位置對分類的貢獻:
上圖解釋:
第一列表示原圖及遮擋示意圖
第二列表示遮擋中心所在不一樣位置時layer5最大激活值變化
第三列簡單的可視化layer5的最大激活值
第四列表示遮擋中心所在不一樣位置時真實類別得分的變化
第五列表示遮擋中心所在不一樣位置時最高得分類別的變換
這裏面咱們須要注意,layer5 並非最高層,也就是 layer5 和 classifier 之間還有其餘的高層語義信息存儲層。
對於第一行:
c圖可見layer5特徵主要針對狗頭
b圖可見遮擋住狗頭,那麼layer5的激活單元最大值會明顯下降
d圖可見遮擋住狗頭,分類爲狗的得分會明顯下降
e圖可見遮擋其餘位置最高得分都是分類爲狗,可是遮擋住狗頭後最高得分爲網球
對於第二行:
c圖可見layer5特徵主要針對車身標語
b圖可見遮擋住車身標語,那麼layer5的激活單元最大值會明顯下降
d圖可見遮擋住車輪,分類爲車輪的得分會明顯下降
e圖可見分類爲車輪這一決定是很脆弱的,隨隨便便就會分給其餘類別
對於第三行:
c圖可見layer5特徵主要針對人臉
b圖可見遮擋住人臉,那麼layer5的激活單元最大值會明顯下降
d圖可見遮擋住狗,分類爲狗的得分會明顯下降
e圖可見雖然layer5特徵針對人臉,可是分類器很好的學到了狗的特徵,只要不遮擋住狗,分類器能夠很好的識別出狗的類別(由標籤可見這是一個單獨識別狗種類的數據集,因此人臉特徵沒什麼干擾)
進一步的驗證 layer5 和 最終 layer7 的特徵信息實驗以下:
狗種類隨機遮擋分類實驗,layer5 在遮擋眼睛或鼻子後激活值相比隨機遮擋降低明顯,layer7則沒什麼變化,由此推測:layer5較爲具體的檢測狗頭,layer7更側重抽象的狗類別信息。
因爲是篇老文,我感受本文的不少部分(包括指導設計更高效網絡的部分)對當下已經沒什麼參考意義了(誰知道1五、16年分類網絡精度上天了),因此僅將我以爲對當下比較有學習價值的部分展現出來,從側面一窺黑箱裏的祕密。