AI・機械学習
上級

DeepNorm(ディープノーム)

DeepNorm は、Microsoft Research が 2022年に提案した正規化手法であり、Post-Norm 配置の Transformer を 1000層以上に深くしても安定して学習できるようにするための残差スケーリング技術である。残差接続にスケーリング係数 α を掛け、初期化時に重みを係数 β で縮小することで、深いネットワークにおける勾配爆発と更新爆発を同時に抑制する。

0 回閲覧
0 いいね

DeepNorm は Post-Norm Transformer の学習を超深層(1000層以上)で安定化させる手法であり、残差接続のスケーリングと重みの初期化を理論的に導出された係数で制御することで、Pre-Norm なしでも安定した学習を実現する。2022年に Microsoft の論文「DeepNet: Scaling Transformers to 1,000 Layers」で発表され、大規模モデルの学習安定性に関する研究に大きな影響を与えた。

概要

Transformer の学習安定性に関して、Pre-Norm と Post-Norm の間には長年の議論がある。Pre-Norm は学習が安定しやすいが、Post-Norm は最終的な精度が高いことが知られている。しかし、Post-Norm は層数が増えると勾配爆発が起きやすく、深いモデルの学習が困難であった。

DeepNorm はこの問題に対する理論的に裏付けられた解決策を提供する。核心的なアイデアは、残差接続に定数 α > 1 を掛けることで残差パスの重みを増大させ、同時に各層の重み行列の初期化をスケール β で縮小して更新量を抑制するという二重のスケーリングである。

DeepNorm が注目される理由は、単なる経験的なトリックではなく、行列解析に基づく理論的導出によって α と β の最適値が決定されている点にある。具体的には、モデルの更新が収束条件(bounded update)を満たすように α と β を設計し、それにより任意の深さのネットワークで勾配と更新が発散しないことを数学的に保証している。

技術的詳細と数式

DeepNorm の適用は非常にシンプルであり、通常の Post-Norm Transformer に対して以下の2つの変更を加えるだけである。

標準的な Post-Norm Transformer の残差接続:

x_out = LayerNorm(x + F(x))

DeepNorm の残差接続:

x_out = LayerNorm(α × x + F(x))

ここで F(x) は Attention または FFN サブレイヤーの出力、α は残差スケーリング係数である。

重み初期化のスケーリング:

各サブレイヤーの重み行列 W を、通常の初期化値に β を掛けて縮小する。

W_init = β × Xavier_or_He_init(W)

α と β の導出

α と β の値はモデルの深さ N(デコーダ層数)とサブレイヤーの構造に依存する。エンコーダ深さ M、デコーダ深さ N として:

デコーダのみ(GPT 型):

  • α = (2N)^(1/4)
  • β = (8N)^(-1/4)

エンコーダ・デコーダ(T5 型):

  • エンコーダ: α_enc = (2M)^(1/4), β_enc = (8M)^(-1/4)
  • デコーダ: α_dec = (3 × (M + N))^(1/4), β_dec = (12 × (M + N))^(-1/4)
モデル深さ Nα 値β 値標準 Post-Norm との比較
6層1.860.54通常は問題なし
12層2.210.45Post-Norm でも安定
24層2.630.38Post-Norm は不安定化の始まり
48層3.130.32Post-Norm はほぼ学習不能
100層3.760.27DeepNorm なしでは発散
250層4.730.21DeepNorm で安定学習可能
1000層6.690.15DeepNorm の主要な実証範囲

理論的背景

DeepNorm の理論的基盤は「更新の有界性(Bounded Update)」にある。Transformer の学習において問題となるのは以下の2つの現象である:

  1. 勾配爆発: 逆伝播時に勾配のノルムが層を遡るごとに指数的に増大する
  2. 更新爆発: 勾配は有界でも、残差接続の累積により前方パスの出力スケールが増大し、学習率を下げる必要がある

DeepNorm は残差を α でスケーリングすることで「残差パスの支配性」を高め、勾配が残差パスを通じて安定的に伝播するようにする。同時に、β による初期化縮小で各層の初期出力を抑え、学習初期の更新爆発を防止する。

この二重スケーリングにより、以下の条件が成立する:

  • 前方パスの出力ノルム: O(1)(層数に依存しない)
  • 逆伝播の勾配ノルム: O(1)(層数に依存しない)
  • パラメータ更新量: O(1)(層数に依存しない)

Pre-Norm との比較

特性Pre-NormPost-NormDeepNorm (Post-Norm)
学習安定性高低(深いモデルで不安定)高(1000層でも安定)
最終精度やや低い高い高い(Post-Norm 相当)
実装の複雑さ低低中(α, β の計算が必要)
理論的裏付け経験的部分的数学的に導出済み
ハイパーパラメータ少ない少ないα, β が層数依存
最大検証深さ~100層程度~24層程度1000層以上
主な採用モデルGPT-2, LLaMA, MistralBERT, オリジナル TransformerGLM-130B

DeepNorm のメリット

  • 超深層の安定学習: 1000層以上の Transformer を Post-Norm 配置で安定して学習できる
  • Post-Norm の精度優位を維持: Pre-Norm で見られる精度のわずかな劣化を回避できる
  • 理論的保証: α と β の値が理論的に導出されており、経験的なチューニングが不要
  • 実装の簡便さ: 既存コードへの変更は残差接続のスケーリングと初期化の2箇所のみ

