ニューラルネットワークの学習を安定させる「正規化」には、いくつかの流儀があります。この記事では、TransformerやRNNで標準的に使われる「レイヤー正規化」を取り上げ、有名なバッチ正規化と何が違うのかを丁寧に解説します。
📖 ひと言でいうと
レイヤー正規化(Layer Normalization)とは、ニューラルネットワークの各層の出力を「サンプル1つごとに」平均0・分散1へそろえる正規化手法です。ミニバッチ内の他のサンプルを一切使わない点が最大の特徴です。
例えるなら、テストの成績を「クラス全員の平均」と比べて調整するのがバッチ正規化、「自分の全科目の平均」と比べて調整するのがレイヤー正規化です。自分の中だけで基準を作るので、クラスの人数(バッチサイズ)が何人でも、たとえ1人でも同じように計算できます。厳密には、1つのサンプルについて層内の全ニューロンの出力から平均と分散を求め、それで各出力をそろえる操作です。
🖼 1枚でわかるレイヤー正規化
📘 公式テキストの説明
ニューラルネットワークの各層における出力を正規化する手法で、主にリカレントニューラルネットワーク(RNN)やトランスフォーマー(Transformer)などのモデルで用いられる。この手法は、各層の出力を平均0、分散1に正規化することで、学習の安定性と収束速度を向上させる効果がある。レイヤー正規化は、バッチ正規化(Batch Normalization)と異なり、ミニバッチ全体ではなく、各サンプルごとに正規化を行う。これにより、バッチサイズに依存せず、特に系列データや可変長の入力を扱うモデルに適している。具体的には、各サンプルの全てのニューロンの出力に対して平均と分散を計算し、それらを用いて正規化を行う。このプロセスにより、内部共変量シフト(Internal Covariate Shift)を抑制し、学習の効率化とモデルの汎化性能の向上が期待できる。レイヤー正規化は、特にトランスフォーマーモデルにおいて重要な役割を果たしており、自己注意機構(Self-Attention)やフィードフォワードネットワークの各層で適用されている。これにより、深いネットワークにおける勾配消失問題の緩和や、学習の安定性向上に寄与している。
ポイントは3つに絞れます。①「平均0・分散1にそろえて学習を安定させる」という目的はバッチ正規化と共通、②ただし統計量を計算する範囲が「ミニバッチ全体」ではなく「サンプル1つの中の全ニューロン」、③その結果バッチサイズに依存しなくなり、RNNやTransformerのような系列データ向きになる、という流れです。
「内部共変量シフト」とは、学習が進むにつれて各層への入力の分布がずれ続けてしまう現象を指します。分布がずれると後ろの層はそのたびに調整をやり直すことになり学習が不安定になるため、正規化で分布をそろえてこれを抑える、というのが正規化層に共通する考え方です。
🔍 しっかり理解する
「どの範囲で平均を取るか」がすべて
正規化層のファミリー(バッチ正規化・レイヤー正規化・インスタンス正規化・グループ正規化)は、やること自体は全部同じで「平均0・分散1にそろえる」だけです。違いはただ一点、平均と分散を計算する範囲です。
- バッチ正規化: ミニバッチ内の全サンプルを横断して、特徴(チャネル)ごとに計算
- レイヤー正規化: サンプル1つの中の全ニューロン(全特徴)にわたって計算
- ミニバッチ内の複数サンプルで統計量を計算
- バッチサイズが小さいと統計量が不安定に
- 推論時は学習時に貯めた移動平均を使う
- CNNの画像分類で定番
- サンプル1つの全ニューロンで統計量を計算
- バッチサイズ1でも同じ計算ができる
- 学習時と推論時で計算が変わらない
- RNN・Transformerで定番
なぜRNNやTransformerと相性が良いのか
RNNは文章のような可変長の系列を扱います。バッチ正規化を系列に適用しようとすると、時刻ごとにバッチ方向の統計量を管理する必要があり、サンプルごとに長さが違うと後ろの時刻ほどデータが足りなくなる、という扱いにくさがあります。レイヤー正規化はサンプル単体で完結するため、系列の長さが何であっても各時刻で同じように適用でき、この問題が起きません。
Transformerでも事情は同じで、Self-Attentionやフィードフォワードネットワークの各層にレイヤー正規化が組み込まれています。残差接続と組み合わせて各ブロックの出力をそろえることで、層を深く積んでも勾配消失が起きにくく、学習が安定します。BERTやGPTのような大規模言語モデルの内部でも、正規化層として使われているのはレイヤー正規化です。
バッチサイズに依存しないことの実務的な価値
バッチ正規化は、バッチサイズが小さいと計算する平均・分散がたまたまのサンプルに引きずられて不安定になります。一方レイヤー正規化は1サンプルで完結するので、メモリ制約でバッチサイズを小さくせざるを得ない大規模モデルの学習や、1件ずつ処理する推論でも性質が変わりません。「学習時と推論時で挙動が同じ」という点も、移動平均の管理が必要なバッチ正規化に対する実装上の利点です。
💡 具体例で考える
ChatGPTなどの土台であるTransformer型の言語モデルを思い浮かべてください。入力される文は「こんにちは」の5トークンだったり、数千トークンの長文だったりと長さがばらばらです。しかもモデルが巨大なため、GPUメモリの都合でバッチサイズを大きく取れないことも珍しくありません。ここでバッチ正規化を使うと統計量が安定しませんが、レイヤー正規化なら各トークンの表現ベクトル(たとえば768次元)の中だけで平均・分散を取ってそろえるため、文の長さにもバッチサイズにも影響されません。Transformerの原論文(2017年)の時点からレイヤー正規化が採用されているのは、まさにこの性質のためです。
⚠️ よくある誤解・紛らわしい用語
- 「バッチ正規化の改良版・上位互換」ではない — 計算する軸が違うだけの別の手法です。CNNの画像分類では今もバッチ正規化が広く使われており、タスクとモデル構造で使い分けます。
- インスタンス正規化との違い — インスタンス正規化は「1サンプルの1チャネルごと」に空間方向だけで正規化します。レイヤー正規化は「1サンプルの全チャネル(全ニューロン)まとめて」です。1サンプルで完結する点は共通なので混同注意です。
- 正規化(Normalization)と標準化・前処理の正規化の混同 — 入力データを前処理で0〜1に収める正規化とは別物です。レイヤー正規化は「ネットワークの中間層の出力」を学習中に毎回そろえる層(演算)です。
- 勾配消失を「解決する」わけではない — 公式テキストの表現どおり「緩和・寄与」です。深いネットワークを学習可能にするのは残差接続などとの合わせ技です。
📝 試験でのポイント
- 「ミニバッチ全体ではなく各サンプルごとに正規化する」「バッチサイズに依存しない」がレイヤー正規化を指す典型的な言い回しです。
- 「RNN・Transformerで主に使われる正規化はどれか」という形で、バッチ正規化(CNN・ミニバッチ単位)との対比で問われやすいです。
- 4つの正規化(バッチ/レイヤー/インスタンス/グループ)の説明文を並べ、どれがどれかを選ばせる形式が想定されます。「平均・分散を計算する範囲」に注目して読み分けましょう。
- 目的(学習の安定化・収束速度向上・内部共変量シフトの抑制)は正規化層に共通なので、目的だけでは区別できない点に注意してください。
📚 まとめ
- レイヤー正規化は、各層の出力を「サンプル1つの全ニューロン」の統計量で平均0・分散1にそろえる手法です。
- バッチ正規化との違いは統計量を計算する範囲で、バッチサイズに依存しないことが最大の強みです。
- そのため可変長の系列データを扱うRNN、そしてTransformerの標準部品として使われています。
- 学習の安定化・収束の高速化・内部共変量シフトの抑制という目的は他の正規化層と共通です。
