1. 程式人生 > >深度學習之基礎模型-Inception-V3

深度學習之基礎模型-Inception-V3

Although increased model size and computational cost tend to translate to immediate quality gains for most tasks (as long as enough labeled data is provided for training), computational efficiency and low parameter count are still enabling factors for various use cases such as mobile vision and big-data scenarios.

從論文中,可以看出作者主要考慮的是雖然網路的深度增加給很多工帶來了很多好處,但是模型的大小和計算效率也很關鍵,尤其是對於一些移動裝置或者大資料場景,就顯得很有必要了。

作者指出,儘管VGGNet在特徵提取方面具有非常簡潔的優勢,但是也消耗了大量的計算資源,另一方面,GoogLeNet(Inception-V1)在記憶體和計算複雜度方面做了限制下,也能達到很好的效果。

  • GoogLeNet包含5million引數,只是AlexNet的112,其中AlexNet包含60million引數
  • VGGNet包含的引數比AlexNet的3倍還多

通用設計原則

  • 避免採用帶有瓶頸的層,尤其在網路結構開始的時候。對於一個前向傳播網路,可以將其看作一個有向五環圖(從輸入到分類或者回歸層)。將輸入與輸出進行分開,都能導致大量的資訊從分開處流失。一般的情況下,特徵圖的大小從輸入到輸出應該緩慢下降。理論上講,很多資訊不能通過特徵維數來得到,比如相關性結構。維度智慧代表一些粗略的資訊。
  • 高維度能夠很更容易在網路的區域性進行處理。在卷積網路結構中,增加非線效能夠使得更多的特徵解耦合。從而使的網路訓練速度更快。
  • 空間聚合能夠在低維嵌入進行,然而不會帶來任何表達能的減弱。例如,在進行3x3的卷積時,可以在空間聚合之前,對輸入進行降維,而不會帶來嚴重的影響。原因:如果採用空間聚合,則相鄰的位置的資訊具有強相關性,即使進行了降維,也不會帶來太多的損失,並且維數的降低,也能夠加速網路學習。
  • 平衡網路的寬度和深度。最優的網路可以通過平衡每一個階段的濾波器的個數和網路的深度達到。網路的寬度和深度的增加可以使的網路達到了一個更高的效果。但是,最優的網路結構都是通過同時來提升網路的寬度和深度,但是也需要考慮計算資源的分配。

大卷積->小卷積


這裡寫圖片描述
  • 考慮1x1卷積後面緊跟3x3卷積,由於啟用層的相鄰位置是高度相關的,因此這種先降維後聚合的操作也可以達到類似的區域性表達效果。
  • 任何的降維都能減少網路的引數。從而,合適的卷積分解,能得到更多的解耦合的特徵,這也有助於提高網路訓練的速度。另一方面,也可以利用節省下來的記憶體去增加filter-bank的大小,使得模型能哦股在單個機器上進行訓練。
  • 3x3的卷積相對5x5的卷積能減少更多的引數。因此可以利用兩個3x3的小卷積代替一個5x5的卷積核,表達能力沒有減弱,但引數卻減少很多(9+925)[利用小卷積代替大卷積的思想在VGG中也有討論]

    網路結構

    遵循上面的原則,對Inception-v進行了改進

原始的Inception模組


這裡寫圖片描述

將5x5的卷積改為2個3x3的卷積,得到


這裡寫圖片描述

進一步,作者深入討論了將NxN的卷積,分解成1xN和Nx1的卷積疊加


這裡寫圖片描述

根據這種規則提出瞭如下結構:


這裡寫圖片描述
  • 將NxN結構分解為1xN和Nx1的疊加,能減少很多計算量。但是不建議在網路的開始階段使用,效果並不好。但是在中間層使用,能達到不錯的效果(中間處於12~20層的結構中)。這種尺度下,7x7的卷積分解成1x7和7x1的卷積後,呆了很好的效果

這裡寫圖片描述
  • 遵循通用構造原則中的第2條,在8x8的特徵層上,利用這種分解然後聚合的結構來提升高維度的表達能力

輔助分類器


這裡寫圖片描述

這種做法在GoogLeNet上就已經使用,認為這種輔助分類器,在網路訓練過程中扮演著非常重要的角色,能有效的將梯度傳播到底層。但是作者發現輔助分類器並沒有提升收斂速度,但是卻起到了正則化的作用:

  • 如果輔助分類器使用了batch-normalized或者dropout層,最終的分類器效果更好

有效降低特徵圖尺寸

通常,卷積網路會利用pooling操作來降低特徵圖的大小。為了避免出現bottleneck現象,在應用Max Pooling或者average pooling之前,可以適當的擴大特徵層的維度。


這裡寫圖片描述
  • 如果將dxd大小k層的特徵圖,變成d2xd2大小,2k層的特徵圖,我們需要首先計算一個步長為1的2k個卷積核的卷積操作,然後應用傳統的pooling操作,即,總共有2d2k2個操作。另一種方式是,先進性pooling,在進行卷積操作,此時的計算複雜度為2(d2)2k2,雖然減少了計算量,但是帶來另外一個問題,那就是網路出現了bottleneck,表達能力不足。

鑑於,上述的reduction操作,帶來的問題,作者考慮了另外一種方式,來降低特徵的解析度。同時並行使用卷積和池化操作,步長為2,然後在把特徵進行疊加。如下


這裡寫圖片描述

網路結構


這裡寫圖片描述

圖中用到了figure5,6,7中的結構,再次列舉如下


這裡寫圖片描述

問題:

  1. 論文的Figure 9和Figure 10中提到的320,是怎麼來的??
  2. Table 1中的引數怎麼分配和計算的??

label Smoothing

通過標籤平滑進行正則化處理,

p(k|x)=exp(zk)Ki=1exp(zk)

對任意的標籤k{1...K},其中zi表示模型的邏輯輸出。

定義交叉熵loss:

l=k=1Klog(p(k))q(k)

其導數為:

lzk=p(k)q(k)

由於標籤都是0,1型別,在計算最終的loss的時候,q(k)相當於一個δk,y函式。這個和我們最終想要得到的結果稍微有點出入,我麼最終想要的

zyzk,forallky

這樣,我們可以稍微對標籤做平滑處理

q(k|x)=(1ϵ)δk,y+ϵu(k)

如果u(k)是一個均勻分佈,則

q=(1ϵ)δk,y+ϵK

另一種解釋:考慮交叉熵,有

H(q,p)=k1Klogp(k)q(k)=(1ϵ)H(q,p)+ϵH(u,p)

H(u,p)可以寫成KL散度的形式

H(u,p)=DKL(u||p)+H(u)

Performance

  • 對比不同的感受野


    這裡寫圖片描述
    • 299x299:步長為2,然後接max pooling
    • 151x151:步長為1,然後接max pooling
    • 79x79:步長為1,沒有接max pooling
      三者的引數是相同的,但感受野不同,最終的結果表明感受野越大,效果越好,但是差別不大。但是,如果單純的根據輸入解析度減少網路的大小,則最終的效果要差很多。
  • 模型的效果


    這裡寫圖片描述

這裡寫圖片描述
這裡寫圖片描述

參考文獻