DeepNorm のデメリット

  • 層数固定の前提: α と β が層数に依存するため、学習中に層を追加/削除する動的アーキテクチャには不向き
  • 超大規模モデルでの検証限定: 1000層の検証はパラメータ数が比較的小さいモデル(各層の次元が小さい)で行われており、GPT-4 規模のモデルでの検証は公開されていない
  • RMSNorm との組み合わせ: 元論文は LayerNorm を前提としており、RMSNorm との組み合わせの最適 α, β は再導出が必要な可能性がある
  • 普及率の低さ: 理論的に優れているにもかかわらず、Pre-Norm + RMSNorm の組み合わせが主流であり、DeepNorm の実プロダクション採用は限定的

採用モデルと実装例

DeepNorm は理論的に重要な貢献であるが、実際の大規模モデルでの採用例は限定的である。

モデルパラメータ数層数DeepNorm 使用備考
GLM-130B(Tsinghua/Zhipu AI)130B70ありDeepNorm の最大規模採用例
DeepNet 実験モデル-1000ありMicrosoft の検証実験
MAGNETO-各種DeepNorm 拡張Sub-LayerNorm との組み合わせ

GLM-130B は DeepNorm を採用した最も大規模な公開モデルであり、70層のデコーダで安定した学習を達成している。しかし、LLaMA 以降の主要 LLM は Pre-Norm + RMSNorm を採用しており、DeepNorm の直接的な影響はアカデミック研究に留まる傾向がある。

PyTorch での実装例

import torch
import torch.nn as nn
import math

class DeepNormTransformerBlock(nn.Module):
    def __init__(self, d_model, n_heads, n_layers):
        super().__init__()
        self.alpha = (2 * n_layers) ** 0.25
        beta = (8 * n_layers) ** -0.25

        self.norm1 = nn.LayerNorm(d_model)
        self.attn = MultiHeadAttention(d_model, n_heads)
        self.norm2 = nn.LayerNorm(d_model)
        self.ffn = FeedForwardNetwork(d_model)

        # DeepNorm 初期化
        for p in self.attn.parameters():
            p.data.mul_(beta)
        for p in self.ffn.parameters():
            p.data.mul_(beta)

    def forward(self, x):
        x = self.norm1(self.alpha * x + self.attn(x))
        x = self.norm2(self.alpha * x + self.ffn(x))
        return x

最新の研究動向

1. MAGNETO: DeepNorm の発展形として、Sub-LayerNorm(各サブレイヤー内部にも追加の LayerNorm を配置)と組み合わせた手法が提案されている。Foundation Transformer とも呼ばれ、言語・画像・音声の全てのモダリティで安定した学習を実現する。

2. σReparam: 重みの初期化ではなく、重み行列のスペクトルノルムを動的に制御することで学習安定性を向上させる手法であり、DeepNorm の初期化に依存しないアプローチとして注目されている。

3. 深さスケーリング則: DeepNorm の理論を拡張し、モデルの深さと幅のスケーリング比率に関する最適条件を導出する研究が進んでいる。

FAQ

Q: DeepNorm は Pre-Norm を完全に置き換えるか?

A: 2026年時点では置き換えは起きていない。DeepNorm は理論的に Post-Norm が Pre-Norm より優れることを示した重要な研究だが、実務面では Pre-Norm + RMSNorm の組み合わせが「十分に安定」かつ「実装が簡潔」であるため、多くのモデル開発者がこちらを選択している。DeepNorm は超深層(100層以上)のモデルを設計する場合に価値があるが、現在の主流 LLM の層数は 32〜80層程度であり、Pre-Norm で十分に安定している。DeepNorm の真の価値は、将来的にモデルの深さが大幅に増加した場合に発揮されると考えられる。

Q: DeepNorm の α と β を手動でチューニングする必要はあるか?

A: 通常は論文で導出された公式をそのまま使用すればよく、手動チューニングは不要である。α = (2N)^(1/4) と β = (8N)^(-1/4) はモデルの層数 N のみから決定され、隠れ次元やヘッド数には依存しない。ただし、Mixture of Experts (MoE) や非標準的なアーキテクチャ(異なるサブレイヤー構成)では、元の導出の前提が成立しない可能性があり、再導出または実験的な調整が必要になるケースがある。

Q: 既存の Pre-Norm モデルを DeepNorm に変換できるか?

A: 学習済みモデルの事後変換は実質的に不可能である。DeepNorm は初期化時の重みスケーリングが不可欠であり、学習済みの重みに事後的に β を掛けても正しい挙動にならない。DeepNorm を使用する場合は、モデル設計の初期段階で決定し、最初から DeepNorm の初期化と残差スケーリングを適用した状態で学習を開始する必要がある。部分的な例外として、学習済みモデルからの知識蒸留で DeepNorm アーキテクチャの新モデルを学習するアプローチは有効である。

Q: GLM-130B の学習ではどの程度安定性が改善されたか?

A: GLM-130B の論文によると、標準的な Post-Norm では 70層のモデルが学習初期段階(数千ステップ)で損失が発散したのに対し、DeepNorm を適用した場合は 400Bトークンの学習を通じて安定した損失低下が観測された。特筆すべきは、学習率のウォームアップステップ数が Pre-Norm と比較して 50% 削減でき、かつ最終的な perplexity が Pre-Norm より 0.3〜0.5ポイント低い(= 精度が高い)ことが報告されている。