殘差神經網絡

在殘差神經網絡中的一個殘差塊裡，殘差連接跳過了兩個網絡層。
殘差神經網絡（Residual Neural Network，簡稱ResNet）屬於深度學習模型的一種，其核心在於讓網絡的每一層不直接學習預期輸出，而是學習與輸入之間的殘差關係。這種網絡通過添加“跳躍連接”，即跳過某些網絡層的連接來實現身份映射，再與網絡層的輸出相加合併。其運作機制與Highway network類似，通過極大的正偏置權重來打開“門控”。  這一設計使得擁有幾十上百層的深度學習模型可以更易於訓練，增加模型深度時還能保持甚至提高準確度。所謂的“殘差連接”即“直連跳過”，這一概念也被應用於1997年的長短期記憶模型LSTM、 Transformer模型（比如BERT和GPT系列，ChatGPT等）、AlphaGo Zero、AlphaStar (software)以及AlphaFold等。
殘差神經網絡由何愷明、張祥雨、任少卿和孫劍開發，這一成果在2015年的ImageNet大規模視覺識別挑戰賽中奪冠。

**基本原理**

**背景介紹**
2012年，針對ImageNet競賽開發的AlexNet模型是一個包含8層的卷積神經網絡。到了2014年，牛津大學的視覺幾何組（VGG）通過疊加3x3卷積層將網絡深度增加到了19層。
但是，層級的增加卻導致訓練精度的迅速下降， 這種現象被稱為“性能退化”問題。
理論上，如果一個更深的網絡僅僅是通過在一個較淺網絡的基礎上增加額外層來構建的，那麼這個更深的網絡不應該比其較淺的網絡有更高的訓練損失。 如果這些額外層具有身份映射的能力，那麼更深的網絡應該能夠實現與其較淺網絡相同的功能。但這裡存在一個假設，即優化器不能有效地將這些參數化的網絡層調整為身份映射。

**殘差學習**
在多層神經網絡模型裡，設想一個包含若干層的子網絡。這個子網絡的函數用來表示，其中是子網絡的輸入。殘差學習是通過重新設定這個子網絡的參數，讓參數層表達一個殘差函數。因此，這個子網絡的輸出可以表示為：
 
這一原理同樣適用於1997年提出的長短期記憶LSTM單元， 在Backpropagation through time裡計算，簡化為。
函數常通過矩陣乘法實現，並結合激活函數以及規範化操作（如Batch normalization或層規範化）。
這類子網絡被稱作“殘差塊”。 通過疊加這樣的殘差塊，形成深度殘差網絡。
在""公式中的""操作是通過一個相當於恆等映射的跳躍連接來完成，它將殘差塊的輸入直接與輸出連接。在隨後的研究中，這種連接常被稱作“殘差連接”。

**信號傳遞**
身份映射的引入有利於信號在前向傳播路徑和反向傳播路徑中的傳遞。

**向前傳播**
如果第個殘差塊的輸出是第個殘差塊的輸入（這裡假設塊與塊之間沒有激活函數），可以得到：
 
若遞歸應用此公式，例如，，可以推導出：
 
這裡表示任意後續殘差塊的索引（比如處於最末尾的塊），代表任意靠前的塊對應的索引。該公式說明了總有一個信號能夠直接從淺層塊傳遞到深層塊。

**反向傳播**
殘差學習的公式還在一定程度上緩解了梯度消失問題。然而，梯度消失並不是導致性能退化問題的根源，因為通過引入規範化層（如批量規範化）可在一定程度上解決此問題。根據上面的前向傳播過程，對進行求導，可以得到：
 
這裡 是最小化損失函數。以上表明，淺層的梯度計算總會直接加上一個項。因此，由於額外項的存在，即使的梯度很小，總梯度也不會消失。

**殘差塊**
兩種類型的卷積殘差塊。左側是基本塊，它由兩個3x3卷積層組成。右側是瓶頸塊，該塊先通過一個1x1卷積層進行降維，接著是一個3x3卷積層，最後再通過一個1x1卷積層恢復原來的維度。

**基本殘差塊**
基本殘差塊是原始ResNet研究中最簡單的部分。 它包括兩個串行的3x3卷積層以及一個殘差連接。這兩層的輸入輸出尺寸保持一致。

**瓶頸殘差塊**
瓶頸殘差塊包含三個串聯的卷積層和一個殘差連接。 該塊的第一層是1x1卷積，用於降維，比如降至輸入維度的1/4；第二層是3x3卷積；最後一層是另一個1x1卷積，用於恢復維度。ResNet-50、ResNet-101和ResNet-152模型都基於瓶頸塊構建。

**預激活殘差塊**
預激活殘差塊在應用殘差函數之前，先使用激活函數，如非線性和規範化的處理。預激活殘差塊的計算可以表述為：
 
這裡的可以是如線性整流函數等任意非線性激活或歸一化操作。這種設計減少了殘差塊間非恆等映射的數量，被用於訓練200層到1000多層的模型。
從GPT-2開始，Transformer塊常被用於預激活塊，這在Transformer模型的相關文獻中被稱為“預規範化”。

