“直觀理解”卷積神經網路(二):導向反向傳播(Guided-Backpropagation)

本文整理/翻譯自論文Striving for Simplicity: The All Convolutional Net,假如文中觀點有誤,歡迎討論/指正!

1。

簡介

2。

全卷積網路

3。

導向反向傳播

1。 簡介

上一篇“直觀理解”卷積神經網路(一):反捲積(Deconvnet)提到:一個典型的卷積神經網路主要由卷積操作、非線性(ReLU)、池化操作等構成。很快,Jost Tobias Springenberg 等人開始質疑池化操作的必要性,並提出了不包含池化操作的“全卷積網路”和對應的新視覺化方法“導向反向傳播”。

2。 全卷積網路

想要質疑並去除池化操作,就需要先明白池化操作的作用。一般認為:池化操作透過成倍的縮小feature maps的尺寸(高、寬),使得一個特徵可覆蓋的原圖的範圍(感受野Receptive Field)成倍的增大,這樣高層的特徵可以更快地表徵圖片的宏觀資訊。而將卷積操作的步幅(stride)設定為大於1的值,理論上可以獲得與池化操作相同的效果;論文作者也透過CIFAR-10、CIFAR-100、ImageNet資料集上的不弱的分類效能 進一步說明了實際的可行性(感興趣的朋友可以在原論文檢視具體的網路結構和對比實驗)。下圖中,卷積操作步幅為2。(圖片來源:附錄2)

“直觀理解”卷積神經網路(二):導向反向傳播(Guided-Backpropagation)

3。 導向反向傳播

上一節提到的全卷積網路確實在公開資料集上取得了不俗的分類效能,但使用步幅為2的卷積替換掉池化 究竟對網路帶來了怎樣的影響呢?用我們上一篇文章提到的“反捲積”將 特徵視覺化看看吧,並沒有達到預期效果,具體表現為:低層特徵的視覺化結果可以反應出特徵學習到的內容,但高層特徵的視覺化結果不是清晰的、可辨認的結構(見下圖最左側)。還記得反捲積網路中反池化操作時利用的池化索引嗎,這些索引記錄了最大池化時最大值所在的位置。由於不同圖片的池化索引各不相同,這樣,即使是相同位置的特徵透過反捲積網路後,視覺化結果也完全不同(池化索引相當於給了不同圖片獨特的身份標識)。去掉池化層之後,圖片的身份標識沒有了,自然無法生成與原圖對應的視覺化結構。

從原理上應該這樣理解:低層特徵的計算複雜度很小,對應原圖的區域很小,僅僅學到了極小的不變性,因此最大啟用低層特徵的是單一的、固定的模式;而高層特徵的計算複雜度很大,對應原圖的區域很大,學到了極大地不變性表示,因此不存在單一圖片中的單一模式最大化啟用高層特徵。合理的特徵視覺化應該針對一張輸入圖片進行,對丟失了圖片身份標識的全卷積網路,使用反捲積網路進行視覺化,顯然無法取得很好的效果。

“直觀理解”卷積神經網路(二):導向反向傳播(Guided-Backpropagation)

還有什麼辦法可以衡量 圖片的哪些部分最大化激活了一個特徵嗎?有的,那就是透過反向傳播,計算該特徵值相對於該輸入圖片的梯度。反向傳播和反捲積最大的不同,就是數值透過透過ReLU時計算方式的不同。而導向反向傳播視覺化方法,上述兩者的結合,細節見下圖:b中的四行分別表示,經過ReLU時,前向傳播、反向傳播、反捲積、導向反向傳播的不同之處:定義左側為前向傳播的輸入列,右側為前向傳播的輸出列,前向傳播只向後傳輸入列大於0的值、反向傳播只向前傳梯度大於0(輸入列大於零)的值、反捲積只向前傳輸出列大於0的值、導向反向傳播綜合前兩者,只向前傳輸入列和輸出列都大於0的值;c中的公式表達更為清晰。

導向反向傳播(Guided-Backpropagation)相當於對普通的反向傳播加了指導,限制了小於0的梯度的回傳,而梯度小於0的部分對應了原圖中 削弱了我們想要視覺化的特徵 的部分,這些部分正是我們不想要的。還記得我們的目標嗎,找出最大化啟用某個特徵的圖片部分。有趣的是,導向反向傳播在全卷積網路中也表現非常好,上圖是模型高層特徵(layer6/layer9)的反捲積(deconv)、導向反向傳播(Guided-Backpropagation)視覺化結果對比。

半小時學會Pytorch Hook一文中透過pytorch模型中各層的hook函式,改變反向傳播時對梯度的操作,用少量程式碼實現了導向反向傳播。

“直觀理解”卷積神經網路(二):導向反向傳播(Guided-Backpropagation)

附錄:

1。Striving for Simplicity: The All Convolutional Net

2。A guide to convolution arithmetic for deep learning