稠密連接 是什麼?
Dense Connections:稠密連接 的完整解釋
使網路中的每一層都接收所有前面層的輸出作為輸入,通過特徵複用和梯度流通改善深層網路的訓練和性能。
核心概念
稠密連接(Dense Connections)是對 ResNet 跳躍連接的推廣和深化。ResNet 中每層只接收前一層和跳躍層的輸出;DenseNet 進一步,讓每層與其所有前驅層相連。這個設計選擇帶來幾個優勢:
首先,最大化特徵複用:每層可直接訪問所有早期層學到的特徵,減少了重複學習。 其次,梯度流通暢:梯度沿著多條路徑回傳,即使單條路徑梯度衰減,仍有其他路徑提供信號。 再次,減緩梯度消失:類似 ResNet,但更激進的連接策略提供更多捷徑。 最後,減少參數量:與 ResNet 相比,DenseNet 在相似精度下參數量和計算量更小。
DenseNet 的核心洞察是:不是所有層都需要很寬(許多通道),只要層間有高效的通訊,較窄的層也能有效。
運作原理
DenseNet 的基本構建單位是稠密塊(Dense Block)。在一個稠密塊內,每層與其前所有層相連:
x_l = H_l([x_0, x_1, ..., x_{l-1}])
其中 [·] 表示連接操作,H_l 是第 l 層的計算(卷積、批規範化、激活等)。
DenseNet 使用「瓶頸層」和「過渡層」進一步優化。瓶頸層先用 1×1 卷積降低通道數(每層只增加 k 個通道,k 稱為「增長率」),再進行 3×3 卷積。過渡層在稠密塊之間進行下採樣,減少特徵圖尺寸。
典型的 DenseNet 架構為:初始卷積層 → 稠密塊 1 → 過渡層 → 稠密塊 2 → 過渡層 → ... → 全局平均池化 → 分類。
稠密連接的代價是隨著層數增加,每層的輸入通道數線性增加。若初始通道數為 c₀,增長率為 k,第 l 層輸入通道數為 c₀ + l×k。為控制計算量,通常 k 較小(24-32)。
實際應用
DenseNet 在 ImageNet 上與 ResNet 打成平手,但用更少的參數和計算達成。DenseNet-121 約 800 萬參數,ResNet-50 約 2500 萬參數,但精度相當。因此 DenseNet 在計算受限場景(移動、邊緣設備)中特別受歡迎。
Google、Facebook 等公司在推薦系統中採用 DenseNet 進行特徵提取。醫療影像分析廣泛使用 DenseNet,因其高效性和精度。在語義分割任務中,DenseNet 骨幹結合 FCN 或 U-Net 架構達到優異性能。
DenseNet 的高效性使其成為移動應用的熱門選擇,許多移動 AI 應用使用 DenseNet 作為視覺骨幹。
常見誤區
許多人認為稠密連接會導致特徵圖或參數量爆炸,但實際上設計得當的 DenseNet(通過低增長率和瓶頸層)參數量遠低於 ResNet。稠密連接本身不增加參數,增加的是特徵圖尺寸和內存使用。
另一個誤區是認為所有層都應該高度連接。實際上,DenseNet 將稠密連接限制在「稠密塊」內,不同塊之間仍使用過渡層分離。如果全網絡都稠密連接,計算量會不可接受。
此外,稠密連接不必使用連接操作。某些變體使用加法或其他融合方式,性能也很好。但連接保留了所有信息,無損融合,因此是標準選擇。
與相關技術的比較
- 與 ResNet:ResNet 使用加法連接相隔層,DenseNet 使用連接連接所有層,前者計算高效,後者特徵複用更充分
- 與稀疏連接:稠密連接是全局連接,稀疏連接有選擇性地連接,後者計算高效但需設計連接模式
- 與分組卷積:分組卷積減少通道互作用,DenseNet 通過遞進擴展通道數,雖然增加計算但表達能力更強
- 與 ResNeXt:ResNeXt 在 ResNet 基礎上加入分組卷積,DenseNet 改進連接方式,兩者都改善了表達能力
- 與 Transformer:Transformer 的自注意力實現了全局連接,DenseNet 在卷積層面進行局部稠密連接