殘差神經網絡Residual Neural Network,簡稱ResNet[1]屬於深度學習模型的一種,其核心在於讓網絡的每一層不直接學習預期輸出,而是學習與輸入之間的殘差關係。這種網絡通過添加「跳躍連接」,即跳過某些網絡層的連接來實現身份對映,再與網絡層的輸出相加合併。其運作機制與高速神經網絡英語Highway network類似,通過極大的正偏置權重來打開「門控」。[2] 這一設計使得擁有幾十上百層的深度學習模型可以更易於訓練,增加模型深度時還能保持甚至提高準確度。所謂的「殘差連接」即「直連跳過」,這一概念也被應用於1997年的長短期記憶模型LSTM、[3] Transformer模型(比如BERTGPT系列,ChatGPT等)、AlphaGo ZeroAlphaStar英語AlphaStar (software)以及AlphaFold等。

在殘差神經網絡中的一個殘差塊里,殘差連接跳過了兩個網絡層。

殘差神經網絡由何愷明、張祥雨、任少卿和孫劍開發,這一成果在2015年的ImageNet大規模視覺辨識挑戰賽中奪冠。[4][5]

基本原理

背景介紹

2012年,針對ImageNet競賽開發的AlexNet模型是一個包含8層的卷積神經網絡。到了2014年,牛津大學的視覺幾何組(VGG)通過疊加3x3卷積層將網絡深度增加到了19層。[6] 但是,層級的增加卻導致訓練精度的迅速下降,[7] 這種現象被稱為「效能退化」問題。[1]

理論上,如果一個更深的網絡僅僅是通過在一個較淺網絡的基礎上增加額外層來構建的,那麼這個更深的網絡不應該比其較淺的網絡有更高的訓練損失。[1] 如果這些額外層具有身份對映的能力,那麼更深的網絡應該能夠實現與其較淺網絡相同的功能。但這裏存在一個假設,即最佳化器不能有效地將這些參數化的網絡層調整為身份對映。

殘差學習

在多層神經網絡模型里,設想一個包含若干層的子網絡絡。這個子網絡絡的函數用來表示,其中是子網絡絡的輸入。殘差學習是通過重新設定這個子網絡絡的參數,讓參數層表達一個殘差函數。因此,這個子網絡絡的輸出可以表示為:

這一原理同樣適用於1997年提出的長短期記憶LSTM單元,[3]隨時間反向傳播英語Backpropagation through time里計算,簡化為

函數常通過矩陣乘法實現,並結合啟用功能以及規範化操作(如批次規範化英語Batch normalization或層規範化)。

這類子網絡絡被稱作「殘差塊」。[1] 通過疊加這樣的殘差塊,形成深度殘差網絡。

在""公式中的""操作是通過一個相當於恆等對映的跳躍連接來完成,它將殘差塊的輸入直接與輸出連接。在隨後的研究中,這種連接常被稱作「殘差連接」。[8]

訊號傳遞

身份對映的引入有利於訊號在前向傳播路徑和反向傳播路徑中的傳遞。[9]

向前傳播

如果第個殘差塊的輸出是第個殘差塊的輸入(這裏假設塊與塊之間沒有啟用功能),可以得到:[9]

若遞歸應用此公式,例如,,可以推導出:

這裏表示任意後續殘差塊的索引(比如處於最末尾的塊),代表任意靠前的塊對應的索引。該公式說明了總有一個訊號能夠直接從淺層塊傳遞到深層塊

反向傳播

殘差學習的公式還在一定程度上緩解了梯度消失問題。然而,梯度消失並不是導致效能退化問題的根源,因為通過引入規範化層(如批次規範化)可在一定程度上解決此問題。根據上面的前向傳播過程,對進行求導,可以得到:[9]

這裏 是最小化損失函數。以上表明,淺層的梯度計算總會直接加上一個項。因此,由於額外項的存在,即使的梯度很小,總梯度也不會消失。

殘差塊

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

基本殘差塊

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

瓶頸殘差塊

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

預啟用殘差塊

預啟用殘差塊[9]在應用殘差函數之前,先使用啟用功能,如非線性和規範化的處理。預啟用殘差塊的計算可以表述為:

這裏的可以是如線性整流函數等任意非線性啟用或歸一化操作。這種設計減少了殘差塊間非恆等對映的數量,被用於訓練200層到1000多層的模型。[9]

GPT-2開始,Transformer塊常被用於預啟用塊,這在Transformer模型的相關文獻中被稱為「預規範化」。[10]

Transformer塊

Thumb
原始GPT模型採用的Transformer架構是由兩種類型的殘差塊構成:一個是多頭注意力塊,另一個是前饋的多層感知器(MLP)塊。這種設計通過結合兩個功能強大的殘差塊,使得Transformer能夠高效地處理數據並學習複雜的特徵,其中每個殘差塊都利用殘差連接來促使訊號在網絡深層之間的流動以及更有效的進行梯度回傳,克服了深度模型訓練過程中遇到的梯度消失等問題。

