1. 程式人生 > >【論文學習】Densely Connected Convolutional Networks 學習

【論文學習】Densely Connected Convolutional Networks 學習

  眾所周知,自從ResNet 的網路結構被提出後,一直引領著深度學習的潮流,後來提出的一些網路結構都有這種short paths 的思想。而今天要提到的DenseNet 更是將這種思想發揮到了極致。DenseNet 憑藉著優秀的表現當選 CVPR 2017 最佳論文,而他的網路結構並不複雜,思想也很簡單,可以說是簡單易學且高效的網路結構。

每一層將前面所有的feature map都作為自身的輸入

Figure 1 每一層將前面所有層的feature map都作為自身的輸入

  
  就像上面的圖片中展示出的,Dense Block中每一層都輸入是由前面所有層的feature map結合起來的,這種方式將特徵重用發揮到了極致,這也正是DenseNet核心的優勢所在,讓網路中的每一層可以依賴於更前面層學習的特徵。此外,在ResNet 中存在冗餘的情況:將訓練好的ResNet隨機去掉網路中的幾層,對於結果並不會產生明顯的影響。因此作者將Dense Block設計的特別窄,每一層只學習得到比較少數量的feature,從而達到減輕冗餘的情況。
  
  但是,要知道一個網路結構想要達到高度的準確性,無外乎滿足兩點:網路結構

,或者(前者的代表就是ResNet,後者的代表就是GoogleNet了)。所以在設計了一個窄的網路結構後,一般人會想著加深網路層數以達到預期的準確性,但是作者並沒有糾結於這兩點。作者是從feature map著手,通過對feature map的極致的運用,使得即使沒有很深的網路結構也不會出現準確性不足或者說欠擬合的現象,這是一個非常大的優勢。(你網路效果好,你怎麼說都對,哈哈哈哈
  
  如同ResNet 一樣,由於short paths 的存在使得DenseNet 在網路結構在很深的時候也不會出現過擬合和梯度消失的情況。而DenseNet 還具有抗過擬合的作用,網路每一層提取的特徵都相當於對輸入資料的一個非線性變換,而隨著深度的增加,變換的複雜度也逐漸增加(更多非線性函式的複合)。相比於一般神經網路的分類器直接依賴於網路最後一層(複雜度最高)的特徵,DenseNet 可以綜合利用淺層複雜度低的特徵,因而更容易得到一個光滑的具有更好泛化效能的決策函式。
  所以總的來說DenseNet有以下幾個優點:

  1. 減少了引數量,計算量
  2. 解決了深層網路梯度消失的問題
  3. 加強了特徵的傳播,更有效地利用特徵。
  4. 減輕了過擬合

那麼DenseNet 具體是怎樣實現的呢?

  首先是非線性變換方程,在ResNet中,非線性變換方程如下;
xl=H(xl1)+xl1x_{l}=H(x_{l-1})+x_{l-1}
   DenseNet中的非線性變換方程如下;
xl=H([x0,x1, ,xl1])x_{l}=H([x_{0},x_{1},\cdots ,x_{l-1}])

  從上面可以看出,ResNet 是將經過非線性變換的feature map 與上一層的feature map 直接相加,在作者看來,這種方式有點“粗魯”,會干擾網路資訊的傳遞。所以在DenseNet 中,第l

l 層將所有前面x0x_{0}xl1x_{l-1} 層的feature map 連線起來作為輸入。
   在DenseNet 中 H()H(\cdot ) 包括BN,ReLU和3x3的conv 操作。為了能讓各層的feature map 尺寸一致,所以不會在Dense Block 中設定池化層。而每一個Dense Block 之間有transition layers 相連,在transition layers 中帶有平均池化的操作。
  
DenseNet-B:
   在Dense Block 中,有一個很關鍵的引數增長率(Growth rate) kk ,他表示的是在 H()H(\cdot ) 中,每一層會產生多少feature map ,作者的實驗表明kk 取較小的值,可能會得到更好的結果。但是,由於Dense Block 每一層的輸入中包含了前面所有層的feature map ,那麼第 ll 層就會有k0+k(l1)k_{0}+k*(l-1) 層輸入,當 ll 很大時,這個數值很明顯是不可接受的。所以作者提出了DenseNet-B結構,在DenseNet-B 中的每個 H()H(\cdot ) 前都有一個瓶頸層(Bottleneck layers),以減少輸入的feature map 的數目。瓶頸層由多個1x1的卷積核構成,其輸出feature map 的數目一般為4*Growth rate。
  
DenseNet-BC:
   為了讓模型更加緊湊,作者又在transition layers 添加了瓶頸層,如果一個Dense Block 的輸出有 mm 張 feature map,設定一個引數θ\theta ,最終在過度層中產生θm\theta m 張feature map;這種模型就是DenseNet-BC。

Figure 2 一個有三個Dense Block的深度網路,每個Dense Block之間有過渡層相連,過渡層由卷積層和池化層組成。

網路結構

DenseNet:
Dense Block: BN+Relu+Conv(33)+dropout
transition layer: BN+Relu+Conv(1
1)(m)+dropout+Average Pooling(22)
  
DenseNet-B:
Dense Block: BN+Relu+Conv(1
1)(4K)+dropout+BN+Relu+Conv(33)+dropout
transition layer: BN+Relu+Conv(1
1)(m)+dropout+Average Pooling(22)
  
DenseNet-BC:
Dense Block: BN+Relu+Conv(1
1)(4K)+dropout+BN+Relu+Conv(33)+dropout
transition layer: BN+Relu+Conv(1
1)(θm,0<θ<1,文中θ=0.5)+dropout+Average Pooling(2*2)

DenseNet-BC的網路結構引數如下,其中網路增長率K=32,conv 代表BN-ReLU-Conv

這裡寫圖片描述

測試結果

這裡寫圖片描述

Table 1 不同的網路結構在ImageNet上1%和5%的錯誤率。

這裡寫圖片描述

Figure 3 ImageNet上DenseNet-BC和ResNet對比

已完…