什麼是 層歸一化(Layer Normalization)?

層歸一化是一種神經網路正規化技術,它在每個層級對所有神經元的激活值進行歸一化,以加速訓練並提高泛化能力。

核心概念

層歸一化 (Layer Normalization, LN) 是一種用於深度神經網路的正規化技術。其核心思想是在每個訓練樣本的每一層,對該層的所有神經元的激活值進行歸一化。這與批次歸一化 (Batch Normalization, BN) 不同,BN 是在一個批次 (batch) 的所有樣本中,對同一神經元的激活值進行歸一化。LN 的優勢在於它不受批次大小的影響,因此在小批次大小或序列資料等情況下表現更好。

正規化的目的是為了減少內部協變異數偏移 (Internal Covariate Shift, ICS),即網路各層輸入分布的變化。ICS 會導致訓練過程不穩定,需要較小的學習率和仔細的參數初始化。通過歸一化,可以使網路的訓練更加穩定,並允許使用更大的學習率。

運作原理

層歸一化的運作原理如下:

  1. 計算均值和變異數: 對於給定的層,計算該層所有神經元激活值的均值 (mean) 和變異數 (variance)。

  2. 歸一化: 使用計算出的均值和變異數,對每個神經元的激活值進行歸一化。歸一化的公式如下:

    x_normalized = (x - mean) / sqrt(variance + epsilon)

    其中,x 是原始的激活值,mean 是均值,variance 是變異數,epsilon 是一個很小的常數,用於防止除以零。

  3. 縮放和平移: 對歸一化後的激活值進行縮放和平移。這一步引入了兩個可學習的參數:縮放因子 (scale) gamma 和平移因子 (bias) beta。縮放和平移的公式如下:

    y = gamma * x_normalized + beta

    其中,y 是最終的輸出,gammabeta 是可學習的參數,它們允許網路學習到最優的激活值分布。

與批次歸一化的比較:

特性 層歸一化 (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 學院