深度學習——分類之Densenet

論文:Densely Connected Convolutional Networks

作者:Gao Huang, Zhuang Liu, Kilian Q. Weinberger, Laurens van der Maaten

中心思想:非常簡單直接,把ResNet的residual connection搞到極致,每一層的輸出都直連到後面所有的層的輸入。

原理

ResNet是上一層輸出作為輸入,做變換,然後加上上一層的輸入:

而DenseNet則是之前所有層的輸出,都直連到後面的每一層,每一層接受前面所有層的輸出:

具體的網路結構圖如下:

因為是這樣的稠密連接,所以網路稱之為DenseNet。

然後因為要多層輸出之間疊加concatenate,所以需要尺寸相同,但是到後面要降維啊,所以類似於ResNet,一組Block之間如上連接,然後加一個降維的層,然後再是一組如上連接,網路總體結構如下:

分析

這樣的結構的優點顯而易見:

  • 向前:每一層都可以看到所有的之前的輸入,對於網路已經學習到的『知識』(即已有feature map),以及原始輸入,都可以直接access到,然後再添加自己的『知識』到全局知識庫。鼓勵了特徵的重用,特徵重用就可以減少不必要的計算量。另外,多層之間可以很好地進行交互,每一層都接受前面所有層的輸出,具有多層特徵融合的特性;
  • 向後:跳躍結構,可以很近地連接到最後的loss,訓練起來很容易,直接接受最終loss的監督,深層監督,解決梯度消失的問題,並且,能起到正則化的作用緩解過擬合;

但是這樣的結構,有一個明顯的缺點,就是特徵會爆炸,每一層的輸入都連接到後面的所有層,這樣特徵越來越多越來越多,作者用一個增長率的概念來量化這個過程,定義為每一層輸出的feature map數量,即每一層增加的feature map數量。因為特徵數量會快速增加,所以作者用了很『輕』的層,不想通常的每層輸出上百個通道,DenseNet每一層只輸出比如4、16這樣很少的層,每一層都很輕。並且,每一層也使用了1x1來降維。

網路結構

網路的具體結構如下所示:

上面的每一個conv指的是一個BN-ReLU-Conv的複合變換。

總結

思想簡單直接,效果也不錯,更少的參數量達到相似或更好的結果。當然這裡又有一個『但是』。。。但是,更少的參數量並不意味著更節約顯存或訓練每一步會更快。因為有稠密直連的過程,所以各個feature都要存下來,實際上很容易爆顯存,另外,這種稠密連接也意味著反向傳播計算梯度更加複雜,每一步訓練並不一定會更快。不過,訓練好前向inference的時候這個問題不大。另外,作者也針對這個問題做了改進,緩解了這個問題。

總體來說,屬於ResNet這個路數,用shortcut來達到前面用好輸入和歷史知識,後面直連loss深層監督更好訓練,思路簡潔,實際效果也不錯。

從這裡的結果來看,ImageNet上的Top1準確率下面三個模型大致相當:

  • DenseNet161 77.560
  • FBResNet152 77.386
  • Inception v3 77.294

而模型規模則和Inception v3相當,比ResNet152要小多了。

推薦閱讀:

地平線重磅發布 AI 視覺晶元「征程」與「旭日」,落地三大場景打造智能方案
?谷歌最新機器人,Handle將是邁向商業化的第一步?

TAG:人工智能 | 深度学习DeepLearning | 神经网络 |