深度學習&圖像處理(深度學習相關文獻學習6)

《Rethinking the Inception Architecture for Computer Vision》

1.給出了一些已經被證明有效的用於放大網絡的通用準則和優化方法

  • 避免表達瓶頸,特別是在網絡靠前的地方。 信息流前向傳播過程中顯然不能經過高度壓縮的層,即表達瓶頸。從input到output,feature map的寬和高基本都會逐漸變小,但是不能一下子就變得很小。另外輸出的維度channel,一般來說會逐漸增多(每層的num_output),否則網絡會很難訓練。
  • 高維特徵更易處理。 高維特徵更易區分,會加快訓練。
  • 可以在低維嵌入上進行空間匯聚而無需擔心丟失很多信息。比如在進行3x3卷積之前,可以對輸入先進行降維而不會產生嚴重的後果。假設信息可以被簡單壓縮,那麼訓練就會加快。
  • 並行增加寬度和深度達到恆定計算量的最佳改進

2.使用大過濾器尺寸分解卷積(降維

GoogLeNet網絡的大部分初始收益來源於大量地使用降維。這可以被視爲以計算有效的方式分解卷積的特例。此外,我們可以使用計算和內存節省來增加我們網絡的濾波器組的大小,同時保持我們在單個計算機上訓練每個模型副本的能力。

可以用2個連續的3x3卷積層(stride=1)組成的小網絡來代替單個的5x5卷積層。值得注意的是:這種替代不會造成表達能力的下降;通過對比試驗,表明3x3卷積之後添加非線性激活會提高性能。於是,任意nxn的卷積都可以通過1xn卷積後接nx1卷積來替代。實際上,作者發現在網絡的前期使用這種分解效果並不好,還有在中度大小的feature map上使用效果纔會更好。

3.輔助分類器的效用

GoogLeNet引入了輔助分類器,其目的是想把有效梯度傳遞回去,從而加快訓練。作者發現輔助分類器在訓練早期並未導致改善收斂:在兩個模型達到高精度之前,有或沒有側頭的網絡的訓練進展看起來幾乎相同。接近訓練結束時,帶有輔助分支的網絡開始超越網絡的準確性,沒有任何輔助分支,並達到略高的平臺。相反認爲輔助分類器充當正則化器。因爲當輔助分類器使用了batch-normalized或dropout時,主分類器效果會更好。

4.使用一些池化操作來減小特徵映射的網格大小

pooling層用來減小特徵映射的網格大小。爲了避免出現表達瓶頸,在使用pooling前常常增加feature map個數。例如k個dxd的feature map,pooling後爲k個d/2*d/2。如果想要得到pooling後有2k個feature map,那麼在pooling前面的卷積層卷積核就應該有2k個。後者卷積計算量是前者的四分之一。這樣在representation上會有瓶頸。可以使用另一種方法,降低更多計算量:使用2個模塊P和C.P表示pooling,C表示卷積;它們步長都爲2。

5.Inception-V2

(見後面inception V2詳解)把7x7卷積替換爲3個3x3卷積。包含3個Inception部分。第一部分是35x35x288,使用了2個3x3卷積代替了傳統的5x5;第二部分減小了feature map,增多了filters,爲17x17x768,使用了nx1->1xn結構;第三部分增多了filter,使用了卷積池化並行結構。網絡有42層,但是計算量只有GoogLeNet的2.5倍。

6.通過標籤平滑進行模型正則化

ImageNet實驗中,K=1000個類,使用u(K)=1/1000和ε=0.1。

7.利用TensorFlow分佈式機器學習系統對我們的網絡進行了隨機梯度訓練

batch-size=32,epoch=100。SGD+momentum,momentum=0.9。使用RMSProp,decay=0.9,ε=1.0,效果達到最好。lr=0.045,每2個epoch,衰減0.94。梯度最大閾值=2.0.

8.如何正確處理較低分辨率輸入的問題

對於低分辨有圖像,使用“高分辨率”receptive field。實踐中:1、減小前2個卷積層的stride,2、去掉第一個pooling層。

9.Inception-v3 Inception-V2 識別性能的實驗結果

目的:在擴大網絡的同時又儘可能地發揮計算性能

10.2014至2016年,GoogLeNet團隊發表了多篇關於GoogLeNet的經典論文《Going deeper with convolutions》、《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》、《Rethinking the Inception Architecture for Computer Vision》、《Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning》,在這些論文中對Inception v1、Inception v2、Inception v3、Inception v4 等思想和技術原理進行了詳細的介紹,建議閱讀這些論文以全面瞭解GoogLeNet。

《Going deeper with convolutions》:V1

作者在論文中提出了一種新的名爲Inception的深度神經網絡結構,並在ILSVRC 2014的classification和detection項目中取得了當時最好的結果。Inception結構主要是改進了網絡內部中的計算資源的利用率,作者在固定計算資源的情況下對網絡的深度和寬度都進行了增加。另外,Inception結構還遵循了Hebbian原則並增加了多尺度的處理。作者在比賽中使用的是基於這種結構的22層的深度神經網絡GooLeNet並取得了非常好的結果。

文章分爲兩個部分:Inception結構和整體的GoogLeNet網絡結構。

(1)每一個卷積層後面都跟着一個ReLUs層,圖上省略掉了;

(2)在Inception(4a)和Inception(4d)的後面都跟着一個額外的Softmax層,用以減小“梯度消失”現象。這兩個softmax的loss值最終以一個0.3的權重連接到最後的softmax的loss值上,也有多模型融合的意思在裏面,具體的鏈接爲:Average Pooling+1*1卷積+ReLU+FC+ReLU+

Dropout+FC+SoftmaxWithLoss,Dropout的係數爲0.7,FC層據說是爲了方便微調用的;

(3)在Inception(4a)和Inception(4d)後都接着一個Average Pooling層;

(4)最頂端的FC層有1024個單元;

整個網絡包含22層(不算池化層),是由Inception模塊堆疊而成,其中的ReLU和Dropout圖中省略了。除了最頂端的softmax層以外還有兩個額外的softmax層,網絡中穿插着Max Pooling和Average Pooling,細節網絡可參考caffe裏的GoogLeNet。

《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》V2

當網絡變得更深時,網絡參數的微小變化也會被逐漸放大,這使得訓練變得越來越複雜,收斂越來越慢。這是一個深度學習領域的接近本質的問題,已經有很多論文提出瞭解決方法,比如:RELU RELURELU激活函數,ResidualNetwork Residual NetworkResidualNetwork殘差網絡等等。BN BNBN本質上也是其中一種目前被大量使用的解決方法。BN是一個深度神經網絡的訓練技巧,它不僅可以加快了模型的收斂速度,而且更重要的是在一定程度緩解了深層網絡中“梯度彌散”的問題,從而使得深層網絡模型的訓練更加容易和穩定。

BN的作用就是在深度神經網絡訓練過程中使得每一層神經網絡的輸入均保持相同分佈。BN是一個非常有效的正則化方法,可以讓大型卷積網絡的訓練速度加快很多倍,同時收斂後的分類準確率可以的到大幅度提高。

BN在用於神經網絡某層時,會對每一個mini-batch數據的內部進行標準化處理,使輸出規範化到(0,1)的正態分佈,減少了Internal Covariate Shift(內部神經元分佈的改變)。BN論文指出,傳統的深度神經網絡在訓練時,每一層的輸入的分佈都在變化,導致訓練變得困難,我們只能使用一個很小的學習速率解決這個問題。而對每一層使用BN之後,我們可以有效的解決這個問題,學習速率可以增大很多倍,達到之間的準確率需要的迭代次數有需要1/14,訓練時間大大縮短,並且在達到之間準確率後,可以繼續訓練。以爲BN某種意義上還起到了正則化的作用,所有可以減少或取消Dropout,簡化網絡結構。

當然,在使用BN時,需要一些調整:

增大學習率並加快學習衰減速度以適應BN規範化後的數據;去除Dropout並減輕L2正則(BN已起到正則化的作用);去除LRN;更徹底地對訓練樣本進行shuffle;減少數據增強過程中對數據的光學畸變(BN訓練更快,每個樣本被訓練的次數更少,因此真實的樣本對訓練更有幫助)

《Rethinking the Inception Architecture for Computer Vision》V3

同譯文

《Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning》V4

1.在Inception-resnet層末尾都會有Conv1用來提升維度,這是很必要的,因爲我們爲了減少Inception的計算量會使用1x1卷積核降維。

2.batch-normalization只在傳統的卷積層頂部使用,而不在Inception-ResNet層頂部使用,雖然在所有的層頂部使用效果肯定會更好,但是這樣就不能把一個模型放在單GPU(NVidia Kepler)上訓練了,會造成顯存不夠。

3.谷歌研究人員發現如果在Inception-ResNet層的卷積核數量超過1000,會造成網絡訓練時死亡(輸出全部爲0),即使使用降低學習率的方法(Resnet提出者提出的),或者添加額外的BN,也無法阻止這一情況發生。

這個問題通過按比例降低殘差的方式解決了,即在卷積輸出部分乘以一個0.1到0.3的縮放因子。

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