對Visualizing and Understanding Convolutional Networks的一些理解

本文通過引入CNN網絡的可視化技術分析AlexNet網絡結構,主要告訴我們CNN的每一層到底學習到了什麼特徵,讓我們在調參、改進網絡結構的時候提供一定的參考。

CNN網絡性能的顯著提高,得益於三個因素:(1)大量的帶標註的訓練數據。(2)GPU算力,使得訓練大的模型可以實現。(3)更好的正則化方法來防止複雜模型的過擬合,使模型具有更好的泛化能力,比如Dropout。

一、利用反捲積實現特徵可視化

以AlexNet爲例,爲了解釋CNN的每一層都學習到了什麼特徵,論文通過反捲積的方法,進行可視化。(反捲積網絡可以看成是卷積網絡的逆過程。反捲積網絡在文獻《Adaptive deconvolutional networks for mid and high level feature learning》中被提出,是用於無監督學習的。)

反捲積可視化以各層得到的特徵圖作爲輸入,進行反捲積,得到反捲積結果,用以驗證顯示各層提取到的特徵圖。Eg:假如你想要查看Alexnet的conv5提取到了什麼東西,我們就用conv5的特徵圖後面接一個反捲積網絡,然後通過:反池化、反激活、反捲積,這樣的一個過程,把本來一張13*13大小的特徵圖(conv5大小爲13 * 13),放大回去,最後得到一張與原始輸入圖片一樣大小的圖片(227 * 227)。

在這裏插入圖片描述

網絡的整個過程,從右邊開始:輸入圖片->卷積->Relu->最大池化->得到結果特徵圖->反池化->Relu->反捲積。

二、CNN學到了什麼?

在這裏插入圖片描述
網絡特徵的層級特性:從layer 1、layer 2學習到的特徵基本上是顏色、邊緣、輪廓等低層特徵;layer 3則具有更多的不變性,捕獲了一些紋理特徵,比如一些網格紋理;layer 4學習到的則是比較有區別性的特徵,顯示了類別的重要差異;layer 5則開始關注目標整體。這形成了對於神經網絡的認識,底層網絡專注於識別低級特徵,更高層網絡通過對下層低級特徵的組合抽象形成更高級的特徵。也就是說層數越高,所提取的特徵越抽象

特徵學習的過程:在網絡訓練過程中,每一層學習到的特徵是怎麼變化的,經過一定次數的迭代之後,底層特徵趨於穩定,但更高層特徵要更多次迭代才能收斂。

三、對AlexNet的改進

通過可視化Alex-net網絡的第1,2層,發現了兩個問題:

問題1:第一層filter是非常高頻和低頻的信息,中間頻率的filter很少覆蓋

問題2:第二層的可視化出現混疊現象,由於第一層步長比較大,產生大的間隔。

爲了解決這個問題:

  • 減小第一層的filter的尺寸從11 * 11到7 * 7
  • 縮小間隔,從4變爲2。

這兩個改動形成的新結構,獲取了更多的信息,而且提升了分類準確率。

四、通過遮擋信息得出的一點結論

對於圖像分類方法,一個自然的問題是,模型是真正地識別了圖像中物體的位置,還是僅僅使用了周圍的環境。研究圖片內部哪個區域產生的作用最大,所以進行了遮擋實驗。本文通過一個灰色方塊,遮蓋物體的不同位置,然後監控分類器的輸出。最後結果證明模型識別了圖像中物體的位置。

五、實驗得出的一些結論

  1. 較小的stride(2 vs 4)和過濾器大小(7x7 vs 11x11)會產生更明顯的特徵和更少的死特徵。
  2. 作者進行了網絡結構尺寸調整實驗。去除掉包含大部分網絡參數最後兩個全連接層之後,網絡性能下降很少;去掉中間兩層卷積層之後,網絡性能下降也很少;但是當把上述的全連接層和卷積層都去掉之後,網絡性能急劇下降,由此作者得出結論:模型深度對於模型性能很重要,存在一個最小深度,當小於此深度時,模型性能大幅下降。
  3. 改變全連接層的大小對結果影響不大。
  4. 增加中間卷積層的大小可以有效地提高性能。但是,在擴大全連通層的同時,增加這些值會導致過擬合。

六、特徵的泛化能力

作者固定了原來網絡的權值,只是使用新數據訓練了softmax分類器,效果非常好。這就形成了目前的人們對於卷積神經網絡的共識:卷積網絡相當於一個特徵提取器。特徵提取器是通用的,因爲ImageNet數據量,類別多,所以由ImageNet訓練出來的特徵提取器更具有普遍性。也正是因爲此,目前的卷積神經網絡的Backbone Network基本上都是Imagenet上訓練出來的網絡。

七、一些想法

  1. 在構建CNN模型時,模型深度十分重要,但是當模型很複雜時,會導致過擬合,所以不宜太深。
  2. CNN的卷積核大小和步長不應該過大,過大可能會造成提取到的特徵混疊的現象。
  3. 使用預訓練模型時,底層的特徵更具有通用性,而上層的特徵與任務和具體訓練數據集更相關,所以我們使用預訓練模型時,應該避免使用高層信息。
  4. 使用預訓練模型時進行fine-turning很重要,因爲上層的特徵通過訓練變化較大,所以需要根據具體任務進行fine-turning以適應自己的任務,而低層的特徵更具通用性,訓練的時候,會很快收斂。

參考資料

1.論文閱讀筆記:Visualizing and Understanding Convolutional Networks
2.Visualizing and Understanding Convolutional Networks

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章