全連接層
全連接(稠密, dense)層是一種每個輸入值都影響每個輸出值的層。可想像輸入與輸出之間是一張完全二部圖的接線:有 n 個輸入、m 個輸出時,就有 n 乘以 m 個連接,各自帶一個權重。它是最一般、約束最少的層;它對輸入彼此如何相關不作任何假設,這既是它的彈性、也是它的代價。
這個層就是一個矩陣-向量乘積再加偏置,後面可接一個激活:y = phi(Wx + b),其中 x 屬於 R^n 是輸入、W 屬於 R^(m x n) 是權重矩陣、b 屬於 R^m 是偏置向量、y 屬於 R^m 是輸出。元素 W_(ij) 是從輸入 j 到輸出 i 的權重,而 W 的第 i 列連同 b_i 恰好是一個人工神經元。此層有 n·m + m 個可學習參數。對一批 B 個輸入(堆成矩陣 X 屬於 R^(B x n))運算時,計算是單一個矩陣乘法 X·W^T + b,這也是 GPU 能如此加速這類層的原因。
由於每個輸入都觸及每個輸出,參數量與計算量隨維度的乘積增長,這對影像而言是災難性的:一張 224 乘 224 乘 3 的影像攤平後是 150,528 個輸入,在其上接一個區區 1,000 單元的稠密層就需要約 1.5 億個權重。卷積層則改為在所有空間位置重複使用一個小濾波器(權重共享),並讓每個輸出只連到一個局部鄰域(稀疏連接),大幅削減參數並內建平移等變性。這個對比正是 CNN 而非稠密網路主宰像素層級視覺的核心原因。
全連接層存活於視覺模型的尾端(把池化後特徵映到類別 logits 的分類頭是稠密的),也存在於每個 Transformer 的前饋子區塊內部(夾著非線性的兩個稠密層)。一個 1x1 卷積在數學上就是在每個空間位置各自獨立套用的全連接層,是通道混合的一個有用恆等式。知道稠密層該放哪裡(在空間結構已被摘要之後)相對於卷積該放哪裡(當空間結構仍重要時),是一項基本的架構技能。
陷阱:從卷積特徵圖過渡到稠密頭需要攤平或全域池化。全域平均池化(自 GoogLeNet 與 ResNet 起使用)通常優於攤平,因為它無參數、消除對輸入尺寸的依賴,並減少過擬合。