深度學習

殘差連接(residual connection)

/ rih-ZID-joo-ul kuh-NEK-shun /

殘差連接,是一個讓「真正的深網路」——上百層——得以訓練而不至於崩掉的小小接線技巧。它的想法簡單得近乎叫人不好意思:在某一層對輸入做變換的那條路徑之外,再加一條捷徑,把原始輸入原樣穿過去,再加回到這一層的輸出上。於是,你不再逼著每一層從零重新發明一切,而只要它去學那個「殘差」——那點小小的改動、那點剩下的差額——疊加在已經進來的東西之上。

想像你在修改一個段落。你可以每過一遍都把它整段重寫,也可以保留現有文字、只標出要改的地方。後一種更穩妥:如果某一遍實在沒什麼有用的可加,它大可不動原文,你也半點不損失。殘差連接給了一層同樣的選項。如果一層幫不上忙,它可以學著輸出近乎零,讓未經觸動的輸入經由捷徑流過去——於是「多加幾層」再也不會把事情弄糟,至多可能變好。

它為什麼如此要緊:在這之前,把許多層疊起來反而會拉低準確率,因為訓練信號(梯度)得一層層往回傳,傳著傳著就褪成了零——這正是「梯度消失」問題。那條捷徑給了這個信號一條清晰、直達的回傳通路,於是很深的網路終於能訓練好。它在 2015 年作為 ResNet 問世,如今這一個想法已成了幾乎每一種深度架構的標準配件,連 Transformer 也在內。它並非白來——它增添了連接和記憶體——但它在「可訓練的深度」上換回的回報,是巨大的。

把一個模組的輸出寫成 輸出 = F(輸入) + 輸入。那個「+ 輸入」就是殘差連接。如果這個模組學到 F ≈ 0,輸入便原樣穿過、毫無改變——於是即便這一層無可奉獻,也絕不添亂。

只學那點改動,而非全部——並讓原始的東西免費流過。

「殘差連接」與「跳躍連接」常被互換使用。核心洞見是:只讓一層去學「與輸入的差額」,遠比讓它去學「完整的映射」容易得多——而且它還給訓練信號留了一條回家的捷徑。

又稱
skip connection残差连接殘差連接跳跃连接ResNetshortcut connection