層歸一化(Layer Normalization)
層歸一化是一種神經網路正規化技術,它在每個層級對所有神經元的激活值進行歸一化,以加速訓練並提高泛化能力。
完整說明
核心概念
層歸一化 (Layer Normalization, LN) 是一種用於深度神經網路的正規化技術。其核心思想是在每個訓練樣本的每一層,對該層的所有神經元的激活值進行歸一化。這與批次歸一化 (Batch Normalization, BN) 不同,BN 是在一個批次 (batch) 的所有樣本中,對同一神經元的激活值進行歸一化。LN 的優勢在於它不受批次大小的影響,因此在小批次大小或序列資料等情況下表現更好。
正規化的目的是為了減少內部協變異數偏移 (Internal Covariate Shift, ICS),即網路各層輸入分布的變化。ICS 會導致訓練過程不穩定,需要較小的學習率和仔細的參數初始化。通過歸一化,可以使網路的訓練更加穩定,並允許使用更大的學習率。
運作原理
層歸一化的運作原理如下:
計算均值和變異數: 對於給定的層,計算該層所有神經元激活值的均值 (mean) 和變異數 (variance)。
歸一化: 使用計算出的均值和變異數,對每個神經元的激活值進行歸一化。歸一化的公式如下:
x_normalized = (x - mean) / sqrt(variance + epsilon)
其中,
x是原始的激活值,mean是均值,variance是變異數,epsilon是一個很小的常數,用於防止除以零。縮放和平移: 對歸一化後的激活值進行縮放和平移。這一步引入了兩個可學習的參數:縮放因子 (scale)
gamma和平移因子 (bias)beta。縮放和平移的公式如下:y = gamma * x_normalized + beta
其中,
y是最終的輸出,gamma和beta是可學習的參數,它們允許網路學習到最優的激活值分布。
與批次歸一化的比較:
| 特性 | 層歸一化 (Layer Normalization) | 批次歸一化 (Batch Normalization) |
|---|---|---|
| 歸一化維度 | 單個樣本的層級上 | 批次中同一神經元之間 |
| 批次大小依賴性 | 無 | 有 |
| 適用場景 | 小批次、序列資料 | 大批次、圖像資料 |
實際應用
層歸一化在許多深度學習模型中都有應用,尤其是在以下場景:
- 循環神經網路 (RNN): RNN 處理序列資料,批次大小通常較小。LN 可以有效地提高 RNN 的訓練穩定性和性能。
- Transformer 模型: Transformer 模型廣泛應用於自然語言處理 (NLP) 任務,LN 是 Transformer 模型中的一個重要組成部分。
- 小批次大小訓練: 當批次大小較小時,BN 的效果會受到影響。LN 可以作為 BN 的替代方案。
- 生成對抗網路 (GAN): GAN 的訓練過程通常不穩定,LN 可以幫助穩定 GAN 的訓練。
程式碼範例 (PyTorch):
python import torch import torch.nn as nn
class MyModel(nn.Module): def init(self, input_size, hidden_size, output_size): super(MyModel, self).init() self.linear1 = nn.Linear(input_size, hidden_size) self.layer_norm = nn.LayerNorm(hidden_size) self.linear2 = nn.Linear(hidden_size, output_size)
def forward(self, x):
x = self.linear1(x)
x = self.layer_norm(x)
x = torch.relu(x)
x = self.linear2(x)
return x
Example usage
input_size = 10 hidden_size = 20 output_size = 5
model = MyModel(input_size, hidden_size, output_size)
input_tensor = torch.randn(32, input_size) # Batch size of 32 output_tensor = model(input_tensor)
print(output_tensor.shape)
常見誤區
- LN 和 BN 的選擇: 很多人認為 LN 和 BN 是互斥的,只能選擇其中一個。實際上,在某些情況下,可以同時使用 LN 和 BN,以獲得更好的效果。例如,可以在 RNN 中使用 LN,同時在卷積神經網路 (CNN) 中使用 BN。
- LN 的計算成本: LN 的計算成本相對較低,因為它是在每個樣本的層級上進行計算,而不是在整個批次上。然而,當層的維度非常大時,LN 的計算成本也會增加。
- LN 的適用性: LN 並非適用於所有情況。在某些情況下,BN 的效果可能更好。例如,在圖像分類任務中,BN 通常比 LN 表現更好。需要根據具體任務和資料集進行選擇。
- LN 的參數初始化: LN 中的縮放因子
gamma和平移因子beta需要進行初始化。通常,gamma初始化為 1,beta初始化為 0。然而,在某些情況下,其他的初始化方法可能更有效。 - LN 的訓練: LN 的訓練需要使用合適的學習率和優化器。通常,可以使用較大的學習率和 Adam 優化器。
總之,層歸一化是一種有效的正規化技術,可以提高深度神經網路的訓練穩定性和性能。然而,需要根據具體任務和資料集進行選擇和調整。
相關術語
常見問題
延伸學習
延伸學習
想看 層歸一化 的完整影片教學?前往 美第奇 AI 學院