1. 程式人生 > >【Network Architecture】Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning(轉) Feature Extractor[Inception v4]

【Network Architecture】Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning(轉) Feature Extractor[Inception v4]

文章來源: https://www.cnblogs.com/shouhuxianjian/p/7786760.html

Feature Extractor[Inception v4]


0. 背景

隨著何凱明等人提出的ResNet v1,google這邊坐不住了,他們基於inception v3的基礎上,引入了殘差結構,提出了inception-resnet-v1和inception-resnet-v2,並修改inception模組提出了inception v4結構。基於inception v4的網路實驗發現在不引入殘差結構的基礎上也能達到和inception-resnet-v2結構相似的結果,從而認為何凱明等人認為的:

“要想得到深度卷積網路必須使用殘差結構”

這一觀點是不完全正確的。
不過值得注意的是,google這邊對於inception v2是屬於哪篇論文有些不同觀點:

  • 在《Rethinking the Inception Architecture for Computer Vision》中認為:基於inception v1進行結構的改進是inception v2;在inception v2上加上BN是inception v3;
  • 在《Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning》中將《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》認為是inception v2(即inception v1 上進行小改動再加上BN);《Rethinking the Inception Architecture for Computer Vision》認為是inception v3

google認為他們之前在改變架構選擇上相對保守:網路結構的改變只侷限於獨立的網路元件範圍內,從而保持剩下模型穩定。而如果不改變之前的這種原則,那麼生成的模型將會比需要的還複雜(即過頭了)。在這裡,他們決定拋棄之前那個設計原則,對不同尺度的網格都採用統一的inception模組

在下面的網路結構圖中:所有後面不帶V的卷積,用的都是same-padded,也就是輸出的網格大小等於輸入網格的大小(如vgg的卷積一樣);帶V的使用的是valid-padded,表示輸出的網格尺寸是會逐步減小的(如lenet5的卷積一樣)。

在下面的結構圖中,每一個inception模組中都有一個

的沒有啟用層的卷積層,用來擴充套件通道數,從而補償因為inception模組導致的維度約間。其中Inception-ResNet-V1的結果與Inception v3相當;Inception-ResNet-V1與Inception v4結果差不多,不過實際過程中Inception v4會明顯慢於Inception-ResNet-v2,這也許是因為層數太多了。且在Inception-ResNet結構中,只在傳統層的上面使用BN層,而不在合併層上使用BN,雖然處處使用BN是有好處,不過更希望能夠將一個完整的元件放入單獨的GPU中。因為具有大量啟用單元的層會佔用過多的視訊記憶體,所以希望這些地方丟棄BN,從而總體增加Inception模組的數量。使得不需要去解決計算資源和模組什麼的權衡問題。

1. inception v4



圖1.1 inception v4 網路結構圖



圖1.2 圖1.1的stem和Inception-A部分結構圖


圖1.3 圖1.1的Reduction-A和Inception-B部分結構圖


圖1.4 圖1.1的Reduction-B和Inception-C部分結構圖

2. Inception-resnet-v1 & Inception-resnet-v2


圖2.1 Inception-resnet-v1 & Inception-resnet-v2的結構圖

2.1 Inception-resnet-v1的組成模組


圖2.1.1 圖2.1的stem和Inception-ResNet-A部分結構圖


圖2.1.2 圖2.1的Reduction-A和Inception-ResNet-B部分結構圖


圖2.1.3 圖2.1的Reduction-B和Inception-ResNet-C部分結構圖

2.2 Inception-resnet-v2的組成模組


圖2.2.1 圖2.1的stem和Inception-ResNet-A部分結構圖


圖2.2.2 圖2.1的Reduction-A和Inception-ResNet-B部分結構圖


圖2.2.3 圖2.1的Reduction-B和Inception-ResNet-C部分結構圖

3. 模型訓練

在上述的Inception V4,Inception-Resnet-V1,Inception-ResNet-v2這三個模型中都用到了Reduction-A,他們各自的具體引數如下:


圖3.1 不同模型下Reduction-A的模型超引數

作者們在訓練的過程中發現,如果通道數超過1000,那麼Inception-resnet等網路都會開始變得不穩定,並且過早的就“死掉了”,即在迭代幾萬次之後,平均池化的前面一層就會生成很多的0值。作者們通過調低學習率,增加BN都沒有任何改善。

不過他們發現如果在將殘差匯入之前,對殘差進行縮小,可以讓模型穩定訓練,值通常選擇[0,1.0.3],如圖3.2


圖3.2 對inception-resnet模組進行最後輸出值的等比例縮小

同樣的在ResNet-v1中,何凱明等人也在cifar-10中發現了模型的不穩定現象:即在特別深的網路基礎上去訓cifar-10,需要先以0.01的學習率去訓練,然後在以0.1的學習率訓練。

不過這裡的作者們認為如果通道數特別多的話,即使以特別低的學習率(0.00001)訓練也無法讓模型收斂,如果之後再用大學習率,那麼就會輕鬆的破壞掉之前的成果。然而簡單的縮小殘差的輸出值有助於學習的穩定,即使進行了簡單的縮小,那麼對最終結果也造成不了多大的損失,反而有助於穩定訓練。

  • 在inception-resnet-v1與inception v3的對比中,inception-resnet-v1雖然訓練速度更快,不過最後結果有那麼一丟丟的差於inception v3;
  • 而在inception-resnet-v2與inception v4的對比中,inception-resnet-v2的訓練速度更塊,而且結果比inception v4也更好一點。所以最後勝出的就是inception-resnet-v2。


圖3.3 不同模型的結果對比

