Layer Normalizationとは
LayerNorm / 層正規化
各サンプルの特徴量方向に平均と分散を揃えることで、ニューラルネットワークの学習を安定させる正規化手法
ひとことで言うと
AIの各層を通るたびに数値のばらつきが暴れないよう整える、学習を安定させるための調整。
概要
Layer Normalizationは、ニューラルネットワークのある層の出力を、同じサンプル内の全特徴量にわたって平均0・分散1になるよう正規化したうえで、学習可能なスケール・シフトパラメータで調整する正規化手法。 ミニバッチ内の複数サンプルにまたがって統計量を計算するBatch Normalizationとは異なり、1つのサンプル内で完結して統計量を計算するため、バッチサイズに依存せず、系列長が可変な自然言語処理タスクとも相性がよい。 各層の出力スケールを安定させることで、層を深く重ねた際の勾配消失・爆発を防ぎ、学習率を大きく設定しても学習が発散しにくくなる。 Transformerの各層(Self-Attention層・フィードフォワード層)は残差接続とLayer Normalizationを組み合わせた構造を持つのが標準的であり、LLMを含む多くのTransformerベースモデルに不可欠な構成要素となっている。
背景
Batch Normalizationは画像認識で大きな成功を収めたが、バッチサイズが小さい場合や、系列長が可変で1件ずつ処理することが多いRNN・Transformerでは、統計量の推定が不安定になりやすいという課題があった。 Layer Normalizationは、バッチ方向ではなく特徴量方向に統計量を計算することで、バッチサイズや系列長に依存しない安定した正規化を実現するために考案された。
歴史
2016年: Ba、Kiros、Hintonが論文「Layer Normalization」を発表。 2017年: TransformerがLayer Normalizationを標準構成要素として採用し、以降のNLPモデルで広く使われるように。 2020年代: 正規化を各層の前に適用するPre-LN構成が、学習安定性の面でPost-LN構成より優れるとされ、多くの大規模モデルで採用。
アーキテクチャ
ある層の出力ベクトル(1サンプルあたりの全特徴量)について平均と分散を計算し、平均を引いて標準偏差で割ることにより正規化する。 正規化後の値に、学習可能なスケールパラメータを掛けシフトパラメータを加えることで、正規化によって失われた表現力を補う。 Transformerでは、各サブレイヤー(Attention・フィードフォワード)の前に正規化を適用してから残差接続で入力を加算するPre-LN構成が広く採用されている。
コード例
PyTorchでのLayer Normalization
import torch
import torch.nn as nn
layer_norm = nn.LayerNorm(normalized_shape=512)
x = torch.randn(8, 10, 512) # (batch, seq_len, hidden_dim)
out = layer_norm(x)
print(out.mean(-1), out.std(-1)) # 各サンプルの特徴量方向でほぼ平均0・標準偏差1利点
欠点
- Batch Normalizationと比べて、画像認識など特定のタスクでは効果が劣ることもある
- 正規化の位置をPre-LNとPost-LNのどちらにするかで学習の安定性や最終的な性能が変わり、設計上の考慮が必要
- 計算量がわずかに増加するため、非常に大規模なモデルでは無視できないオーバーヘッドになることがある
比較
- 残差接続 — Layer NormalizationはTransformerにおいて残差接続とセットで各層に組み込まれる
- Transformer — Layer NormalizationはTransformerの標準的な構成要素として、Attention層・フィードフォワード層の安定化に使われる
- ドロップアウト — Layer NormalizationとDropoutはいずれも学習を安定させ過学習を抑える技術だが、アプローチと目的が異なる
関連用語
よくある質問
Layer NormalizationとBatch Normalizationの違いは?
Batch Normalizationはミニバッチ内の複数サンプルにまたがって統計量を計算するのに対し、Layer Normalizationは1サンプル内の全特徴量で統計量を計算する。この違いにより、Layer Normalizationはバッチサイズや系列長に依存せず安定して機能する。
Pre-LNとPost-LNの違いは?
Post-LNは各サブレイヤーの残差接続後に正規化を適用する元々のTransformer構成、Pre-LNは各サブレイヤーへの入力前に正規化を適用する構成。Pre-LNの方が深いモデルでも学習が安定しやすいとされ、近年の大規模モデルで広く採用されている。
参考文献
- Research PaperLayer Normalization