AI・機械学習
上級

直交初期化(チョッコウショキカ)

ニューラルネットワークの重み行列を直交行列(W^T W = I)で初期化する手法。直交行列は行列積を繰り返しても特異値が 1 のまま保たれるため、深層ネットワークで勾配の爆発・消失を理論的に防止できる。RNN/LSTM で広く採用され、Megatron-LM や PaLM などの大規模 Transformer 訓練でも安定化手法として利用されている。

0 回閲覧
0 いいね

直交初期化とは

直交初期化(Orthogonal Initialization)は、重み行列 W を直交行列(正方行列の場合 W^T W = I、非正方行列の場合は列が正規直交)で初期化する手法である。Saxe et al.(2013)の論文「Exact solutions to the nonlinear dynamics of learning in deep linear networks」で理論的基盤が確立された。

直交行列の最大の特性は、行列積を繰り返しても特異値が変化しないことである。つまり、順伝播で y = W₁W₂...Wₙx と多層を通過しても信号のノルムが保存され、逆伝播でも勾配のノルムが保存される。これにより、数百層の深層ネットワークでも勾配消失・爆発が理論的に発生しない。

数学的背景

直交行列の性質

正方行列 W ∈ R^(n×n) が直交行列であるとは W^T W = WW^T = I を満たすことである。このとき:

  1. すべての特異値が 1(σᵢ = 1)
  2. 行列式が ±1(det(W) = ±1)
  3. 条件数が 1(κ(W) = σ_max/σ_min = 1)— 数値的に最も安定

生成方法(QR 分解)

PyTorch の torch.nn.init.orthogonal_ は以下の手順で直交行列を生成する:

  1. ランダム行列 A を標準正規分布 N(0,1) で生成
  2. QR 分解を実行: A = QR
  3. Q の符号を調整(R の対角成分の符号で Q の列を反転)
  4. gain パラメータでスケーリング: W = gain × Q
import torch.nn as nn
import torch.nn.init as init

# 基本使用
linear = nn.Linear(4096, 4096)
init.orthogonal_(linear.weight, gain=1.0)

# ReLU 活性化向け(gain=√2)
init.orthogonal_(linear.weight, gain=nn.init.calculate_gain('relu'))

# 非正方行列にも対応(列が正規直交)
proj = nn.Linear(4096, 1024, bias=False)
init.orthogonal_(proj.weight)  # 1024×4096 行列の行が正規直交

Megatron-LM / PaLM での採用

Megatron-LM(NVIDIA)

NVIDIA の Megatron-LM は、テンソル並列(Tensor Parallelism)で分割された重み行列の初期化に直交初期化を採用している。並列分割後も各シャードの直交性を可能な限り保つよう、分割前に直交初期化を行ってからシャーディングする方式を取る。

設定Megatron-LM 530BPaLM 540B
初期化手法直交 + 残差スケーリング直交 + Truncated Normal ハイブリッド
Attention QKV直交初期化Xavier Normal
FFNKaiming Normal直交初期化
残差出力ゼロ初期化縮小スケーリング
gain√2(GELU)1.0

PaLM(Google)

PaLM 540B は FFN 層に直交初期化を採用。Google の内部実験では、540B 規模で Kaiming Normal と比較して訓練初期 5000 ステップの Loss 変動が 15% 小さくなったと報告されている。

直交初期化 vs Xavier / Kaiming

比較項目直交初期化XavierKaiming
理論保証特異値=1、勾配ノルム完全保存分散保存(線形近似)分散保存(ReLU 補正)
計算コストO(n³)(QR 分解)O(n)(乱数生成のみ)O(n)(乱数生成のみ)
非正方行列対応(列正規直交)対応対応
RNN/LSTM最適不適不適
Transformer良好良好良好
実用的差(LLM)訓練初期の安定性が高い標準的標準的

直交初期化の最大の欠点は QR 分解の計算コストである。d_model=8192 の行列では O(8192³) ≈ 5.5×10¹¹ の浮動小数点演算が必要で、初期化だけで数秒を要する。ただし初期化は 1 回限りのため、数千 GPU 時間の訓練全体から見れば無視できるコストである。

RNN/LSTM での重要性

直交初期化が最も威力を発揮するのは RNN(再帰ニューラルネットワーク)である。RNN の隠れ状態遷移 h_t = f(W_h h_{t-1} + W_x x_t) では、同じ重み行列 W_h がタイムステップごとに繰り返し適用される。W_h が直交行列でなければ、特異値が 1 からずれた分だけ指数的に増幅/減衰する。

LSTM の忘却ゲートバイアスを 1.0 で初期化するテクニックと組み合わせると、1000 タイムステップ以上の長期依存関係を捉えられるようになる。

よくある質問(FAQ)

Q1: 直交初期化は LLM に必須ですか? A: 必須ではありません。Llama 3 や GPT-4 は Kaiming Normal で十分に安定訓練できています。直交初期化の利点は理論的な勾配保存保証ですが、LayerNorm/RMSNorm と学習率ウォームアップを組み合わせれば、Kaiming でも同等の安定性が得られます。

Q2: 非正方行列(例: 4096→11008)にも使えますか? A: はい。PyTorch の orthogonal_ は非正方行列にも対応し、短辺方向の列(または行)が正規直交になるよう初期化します。Llama 3 の SwiGLU FFN(4096→11008)にも適用可能です。

Q3: 直交初期化の gain はどう設定すべきですか? A: ReLU 系なら gain=√2、Tanh なら gain=5/3、線形層(活性化なし)なら gain=1.0 です。nn.init.calculate_gain() で自動計算できます。

まとめ

  • 直交初期化は W^T W = I により勾配ノルムを完全に保存する
  • QR 分解ベースで生成、計算コストは O(n³) だが 1 回限り
  • RNN/LSTM では長期依存学習に不可欠
  • Megatron-LM 530B, PaLM 540B など大規模 LLM でも採用実績あり
  • Kaiming + Normalization で同等の安定性が得られるため、LLM では必須ではない