1 レイヤ正規化の基本概念

1.1 定義と目的

レイヤ正規化は、深層学習におけるニューラルネットワークの訓練を安定化させるために設計された正規化手法である。各サンプルについて、その層の全ニューロンの出力値から平均分散を計算し、これらを用いて出力を正規化する。目的は、内部共変量シフト(内部の分布の変化)を抑制し、勾配の流れを安定化させることで、学習率の設定を容易にし、収束を加速させることにある。

1.2 バッチ正規化との違い

バッチ正規化がミニバッチ全体の統計量(平均と分散)を利用するのに対し、レイヤ正規化は個々のサンプル内の統計量を用いる。このため、レイヤ正規化はバッチサイズに依存せず、バッチサイズが1の場合でも適用可能である。また、バッチ正規化がCNNなどのフィードフォワードネットワークで効果的であるのに対し、レイヤ正規化は系列長が可変であるRNNやTransformerに対して特に有用である。これは、バッチ正規化が系列方向の統計量を適切に扱えない場合があるためである。

2 数学的定式化

2.1 正規化の計算手順

レイヤ正規化は以下の手順で計算される。ある層への入力を \( x = (x_1, x_2, \dots, x_H) \)(\( H \) はユニット数)とする。まず、入力の平均 \( \mu \) と分散 \( \sigma^2 \) を計算する。

\[ \mu = \frac{1}{H} \sum_{i=1}^{H} x_i \] \[ \sigma^2 = \frac{1}{H} \sum_{i=1}^{H} (x_i - \mu)^2 \]

次に、各要素を正規化する。

\[ \hat{x}_i = \frac{x_i - \mu}{\sqrt{\sigma^2 + \epsilon}} \]

ここで \( \epsilon \) はゼロ除算を防ぐための微小な定数である。

2.2 学習可能なパラメータ利得バイアス

正規化後、学習可能なパラメータである利得 \( \gamma \) とバイアス \( \beta \) を用いてアフィン変換を施す。

\[ y_i = \gamma_i \hat{x}_i + \beta_i \]

これにより、ネットワークは正規化された表現に対してスケールとシフトを学習できる。\( \gamma \) と \( \beta \) は各ユニットごとに定義され、勾配降下法によって更新される。

3 実装と応用

3.1 主要な深層学習フレームワークでの実装

3.1.1 PyTorch

PyTorchでは、torch.nn.LayerNorm モジュールとして提供される。引数に正規化される特徴量のサイズを指定する。例えば、nn.LayerNorm(128) は128次元の特徴量を正規化する。系列データに対しては、最後の次元が正規化対象となる。

import torch.nn as nn
layer_norm = nn.LayerNorm(normalized_shape=128)
output = layer_norm(input_tensor)

3.1.2 TensorFlow

TensorFlowでは、tf.keras.layers.LayerNormalization として実装されている。同様に正規化する軸を指定でき、デフォルトでは最後の軸を正規化する。

import tensorflow as tf
layer_norm = tf.keras.layers.LayerNormalization(axis=-1)
output = layer_norm(input_tensor)

3.2 代表的な応用分野

3.2.1 自然言語処理(Transformer、RNN)

レイヤ正規化は、Transformerアーキテクチャにおいての中核的な構成要素である。Transformerの各サブレイヤ(マルチヘッドアテンション、フィードフォワードネットワーク)の後にレイヤ正規化が適用され、訓練の安定化に寄与する。また、LSTMGRUなどのRNNにおいても、各タイムステップでの隠れ状態の正規化に用いられる。

3.2.2 音声認識

音声認識モデルでは、系列長が長くバッチサイズの変動が大きいため、レイヤ正規化が有効である。特に、Connectionist Temporal Classification(CTC)と組み合わせたRNNモデルや、Transformerベースの音声認識モデルで広く利用される。

3.2.3 強化学習

強化学習においても、ポリシーネットワークやバリューネットワークの訓練にレイヤ正規化が使われる。環境によってはバッチサイズが小さい場合があり、バッチ正規化よりも安定した学習が可能となる。

4 レイヤ正規化の変種と拡張

4.1 RMS正規化

RMS正規化はレイヤ正規化の簡略版であり、平均を考慮せず、二乗平均平方根(RMS)のみで正規化する。すなわち、\( y_i = \frac{x_i}{\sqrt{\frac{1}{H}\sum_{j=1}^{H}x_j^2 + \epsilon}} \) と計算される。学習可能な利得パラメータは保持される場合がある。計算コストが低く、Transformerなどのモデルでレイヤ正規化の代替として使われることがある。

4.2 インスタンス正規化との比較

インスタンス正規化は、画像などの2次元データにおいて、各サンプル・各チャンネルごとに統計量を計算する。レイヤ正規化は、各サンプル・全チャンネルにわたって統計量を計算する点が異なる。インスタンス正規化はスタイル変換などで、レイヤ正規化は系列データで主に使われる。

4.3 グループ正規化との関連

グループ正規化は、チャンネルをグループに分割し、各グループ内で正規化を行う。レイヤ正規化はグループ数を1とした場合に相当する。グループ正規化は、バッチサイズが小さいCNNで、レイヤ正規化の中間的なアプローチとして利用される。

5 利点と限界

5.1 訓練の安定化と収束速度の向上

レイヤ正規化は、各層の出力の分布を安定させることで、勾配の爆発や消失を抑制し、学習率の選択に対するロバスト性を高める。結果として、モデルの収束速度が向上する。

5.2 バッチサイズ非依存性

バッチ正規化とは異なり、レイヤ正規化はミニバッチ内の統計量に依存しないため、バッチサイズが小さな場合や、可変長の系列データを扱う場合でも一貫した効果を発揮する。特に、オンライン学習や逐次的な推論に適している。

5.3 計算コストとメモリ使用量のトレードオフ

レイヤ正規化は、各サンプルごとに統計量を計算するため、バッチ正規化に比べて計算コストが若干高い場合がある。特に、大規模なモデルでは、各層の統計量計算がオーバーヘッドとなる。しかし、メモリ使用量はバッチ正規化と同程度であり、実用的な範囲内である。

6 関連トピック

6.1 正規化手法の歴史

初期のニューラルネットワークでは、入力データのみを正規化していたが、2015年にバッチ正規化が提案され、深層学習の訓練が飛躍的に安定化した。その後、2016年にレイヤ正規化が登場し、系列データへの適用が容易になった。以降、インスタンス正規化、グループ正規化など、さまざまな正規化手法が発展している。

6.2 レイヤ正規化とドロップアウトの組み合わせ

レイヤ正規化はドロップアウトと併用されることが多い。両者を組み合わせることで、過学習の抑制と訓練の安定化を同時に達成できる。ただし、ドロップアウトの比率や正規化の順序(前後)は、モデルやタスクに応じて調整が必要な場合がある。

6.3 実践的なチューニングのコツ

レイヤ正規化を実践する際は、以下の点に注意する。まず、正規化を適用する軸や次元を正しく指定することが重要である。系列データでは通常、特徴量の次元が正規化対象となる。また、利得とバイアスの初期値は通常1と0に設定するが、特定のタスクでは他の初期値が有効な場合もある。学習率は、バッチ正規化を使用する場合よりも大きく設定できることが多いが、タスクに応じて調整する。