DenseNets論文筆記及讀後感

12.19 densenets完結

首先是densenet的結構圖。傳統的神經網絡層與層之間一般只有L個輸出,而從圖中可以看到而我們的這個新的網絡有L(L+1)/2個輸出。每層的輸入都是拿前面所有層的features map作爲輸入,同樣它的features map也作爲所有下面層的輸入。
這裏寫圖片描述

陸陸續續花了幾天時間讀完了densenets論文,感受確是頗多,單單只是在分類這一模塊中,模型已經進步了許多。不是僅僅只是傳統的思路,單一的加多模型的層數。模型從最近的VGG16,Resnet,Highway Nets, GoogleNets, FractalNets, 到最新的DenseNets。很多網絡都基於這麼一個結論:如果每層之間更短的聯繫,並且更接近輸入和輸出,那麼訓練就更加有效。

VGG16雖然已經有非常好的性能,但是它的參數巨大,且訓練非常慢,訓練不有效。Highway Nets提供了一種新的思路,它用一種旁路(bypassing paths)的想法。ResNets繼承了它的想法併發揚光大,它可以直接的連接兩層並將上一層的特徵,與上一層的輸出通過簡單的相加作爲下一層的輸入,並且在訓練中隨機地捨去一些層來加快訓連效率。Googlenets與Resnets非常地像,但是Googlenets提供了一種新的加深網絡深度的方法可,通過將特徵圖連在一起,加寬它的寬度。Fractals Nets提供了一種新的加快訓練的方法,他將平行的幾層隨機組合,得到不同的隨機深度。

最新的Densenets通過在一個模塊中的dense connection,讓每一層的輸入都能由前面的所有層特徵連在一起,並且每一層的輸出都能作爲後面所有層的輸入。通過使用這種方法,會讓信息和梯度流動更加有效,DenseNets擁有更少的參數,因爲不需要更多的參數去重複學習冗餘的特徵。同樣,梯度、信息的有效流動也能讓訓練更加有效。

作的一些筆記

1.pooling layers

因爲在下采樣過程中,特徵的大小會發生變化,所以難以將這些特徵圖連在一起。爲了解決這個問題,我們將網絡分爲多個dense塊,在這些block之間再加入變化層,包括卷積層,BN層,和平均池化層。所以可以大概得出DenseNets的模型圖樣。這與最前面的圖會有一點區別,加入了dense block。
這裏寫圖片描述

2.Growth rate

即每層過濾器的個數,反映在特徵圖上就是channels。
可以通過看特徵圖來看這個網絡的全局狀態。每一層增加了k通道的特徵圖。

3.Bottleneck layers.Densenets-B

在33卷積前加上11,每個1*1生成4k的特徵圖。這就是Densenets,能夠幫助遏制過擬合。

4.Compression。Densenets-C

在變化層加上一個θ參數(0<θ<=1),m代表上一個block的特徵圖數,θ*m就是經過該層後的特徵圖數,這能夠有效壓縮特徵圖信息。

比較Densenets,resnets等在不同數據集上的效果

Table 2(論文圖表)
這裏寫圖片描述

1.

實驗結果表明(Table 2),DenseNets參數利用比其他網絡(尤其是 ResNets)來的更加有效。D-BC中加入的兩個尤其能讓參數更加有效。

2.

首先要注意到的是,如果網絡發生過擬合了,訓練的loss是可能一直在下降的,但是它的測試error結果反而沒有什麼變化,甚至還有可能會增加。DenseNets更加有效利用參數的好處還有可能是,更少地導致過擬合。

3.

沒有加入BC的網絡可能存在一個潛在的過擬合情況,加bottleneck and compression可以有效遏制這種情況。

特徵再使用

1.

同一個模塊中的很早就被提取的特徵,確是是被同一模塊中很深的層所直接使用。

2.

transition層中的權重也是來自有前面的block中,從前到後的信息流動只有很少一部分是間接流動的。

3.

tranition層的輸出特徵很多是冗餘的,它的權重佔有很小的比例。這與BC的強大輸出所吻合,該層只是壓縮了輸出。

4.

雖然最後的分類層使用了前面所有的密集快的特徵,但是有相當一部分集中在最後一塊內,這說明網絡後面可能會產生更高級的特徵。