論文DenseNet(Densely Connected Convolutional Networks)解讀
Introduction
DenseNet在ResNet的基礎上(ResNet介紹),進一步擴充套件網路連線,對於網路的任意一層,該層前面所有層的feature map都是這層的輸入,該層的feature map是後面所有層的輸入。示意圖如下:
原本
DenseNet有幾個明顯的優點:
- 減輕了梯度消失問題(vanishing-gradient problem)
- 增強了feature map的傳播,利用率也上升了(前面層的feature map直接傳給後面,利用更充分了)
- 大大減少了引數量
Related Work
在CNN模型裡,傳統的feed-forward架構可以視為狀態模型,狀態在層與層之間傳播,每一層讀取它上一層狀態,改變狀態並保留一些需要保留的資訊並將裝備傳給下一層。ResNet通過增加額外的identity transformations讓狀態內需要保留的資訊顯性化。作者的另一篇paper指出ResNet中有一個非常有意義的現象:網路的許多層貢獻較小並且在訓練過程中可以被隨機丟棄。
這裡引用Lyken的回答,分析ResNet,其gradient的主要來源是residual分支;在測試過程中,即便移除掉正常連結(僅留下 shortcut),模型照樣能保持較好的正確率。
本論文指出了residual connection實質是 highway network 的一種特殊例子,將 ResNet 展開以後,
ResNet再分析
但是ResNet和真正的寬模型還是不同的:Forward 時兩者可以看做相同,但 backward 時有部分 gradient 路徑無法聯通。也就是說, ResNet 在回傳 gradient 時,尚有提升的空間,這就是為什麼 ResNeXt,Wide-ResNet 等文章能有提升的原因:因為 ResNet 並不是真正的寬模型。
以ResNet中一個Residual unit的gradient回傳為例,示意圖如下:
注意上式的不等於,為什麼backward的部分gradient路徑無法聯通?這是因為
DenseNet的Insight
既然 Residual Connection 能夠讓模型趨向於寬網路,那麼為什麼不直接來個狠得,這就是 Densenet論文核心思想:對每一層的前面所有層都加一個單獨的 shortcut到該層,使得任意兩層網路都可以直接“溝通”。即下圖:
這一舉看似粗暴,實則帶來不少好處:
- 從feature來考慮,每一層feature 被用到時,都可以被看作做了新的 normalization,論文3可以看到即便去掉BN, 深層 DenseNet也可以保證較好的收斂率。
- 從perceptual field來看,淺層和深層的field 可以更自由的組合,會使得模型的結果更加robust。
- 從 wide-network 來看, DenseNet 看以被看作一個真正的寬網路,在訓練時會有比 ResNet 更穩定的梯度,收斂速度自然更好(paper的實驗可以佐證)
DenseNet
記模型的輸入圖片為
Dense connectivity
DenseNet中每層的輸入是前面的所有層,故任何兩層之間都有連線。但在實際情況下,因為多層之間feature maps大小不同,不便於任何兩層之間的組合,受到GoogleNet的啟發,論文提出了Dense Block,即在每個Block內,所有layer都保持dense connectivity,而在Block之間是沒有dense connectivity,而是通過transition layer連線的。如下圖:
Composite function
即單個Block內,層與層之間的非線性轉換函式
Transition layer
不同層的feature map大小不同,考慮到池化層在CNN模型內的重要性,提出一個Transition layer
用於連線Block與Block,每個Transition layer的結構如下:
Growth rate
如果一個
DenseNet-BC
Bottleneck layers
儘管每層只產生