- 多模態大模型:算法、應用與微調
- 劉兆峰
- 2384字
- 2024-09-11 17:37:24
1.2.3 標準化和殘差連接
1.標準化
Transformer模型的編碼器和解碼器都是6層的神經網絡,而網絡層級越多則越可能出現梯度消失和梯度爆炸的問題。對于此類問題,一般可以通過標準化等方式解決,使得模型最終能夠收斂。
神經網絡中的標準化(或稱歸一化)是一種重要的預處理步驟,它的目的是將輸入數據在傳遞至神經元之前進行平移和伸縮變換,使得數據規范化分布到一個固定的區間范圍內,通常呈標準正態分布。標準化的過程可以通過下述公式來描述:

其中,x代表輸入數據,μ和σ分別代表數據的平移參數和縮放參數,b和g是再平移和再縮放的參數。經過這種變換后,得到的數據將符合均值為b、方差為g2的分布。
深度神經網絡中的每一層都可以看作相對獨立的分類器,它們對上一層的輸出數據進行分類。然而,由于每一層輸出的數據分布都可能不同,這可能會導致內部協變量偏移(Internal Covariate Shift,ICS)的問題。隨著網絡層數的增加,這種偏移的誤差也會逐漸累積,最終可能會導致網絡的性能下降。此外,由于神經網絡的主要運算都是矩陣運算,一個向量的值經過矩陣運算后容易變得越來越大。為了防止這種情況發生,我們需要及時將數據拉回到正態分布。標準化的主要目的是保持神經網絡的穩定性。
根據標準化操作的維度不同,我們可以將其分為批標準化(Batch Normalization)和層標準化(Layer Normalization),當然也有其他標準化方式,如實例標準化(Instance Normalization)、組標準化(Group Normalization)等。無論在哪個維度上進行標準化,其本質都是讓數據在該維度上進行縮放。例如,批標準化是通過對批量大小(batch size)這個維度的標準化來穩定數據的分布,而層標準化則是通過對隱藏層大小(hidden size)這個維度的標準化來穩定某一層的數據分布,如圖1-23所示。

圖1-23 批標準化和層標準化示意
做NLP領域的任務時,每個樣本通常都是一個句子,并且句子不一定等長,有可能出現在一個小批量數據里某一個句子特別長而其他句子都很短的情況,因此用批標準化是不合理的,將直接導致最終模型的效果不理想。在Transformer模型中使用了層標準化,即在特征通道上對C、H、W(C張量為通道數,H張量為高度,W張量為寬度)進行標準化。也就是說,層標準化計算的是每一個樣本的均值和方差,這種情況下,不同的輸入樣本就有不同的均值和方差。層標準化不依賴批量的大小和輸入序列的長度,因此比較適合處理NLP領域的任務中大量文本不等長的情況。
在層標準化中,對于給定的樣本,其中N是批量大小,D是特征維度,首先可以計算每個樣本的均值和方差。

接下來可以用均值和方差對輸入進行標準化

其中ε是一個很小的正數,用來防止分母為0。最后可以得到重新縮放和偏移后的輸出

其中γ和β是可學習的參數。
層標準化的位置也有講究,分為Pre-LN、Post-LN和Sandwich-LN,其結構如圖1-24所示。顧名思義,Pre-LN就是將層標準化放在殘差連接之前,能夠讓模型的訓練更加穩定,但是模型效果略差。Post-LN則是將層標準化放在殘差連接之后,參數正則化的效果更強,雖然模型效果更好,但是可能會導致模型訓練不穩定,這是由網絡深層的梯度范式逐漸增大導致的。那么,自然而然地,我們可以想到將兩者結合起來,于是就有了Sandwich-LN,即在殘差連接之前和之后都加入層標準化。Cogview(清華大學與阿里巴巴共同研究的文生圖模型)就使用了Sandwich-LN來防止出現值爆炸的問題,但是仍然會出現訓練不穩定的問題,可能會導致訓練崩潰。

圖1-24 Pre-LN、Post-LN和Sandwich-LN的結構示意
在NLP領域發展的早期階段,例如BERT模型,由于其神經網絡層數相對較少,通常會采用Post-LN。而隨著模型的發展,Transformer結構模型開始增加更多的層數,例如GPT模型,這給訓練穩定性帶來了挑戰。因此,研究人員開始使用Pre-LN,以提高深層Transformer模型的訓練穩定性。
為了解決模型訓練不穩定的問題,論文“DeepNet: Scaling Transformers to 1000 Layers”(https://arxiv.org/abs/2203.00555)中提出了DeepNorm的方法。從論文名字就可以看出,研究者將Transformer模型擴展到了1000層,這是一個非常深的網絡。Pre-LN之所以會讓模型訓練更穩定,是因為標準化的輸出可以緩解子層(注意力機制和前饋神經網絡)中梯度消失和梯度爆炸的問題。DeepNorm其實是一種Post-LN的方案,但是在執行層標準化之前對殘差連接執行了up-scale操作,即

其中α>1,也就是說,DeepNorm會在層標準化之前以參數擴大殘差連接。DeepNorm能夠防止模型在訓練過程中出現過大范圍的參數更新,將參數的更新范圍限制在一定的常數值內,以此來讓模型的訓練過程更加穩定。
RMSNorm是一種改進的層標準化技術,在我們后續介紹的Llama 2模型中會用到,它旨在優化神經網絡的訓練穩定性和模型收斂性。該技術在論文“Root Mean Square Layer Normalization”(https://arxiv.org/abs/1910.07467)中首次提出。層標準化有助于處理輸入和權重矩陣的重新居中及重新縮放,從而提高模型的性能。然而,RMSNorm假設重新居中的性質(即減去均值的部分)并不是必要的,只需要保留重新縮放的不變性屬性即可。因此,RMSNorm摒棄了原有的層標準化中的均值項,只采用了均方根(RMS)進行標準化。
具體來說,RMSNorm的計算公式是

其中

這里的ai與原本層標準化中的輸入值x是等價的。通過這種方式,RMSNorm可以賦予模型以重新縮放的不變性和隱式學習率自適應能力,同時可以降低噪聲的影響。此外,由于RMSNorm在計算上更為簡單,因此相比于原來的層標準化技術,它能夠大大提高計算效率,減少了7%~64%的計算時間。
2.殘差連接
標準化能夠在一定程度上解決梯度消失和梯度爆炸的問題,讓模型更好地收斂,但是網絡越深,模型準確率可能越低,也有可能達到峰值之后迅速下降,這種情況被稱為網絡退化。ResNet的提出就是為了解決網絡退化的問題,也就是深層網絡的效果反而比淺層網絡的效果差的問題。它的核心思想是跳躍連接,或稱為殘差連接。如圖1-25所示,其原理是將某一層的輸入x加上它的輸出f(x)作為這一層的最后輸出,這樣至少可以保證深層網絡的效果不差于淺層網絡。

圖1-25 ResNet中的殘差連接示意
Transformer模型的編碼器和解碼器層都使用了“層標準化+殘差連接”的組合,如圖1-26所示。編碼器分為兩個部分,在通過自注意力層和前向傳播層之后,都會分別通過層標準化和殘差連接。解碼器分為三個部分,在通過自注意力層、注意力層和前向傳播層之后,也都會分別通過層標準化和殘差連接。

圖1-26 Transformer模型中的編碼器和解碼器結構示意