**Transformer塊**
GPT模型採用的Transformer架構是由兩種類型的殘差塊構成：一個是多頭注意力塊，另一個是前饋的多層感知器（MLP）塊。這種設計通過結合兩個功能強大的殘差塊，使得Transformer能夠高效地處理數據並學習複雜的特徵，其中每個殘差塊都利用殘差連接來促使信號在網絡深層之間的流動以及更有效的進行梯度回傳，克服了深度模型訓練過程中遇到的梯度消失等問題。
Transformer塊是由兩個殘差塊組成，每個殘差塊都設有一個殘差連接。
第一個殘差塊為多頭注意力塊，使用了自注意力運算，隨後連接一個線性映射層。第二個殘差塊是一個前饋式的多層感知器（MLP）塊，這個塊在某種程度上像是一個“反向”的瓶頸塊，它通過一個線性映射層（在卷積神經網絡中相當於1x1的卷積）來擴大維度，然後通過另一個線性映射層來減少維度。
一個Transformer塊包含了四層線性映射。GPT-3模型擁有96個這樣的Transformer塊（在Transformer領域的文獻中，通常將一個Transformer塊稱作一個“Transformer層”）。因此，該模型包含了大約400層的映射層，包括Transformer塊內的96x4層，以及一些額外的層用於輸入嵌入和輸出預測。
若沒有殘差連接，訓練網絡深度極高的Transformer模型將無法取得成功。

**相關研究**
1961年，在弗蘭克·羅森布拉特出版的書籍中介紹了一個含有跳躍連接的三層多層感知器（MLP）模型（詳見第15章，第313頁）。這種模型被稱作“交叉耦合系統”，其跳躍連接實際上是交叉耦合連接的一種形式。
在1994年和1996年出版的書籍中提出了在前饋MLP模型中使用的“跳層”連接：“MLP一般允許存在多個隱藏層，並且支持從輸入直接到輸出的‘跳層’連接”（詳見第261頁，第144頁），“...這使得非線性單元能夠調整線性函數形式”（詳見第262頁）。這種說法其實已經暗示了非線性MLP的表現就像是在一個線性函數上加上了一個殘差函數。
在1991年分析了梯度消失問題，並認為這是深度學習效果不佳的原因。 為解決這一問題，長短期記憶（LSTM）網絡在每個LSTM單元中引入了權重為1.0的跳躍或殘差連接，計算公式為。在Backpropagation through time中，這個公式轉化為前饋神經網絡中的殘差公式，從而實現了深層循環神經網絡的有效訓練。2000年發佈的一種LSTM版本通過“遺忘門”來調節連接，這些門的權重不再固定為1.0，而是可以學習的。在實際實驗中，遺忘門通過正偏置權重進行初始化，從而解決梯度消失問題。
2015年，Highway network將上述原理應用於前饋神經網絡，被媒體報道稱為“首個具有數百層深度的前饋神經網絡”。 原有的高速神經網絡論文不僅提出了非常深的前饋網絡的基本架構，還展示了20層、50層和100層網絡的實驗結果，並提及正在進行的深達900層的實驗。50層或100層的網絡相較於它們常用的神經網絡有更低的訓練誤差，但與20層的訓練結果相比，誤差並無降低（詳見MNIST數據集中的圖1）。在超過19層的網絡上，並未有訓練精度的提高。然而，ResNet的研究證明了多於20層以上的訓練結果同樣有效。 它指出跳躍連接中的調節可能導致前向和反向傳播中信號的消失（詳見第3節）。這也解釋了為什麼2000年的LSTM的遺忘門要通過正偏置權重初始化為開啟狀態：只要門處於開啟狀態，它就如同1997年的LSTM。同樣，高速神經網絡如果通過強正偏置權重保持門的開啟狀態，就表現得如同ResNet一樣。現在的神經網絡（如Transformer）中使用的跳躍連接主要就是身份映射。
2016年出現的DenseNets被設計為一種深層的神經網絡，旨在將每一層與其他所有層連接。DenseNets通過使用身份映射作為跳躍連接來實現這一目標。與ResNet不同，DenseNets通過拼接而非加法將層輸出與跳躍連接合並。
利用殘差網絡架構，實現了具有隨機深度的神經網絡。 通過隨機丟棄一部分網絡層，讓信號通過跳躍連接進行傳播。這種做法也被稱為“路徑丟棄”。這是訓練大型深層模型，如Vision transformer（ViT）的一種十分有效的正則化方法。

**與生物學的聯繫**
雖然最初的殘差網絡研究並未受生物學啟發，但後來的研究卻發現殘差網絡與生物學有關。
2023年《科學》雜誌上發表的一項研究展示了果蠅幼蟲大腦的完整神經連接組。 這項研究發現了類似於人工神經網絡中如ResNet一樣的跳躍連接。

**參考文獻 ==