Keras 3 API 文件 / 層 API / 正規化層 / LayerNormalization 層

LayerNormalization 層

[原始碼]

LayerNormalization 類別

keras.layers.LayerNormalization(
    axis=-1,
    epsilon=0.001,
    center=True,
    scale=True,
    rms_scaling=False,
    beta_initializer="zeros",
    gamma_initializer="ones",
    beta_regularizer=None,
    gamma_regularizer=None,
    beta_constraint=None,
    gamma_constraint=None,
    **kwargs
)

層正規化層 (Ba et al., 2016)。

獨立地正規化批次中每個給定範例的前一層的激活,而不是像批次正規化那樣跨批次正規化。也就是說,應用一個轉換,使每個範例內的平均激活值接近 0,並且激活標準差接近 1。

如果啟用 scalecenter,則該層將通過一個可訓練的變數 gamma 廣播來縮放正規化的輸出,並通過一個可訓練的變數 beta 廣播來居中輸出。gamma 預設為全 1 張量,而 beta 預設為全 0 張量,因此在訓練開始之前,居中和縮放不會產生任何影響。

因此,在啟用縮放和居中的情況下,正規化方程式如下:

假設一個小批次的的中間激活為 inputs

對於 inputs 中具有 k 個特徵的每個樣本 x_i,我們計算樣本的平均值和變異數:

mean_i = sum(x_i[j] for j in range(k)) / k
var_i = sum((x_i[j] - mean_i) ** 2 for j in range(k)) / k

然後計算正規化的 x_i_normalized,包含一個小的因子 epsilon 以確保數值穩定性。

x_i_normalized = (x_i - mean_i) / sqrt(var_i + epsilon)

最後,x_i_normalized 通過 gammabeta 進行線性轉換,這兩個都是學習的參數:

output_i = x_i_normalized * gamma + beta

gammabeta 將跨越 inputsaxis 指定的軸,並且輸入的這部分的形狀必須完全定義。

例如:

>>> layer = keras.layers.LayerNormalization(axis=[1, 2, 3])
>>> layer.build([5, 20, 30, 40])
>>> print(layer.beta.shape)
(20, 30, 40)
>>> print(layer.gamma.shape)
(20, 30, 40)

請注意,層正規化的其他實作可能會選擇在與正規化軸不同的軸上定義 gammabeta。例如,群組正規化 (Group Normalization) (Wu et al. 2018) 當群組大小為 1 時,對應於跨高度、寬度和通道進行正規化,並且 gammabeta 僅跨通道維度的層正規化。因此,此層正規化實作將不符合群組大小設定為 1 的群組正規化層。

參數

  • axis: 整數或列表/元組。要正規化的軸或多個軸。通常,這是特徵軸/多個軸。未選取的軸通常是批次軸/多個軸。-1 是輸入中的最後一個維度。預設為 -1
  • epsilon: 加到變異數的小浮點數,以避免除以零。預設為 1e-3。
  • center: 如果為 True,則將偏移量 beta 加到正規化張量。如果為 False,則忽略 beta。預設為 True
  • scale: 如果為 True,則乘以 gamma。如果為 False,則不使用 gamma。當下一層是線性時 (例如,nn.relu),可以停用此功能,因為縮放將由下一層完成。預設為 True
  • rms_scaling: 如果為 True,則忽略 centerscale,並且輸入將通過 gamma 以及所有輸入平方的平方根的倒數進行縮放。這是一種近似且速度更快的方法,避免了計算輸入的平均值。
  • beta_initializer: beta 權重的初始化器。預設為零。
  • gamma_initializer: gamma 權重的初始化器。預設為全 1。
  • beta_regularizer: beta 權重的可選正規化器。預設為 None。
  • gamma_regularizer: gamma 權重的可選正規化器。預設為 None。
  • beta_constraint: beta 權重的可選約束。預設為 None。
  • gamma_constraint: gamma 權重的可選約束。預設為 None。
  • **kwargs: 基礎層的關鍵字參數 (例如,namedtype)。

參考文獻