卷積網路架構

殘差連接(residual connection)

殘差連接是一個看似簡單的接線技巧:與其要求一疊層直接計算目標變換 H(x),你讓這些層只計算 F(x),然後把原始輸入加回去,產生輸出 H(x) = F(x) + x。那條把 x 原封不動繞過這些層、並在末端相加的小箭頭,就是跳接(skip connection),而 F(x) 是殘差,即這些層必須學的「剩餘部分」。動機是一個經驗上的謎題:在殘差連接出現之前,把一個普通網路加深超過某個點,會讓它變差——不只在測試資料上,甚至在訓練資料上也變差,這無法用過擬合解釋。這種退化顯示,極深的普通網路根本就難以最佳化。

殘差連接藉由改變「層必須學什麼」來修正這點。如果某個區塊的理想映射接近恆等(只是把輸入原樣傳過去),普通網路就必須吃力地透過數個非線性層去重現它的輸入,這很難;而殘差區塊只需要把 F(x) 推向零,這很容易。更一般地說,這個加法給了梯度一條乾淨的高速公路:反向傳播時,損失的梯度既直接流經恆等項、也流經 F,所以即使在數百層深的網路中,早期的層仍能收到強而不消失的梯度。這正是讓訓練 100、152、甚至 1000 層網路變得家常便飯的那一個改動。

要讓加法成立,F(x) 與 x 必須具有相同的形狀;當某個區塊改變了通道數或空間解析度時,捷徑會使用一個 1x1 卷積(投影捷徑 projection shortcut)在相加前匹配維度。殘差連接如今幾乎無所不在,遠遠超出 CNN:每一個 transformer 區塊都把它的注意力與前饋子層包在殘差連接中,它們對大型語言模型、擴散 U-Net、以及幾乎所有現代深度架構的可訓練性都至關重要。在卷積本身之後,它們可說是深度學習時代最重要的單一架構想法。

一個微妙之處:殘差連接並不會讓網路「實質上變淺」,但它確實讓網路表現得像是許多較短路徑的集成,並讓損失地景平滑得多,這才是最佳化得以成功的更深層原因。恆等項必須是乾淨的加法、上面不能有非線性,捷徑的這種純粹性正是保住梯度流動的關鍵。

又稱
skip connectionshortcut connection