Transformer結構中的規范化層(層歸一化)
一、規范化層(層歸一化)介紹
-
概念
層歸一化(Layer Normalization) 是一種用于提高深度神經網絡訓練穩定性和加速收斂的技術,廣泛應用于現代深度學習模型中,尤其是在Transformer等序列建模網絡中。它通過對每一層的輸出進行歸一化處理,來緩解梯度消失或爆炸的問題,并有助于模型在訓練過程中更加穩定。
-
核心思想
層歸一化的核心思想是對每個輸入樣本在每一層內部進行標準化。具體來說,它會將輸入的特征按層(即按樣本維度的層面)進行歸一化,而不是像批歸一化(Batch Normalization)那樣按批次(即樣本的層面)進行歸一化。
層歸一化的目標是確保每個神經網絡層的輸入分布具有一致的均值和方差,這樣可以防止激活值過大或過小,導致梯度在反向傳播時出現不穩定的情況。
-
公式
假設某一層的輸入為一個向量\(x=[x_1, x_2, ..., x_d]\),其中?\(d\)是該層的特征維度。層歸一化對該層的輸入進行標準化的過程如下:
-
計算均值和方差
對輸入向量\(x?\)中的每個元素,計算其均值和方差:
- 均值: \(u = \frac{1}{d} \sum_{i=1}^{d} x_i\)
- 方差: \(\sigma^2 = \frac{1}{d} \sum_{i=1}^{d} (x_i - \mu)^2\)
-
標準化
然后,通過將每個元素減去均值并除以標準差來對輸入進行標準化,得到標準化后的值\(\hat{x}_i?\):
? \(\hat{x}_i = \frac{x_i - \mu}{\sqrt{\sigma^2} + \epsilon}?\)
其中,\(\epsilon?\)\(是一個小的常數(通常是 ?\)\(10^{-5}?\) 或 \(10^{-6}?\)),用于避免除零錯誤。
-
縮放與平移
在標準化的基礎上,層歸一化通常會引入兩個可學習的參數:縮放因子(gamma)和平移因子(beta),用于調整標準化后的輸出,以便網絡能夠學習到合適的表示。
- 縮放因子:\(\gamma \in \mathbb{R}^d?\)
- 平移因子:\(\beta \in \mathbb{R}^d\)
-
最終輸出為
? \(y_i = \gamma \hat{x}_i + \beta\)
這里,\(y_i?\)就是經過層歸一化處理后的輸出。
-
-
作用
它是所有深層網絡模型都需要的標準網絡層,因為隨著網絡層數的增加,通過多層的計算后參數可能開始出現過大或過小的情況,這樣可能會導致學習過程出現異常,模型可能收斂非常的慢. 因此都會在一定層數后接規范化層進行數值的規范化,使其特征數值在合理范圍內.
- 穩定訓練過程:層歸一化可以確保每一層的輸入分布更加穩定,避免激活值過大或過小,防止梯度消失或爆炸。
- 不依賴批次大小:層歸一化與 批歸一化(Batch Normalization) 不同,它不依賴于批次大小,而是針對單個樣本的特征進行歸一化。這意味著層歸一化在RNN和Transformer等處理變長輸入的模型中更加有效,因為這些模型的批次大小可能變化。
- 適