Transformer塊是由兩個殘差塊組成,每個殘差塊都設有一個殘差連接。

第一個殘差塊為多頭注意力塊,使用了自注意力運算,隨後連接一個線性對映層。第二個殘差塊是一個前饋式的多層感知器(MLP)塊,這個塊在某種程度上像是一個「反向」的瓶頸塊,它通過一個線性對映層(在卷積神經網絡中相當於1x1的卷積)來擴大維度,然後通過另一個線性對映層來減少維度。

一個Transformer塊包含了四層線性對映。GPT-3模型擁有96個這樣的Transformer塊(在Transformer領域的文獻中,通常將一個Transformer塊稱作一個「Transformer層」)。因此,該模型包含了大約400層的對映層,包括Transformer塊內的96x4層,以及一些額外的層用於輸入嵌入和輸出預測。

若沒有殘差連接,訓練網絡深度極高的Transformer模型將無法取得成功。[11]

相關研究

1961年,在弗蘭克·羅森布拉特出版的書籍中介紹了一個含有跳躍連接的三層多層感知器(MLP)模型(詳見第15章,第313頁[12])。這種模型被稱作「交叉耦合系統」,其跳躍連接實際上是交叉耦合連接的一種形式。[12]

在1994年[13]和1996年[14]出版的書籍中提出了在前饋MLP模型中使用的「跳層」連接:「MLP一般允許存在多個隱藏層,並且支援從輸入直接到輸出的『跳層』連接」(詳見第261頁[13],第144頁[14]),「...這使得非線性單元能夠調整線性函數形式」(詳見第262頁[13])。這種說法其實已經暗示了非線性MLP的表現就像是在一個線性函數上加上了一個殘差函數。

塞普·霍赫賴特英語Sepp Hochreiter在1991年分析了梯度消失問題,並認為這是深度學習效果不佳的原因。[15] 為解決這一問題,長短期記憶(LSTM)網絡[3]在每個LSTM單元中引入了權重為1.0的跳躍或殘差連接,計算公式為。在隨時間反向傳播英語Backpropagation through time中,這個公式轉化為前饋神經網絡中的殘差公式,從而實現了深層迴圈神經網絡的有效訓練。2000年[16]發佈的一種LSTM版本通過「遺忘門」來調節連接,這些門的權重不再固定為1.0,而是可以學習的。在實際實驗中,遺忘門通過正偏置權重進行初始化,從而解決梯度消失問題。[16]

2015年,高速神經網絡英語Highway network[2][17]將上述原理應用於前饋神經網絡,被媒體報道稱為「首個具有數百層深度的前饋神經網絡」。[18] 原有的高速神經網絡論文[2]不僅提出了非常深的前饋網絡的基本架構,還展示了20層、50層和100層網絡的實驗結果,並提及正在進行的深達900層的實驗。50層或100層的網絡相較於它們常用的神經網絡有更低的訓練誤差,但與20層的訓練結果相比,誤差並無降低(詳見MNIST數據集中的圖1[2])。在超過19層的網絡上,並未有訓練精度的提高[2]。然而,ResNet的研究證明了多於20層以上的訓練結果同樣有效。[9] 它指出跳躍連接中的調節可能導致前向和反向傳播中訊號的消失(詳見第3節[9])。這也解釋了為什麼2000年的LSTM[16]的遺忘門要通過正偏置權重初始化為開啟狀態:只要門處於開啟狀態,它就如同1997年的LSTM。同樣,高速神經網絡如果通過強正偏置權重保持門的開啟狀態,就表現得如同ResNet一樣。現在的神經網絡(如Transformer)中使用的跳躍連接主要就是身份對映。

2016年出現的DenseNets[19]被設計為一種深層的神經網絡,旨在將每一層與其他所有層連接。DenseNets通過使用身份對映作為跳躍連接來實現這一目標。與ResNet不同,DenseNets通過拼接而非加法將層輸出與跳躍連接合併。

利用殘差網絡架構,實現了具有隨機深度的神經網絡。[20] 通過隨機丟棄一部分網絡層,讓訊號通過跳躍連接進行傳播。這種做法也被稱為「路徑丟棄」。這是訓練大型深層模型,如視覺Transformer英語Vision transformer(ViT)的一種十分有效的正則化方法。

與生物學的聯絡

雖然最初的殘差網絡研究並未受生物學啟發,但後來的研究卻發現殘差網絡與生物學有關。[21][22]

2023年《科學》雜誌上發表的一項研究展示了果蠅幼蟲大腦的完整神經連接組[23] 這項研究發現了類似於類神經網絡中如ResNet一樣的跳躍連接。

參考文獻

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.