Pre-Norm と Post-Norm は、Transformer アーキテクチャにおける正規化レイヤー(LayerNorm / RMSNorm)の配置パターンを指す。Pre-Norm は残差接続の入力側に、Post-Norm は出力側に正規化を配置する。Pre-Norm は学習の安定性に優れ、Post-Norm は最終的な精度でわずかに優れるとされ、2026年現在の主要 LLM の大半は Pre-Norm を採用している。
Pre-Norm と Post-Norm は、Transformer ブロック内での正規化レイヤーの配置位置の違いを指す設計選択であり、大規模言語モデル(LLM)の学習安定性・最終精度・収束速度に大きな影響を与える。結論として、2026年現在の LLM 開発では Pre-Norm が事実上の標準であるが、Post-Norm の精度優位を活かす研究(DeepNorm など)も進んでいる。
Transformer アーキテクチャには、各ブロック内に Self-Attention と Feed-Forward Network(FFN)の2つのサブレイヤーがあり、それぞれに残差接続(Residual Connection)と正規化レイヤー(Normalization Layer)が組み合わされている。この正規化レイヤーをサブレイヤーの「前」に置くか「後」に置くかが、Pre-Norm と Post-Norm の本質的な違いである。
Post-Norm(オリジナル Transformer、2017):
x_out = LayerNorm(x + SubLayer(x))
正規化はサブレイヤーの出力と残差を加算した「後」に適用される。2017年の「Attention Is All You Need」論文で採用されたオリジナルの配置である。
Pre-Norm(GPT-2 以降、2019〜):
x_out = x + SubLayer(LayerNorm(x))
正規化はサブレイヤーに入力する「前」に適用される。残差接続は正規化を経由せずに直接加算される。
この配置の違いは一見些細に見えるが、深いネットワークの学習ダイナミクスに根本的な影響を与える。Pre-Norm が主流になった背景には、GPT-2(2019年)の開発時に Post-Norm の深層モデルで学習が不安定になる問題が観察され、Pre-Norm への切り替えによって解決されたという実務的な経緯がある。
Pre-Norm と Post-Norm の学習安定性の差は、逆伝播時の勾配伝播経路の違いに起因する。
Post-Norm の勾配伝播:
Post-Norm では、残差パスが LayerNorm を通過するため、勾配は LayerNorm のヤコビアン(微分行列)を経由して伝播する。LayerNorm のヤコビアンは入力に依存する非線形変換であり、深いネットワークでは層を経るごとに勾配が増幅または減衰する「勾配爆発/消失」が起きやすい。
N層の Post-Norm Transformer では、入力からの勾配は N 個の LayerNorm ヤコビアンの積を含むため、N が大きいほど勾配の分散が指数的に増大する。
Pre-Norm の勾配伝播:
Pre-Norm では、残差パスが LayerNorm を通過しない(x がそのまま加算される)。したがって、逆伝播時の勾配は残差パスを通じて直接伝播でき、LayerNorm のヤコビアンの影響を受けない。これは ResNet の残差学習と同じメカニズムであり、理論的には任意の深さで勾配が安定する。
| 特性 | Pre-Norm | Post-Norm |
|---|---|---|
| 残差パスの勾配 | 直接伝播(LayerNorm を経由しない) | LayerNorm のヤコビアン経由 |
| 勾配安定性 | 高い(層数に依存しない) | 低い(深くなるほど不安定) |
| 学習率感度 | 低い(広い範囲で安定) | 高い(慎重な設定が必要) |
| ウォームアップ必要性 | 少ない | 多い(特に深いモデル) |
| 理論的最大深度 | 実質無制限 | ~24層程度(DeepNorm なし) |
Pre-Norm と Post-Norm では、最終出力のスケール特性も異なる。
Post-Norm: 各層の出力が LayerNorm で正規化されるため、全層で出力のスケールがほぼ一定(平均0、分散1)に保たれる。これにより、全層が均等に出力に寄与する。
Pre-Norm: 残差パスに正規化がないため、層が深くなるにつれて残差の累積により出力のスケールが単調に増加する。これは、浅い層の影響が深い層に比べて相対的に小さくなることを意味し、深い層ほど出力への寄与が大きくなる。一部の研究では、この特性が「有効深度」の低下を引き起こし、全てのパラメータが均等に活用されないという問題が指摘されている。
Pre-Norm と Post-Norm の選択は、学習安定性と最終精度のトレードオフに関わる。
| 評価軸 | Pre-Norm | Post-Norm | 備考 |
|---|---|---|---|
| 学習安定性 | ◎ | △〜× | 深いモデルで差が顕著 |
| 最終精度(同一層数) | ○ | ◎ | 0.3〜1.0 perplexity 差 |
| 収束速度 | ◎ | ○ | Pre-Norm が速い |
| 学習率の許容範囲 | ◎ | △ | Post-Norm は感度が高い |
| ウォームアップの必要性 | 低 | 高 | Post-Norm は長いウォームアップ必要 |
| 有効深度 | △ | ◎ | Post-Norm は全層を均等活用 |
| 実装の容易さ | ◎ | ◎ | 同程度 |
| 深いモデル(>48層) | ◎ | ×(DeepNorm で ◎) |
Post-Norm が最終精度で優れる理由については複数の仮説が提案されている:
Pre-Norm の安定性の優位は、より明確に理論的に説明できる:
| モデル | 公開年 | 配置 | 正規化手法 | 層数 | 備考 |
|---|---|---|---|---|---|
| Transformer(オリジナル) | 2017 | Post-Norm | LayerNorm | 6 | 論文のデフォルト |
| BERT | 2018 | Post-Norm | LayerNorm | 12/24 | エンコーダモデル |
| GPT-2 | 2019 | Pre-Norm | LayerNorm | 12〜48 | Pre-Norm 先駆 |
| T5 | 2019 | Pre-Norm | LayerNorm | 12〜24 | エンコーダ・デコーダ |
| GPT-3 | 2020 | Pre-Norm | LayerNorm | 96 | 175B パラメータ |
| PaLM | 2022 | Pre-Norm | LayerNorm | 118 | 並列 Attention+FFN |
| GLM-130B | 2022 | Post-Norm | LayerNorm + DeepNorm | 70 | DeepNorm で安定化 |
| LLaMA | 2023 | Pre-Norm | RMSNorm | 32〜80 | 現在のデファクト |
| Mistral | 2023 | Pre-Norm | RMSNorm | 32 | Sliding Window Attention |
| Gemma 2 | 2024 | Pre-Norm + Post-Norm 交互 | RMSNorm | 26〜42 | ハイブリッド配置 |
| GPT-4(推定) | 2023 | Pre-Norm(推定) | 非公開 | 非公開 | 公式未発表 |
| Claude(推定) | 2024 | Pre-Norm(推定) | 非公開 | 非公開 | 公式未発表 |
Gemma 2 は興味深い設計として、Pre-Norm と Post-Norm を交互に使用するハイブリッド配置を採用している:
x = x + PostNorm(Attention(PreNorm(x)))
x = x + PostNorm(FFN(PreNorm(x)))
これにより、Pre-Norm の安定性と Post-Norm の表現力の両方を活かすことを目指している。
Pre-Norm モデルでは、最後の Transformer ブロックの出力が正規化されていない状態になるため、出力層(言語モデルヘッド)の前に追加の正規化レイヤー(Final LayerNorm / Final RMSNorm)を配置する必要がある。これを忘れると出力のスケールが不安定になり、性能が大幅に低下する。
# Pre-Norm Transformer の典型的な構造
class PreNormTransformer(nn.Module):
def __init__(self, d_model, n_layers, n_heads):
super().__init__()
self.layers = nn.ModuleList([
PreNormBlock(d_model, n_heads) for _ in range(n_layers)
])
self.final_norm = RMSNorm(d_model) # 必須
self.lm_head = nn.Linear(d_model, vocab_size)
def forward(self, x):
for layer in self.layers:
x = layer(x)
x = self.final_norm(x) # Pre-Norm では必須
return self.lm_head(x)
Post-Norm モデルでは各層の出力が既に正規化されているため、Final Norm は不要(追加しても害はないが効果も薄い)である。
大規模モデルのテンソル並列学習では、正規化の配置がAllReduce通信のタイミングに影響する。Pre-Norm の場合、正規化はサブレイヤーの前(つまりテンソル並列の分割前)に適用されるため、AllReduce 前に完全な正規化統計量が必要であり、追加の通信が発生する可能性がある。Megatron-LM などのフレームワークでは、このオーバーヘッドを最小化するための最適化が実装されている。
A: 2026年の実務では Pre-Norm + RMSNorm を選ぶべきである。理由は以下の通り:(1)学習の安定性が高く、ハイパーパラメータのチューニングが容易、(2)LLaMA 以降の大量のオープンソース実装・ツール・知見が蓄積されており、エコシステムが充実、(3)RMSNorm との組み合わせで計算効率が最大化される、(4)Post-Norm の精度優位(0.3〜1.0 perplexity)は、Pre-Norm の安定性と開発効率のメリットに比べて小さい。Post-Norm(+ DeepNorm)を検討するのは、100層以上の超深層モデルを設計し、かつ最終精度の微小な改善が重要な研究目的の場合に限られる。
A: 2024年の研究(CogView, DeepMind の分析)によると、Pre-Norm の大規模モデルでは最終数層のパラメータが出力に支配的に寄与し、浅い層の「有効な寄与度」が低下する現象が確認されている。しかし、実際のベンチマーク性能への影響は限定的であり、LLaMA 3(80層)や GPT-4 のような超大規模モデルが Pre-Norm で優れた性能を達成していることから、「理論的に問題はあるが、実務的には許容範囲」というのが現在のコンセンサスである。この問題に対する対策として、層ごとのスケーリングや Gemma 2 のハイブリッド配置が研究されている。
A: 直接の切り替えは不可能である。正規化の配置は残差の数値スケール全体に影響するため、Pre-Norm で学習した重みを Post-Norm モデルに転用すると、出力スケールの不整合により性能が壊滅的に劣化する。逆も同様である。学習の途中切り替えではなく、学習の初期段階で Pre-Norm で安定化し、途中から Post-Norm に切り替える「段階的移行」の研究が一部で行われているが、2026年時点ではまだ実用段階に達していない。
A: 注目すべきアプローチだが、2026年時点では主流になっていない。Gemma 2 はこのハイブリッド配置で良好な結果を示しているが、(1)実装の複雑さが増す、(2)既存の推論最適化ツール(vLLM, TensorRT-LLM など)が Pre-Norm のみに最適化されている、(3)後続の Gemma 4 でも同様の配置を維持しているかは未確認、といった課題がある。中長期的には、正規化の配置を層ごとに最適化する Neural Architecture Search(NAS)的なアプローチが発展する可能性がある。