分類: Deep Learning 好文要頂 關注我 收藏該文 仙守
關注 - 5
粉絲 - 62 +加關注 0 0 « 上一篇: Feature Extractor[ResNet]
» 下一篇: Recurrent Neural Network[Content]
posted @ 2017-11-05 15:00 仙守 閱讀( 6440) 評論( 0) 編輯 收藏

0. 背景

隨著何凱明等人提出的ResNet v1,google這邊坐不住了,他們基於inception v3的基礎上,引入了殘差結構,提出了inception-resnet-v1和inception-resnet-v2,並修改inception模組提出了inception v4結構。基於inception v4的網路實驗發現在不引入殘差結構的基礎上也能達到和inception-resnet-v2結構相似的結果,從而認為何凱明等人認為的:

“要想得到深度卷積網路必須使用殘差結構”

這一觀點是不完全正確的。
不過值得注意的是,google這邊對於inception v2是屬於哪篇論文有些不同觀點:

  • 在《Rethinking the Inception Architecture for Computer Vision》中認為:基於inception v1進行結構的改進是inception v2;在inception v2上加上BN是inception v3;
  • 在《Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning》中將《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》認為是inception v2(即inception v1 上進行小改動再加上BN);《Rethinking the Inception Architecture for Computer Vision》認為是inception v3

google認為他們之前在改變架構選擇上相對保守:網路結構的改變只侷限於獨立的網路元件範圍內,從而保持剩下模型穩定。而如果不改變之前的這種原則,那麼生成的模型將會比需要的還複雜(即過頭了)。在這裡,他們決定拋棄之前那個設計原則,對不同尺度的網格都採用統一的inception模組

在下面的網路結構圖中:所有後面不帶V的卷積,用的都是same-padded,也就是輸出的網格大小等於輸入網格的大小(如vgg的卷積一樣);帶V的使用的是valid-padded,表示輸出的網格尺寸是會逐步減小的(如lenet5的卷積一樣)。

在下面的結構圖中,每一個inception模組中都有一個的沒有啟用層的卷積層,用來擴充套件通道數,從而補償因為inception模組導致的維度約間。其中Inception-ResNet-V1的結果與Inception v3相當;Inception-ResNet-V1與Inception v4結果差不多,不過實際過程中Inception v4會明顯慢於Inception-ResNet-v2,這也許是因為層數太多了。且在Inception-ResNet結構中,只在傳統層的上面使用BN層,而不在合併層上使用BN,雖然處處使用BN是有好處,不過更希望能夠將一個完整的元件放入單獨的GPU中。因為具有大量啟用單元的層會佔用過多的視訊記憶體,所以希望這些地方丟棄BN,從而總體增加Inception模組的數量。使得不需要去解決計算資源和模組什麼的權衡問題。

1. inception v4



圖1.1 inception v4 網路結構圖



圖1.2 圖1.1的stem和Inception-A部分結構圖


圖1.3 圖1.1的Reduction-A和Inception-B部分結構圖


圖1.4 圖1.1的Reduction-B和Inception-C部分結構圖

2. Inception-resnet-v1 & Inception-resnet-v2


圖2.1 Inception-resnet-v1 & Inception-resnet-v2的結構圖

2.1 Inception-resnet-v1的組成模組


圖2.1.1 圖2.1的stem和Inception-ResNet-A部分結構圖


圖2.1.2 圖2.1的Reduction-A和Inception-ResNet-B部分結構圖


圖2.1.3 圖2.1的Reduction-B和Inception-ResNet-C部分結構圖

2.2 Inception-resnet-v2的組成模組


圖2.2.1 圖2.1的stem和Inception-ResNet-A部分結構圖


圖2.2.2 圖2.1的Reduction-A和Inception-ResNet-B部分結構圖


圖2.2.3 圖2.1的Reduction-B和Inception-ResNet-C部分結構圖

3. 模型訓練

在上述的Inception V4,Inception-Resnet-V1,Inception-ResNet-v2這三個模型中都用到了Reduction-A,他們各自的具體引數如下:


圖3.1 不同模型下Reduction-A的模型超引數

作者們在訓練的過程中發現,如果通道數超過1000,那麼Inception-resnet等網路都會開始變得不穩定,並且過早的就“死掉了”,即在迭代幾萬次之後,平均池化的前面一層就會生成很多的0值。作者們通過調低學習率,增加BN都沒有任何改善。

不過他們發現如果在將殘差匯入之前,對殘差進行縮小,可以讓模型穩定訓練,值通常選擇[0,1.0.3],如圖3.2


圖3.2 對inception-resnet模組進行最後輸出值的等比例縮小

同樣的在ResNet-v1中,何凱明等人也在cifar-10中發現了模型的不穩定現象:即在特別深的網路基礎上去訓cifar-10,需要先以0.01的學習率去訓練,然後在以0.1的學習率訓練。

不過這裡的作者們認為如果通道數特別多的話,即使以特別低的學習率(0.00001)訓練也無法讓模型收斂,如果之後再用大學習率,那麼就會輕鬆的破壞掉之前的成果。然而簡單的縮小殘差的輸出值有助於學習的穩定,即使進行了簡單的縮小,那麼對最終結果也造成不了多大的損失,反而有助於穩定訓練。

  • 在inception-resnet-v1與inception v3的對比中,inception-resnet-v1雖然訓練速度更快,不過最後結果有那麼一丟丟的差於inception v3;
  • 而在inception-resnet-v2與inception v4的對比中,inception-resnet-v2的訓練速度更塊,而且結果比inception v4也更好一點。所以最後勝出的就是inception-resnet-v2。


圖3.3 不同模型的結果對比