直交初期化(チョッコウショキカ)
ニューラルネットワークの重み行列を直交行列(W^T W = I)で初期化する手法。直交行列は行列積を繰り返しても特異値が 1 のまま保たれるため、深層ネットワークで勾配の爆発・消失を理論的に防止できる。RNN/LSTM で広く採用され、Megatron-LM や PaLM などの大規模 Transformer 訓練でも安定化手法として利用されている。
直交初期化とは
直交初期化(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(
det(W) = ±1) - 条件数が 1(
κ(W) = σ_max/σ_min = 1)— 数値的に最も安定
生成方法(QR 分解)
PyTorch の torch.nn.init.orthogonal_ は以下の手順で直交行列を生成する:
- ランダム行列 A を標準正規分布 N(0,1) で生成
- QR 分解を実行:
A = QR - Q の符号を調整(R の対角成分の符号で Q の列を反転)
- 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 530B | PaLM 540B |
|---|---|---|
| 初期化手法 | 直交 + 残差スケーリング | 直交 + Truncated Normal ハイブリッド |
| Attention QKV | 直交初期化 | Xavier Normal |
| FFN | Kaiming Normal | 直交初期化 |
| 残差出力 | ゼロ初期化 | 縮小スケーリング |
| gain | √2(GELU) | 1.0 |
PaLM(Google)
PaLM 540B は FFN 層に直交初期化を採用。Google の内部実験では、540B 規模で Kaiming Normal と比較して訓練初期 5000 ステップの Loss 変動が 15% 小さくなったと報告されている。
直交初期化 vs Xavier / Kaiming
| 比較項目 | 直交初期化 | Xavier | Kaiming |
|---|---|---|---|
| 理論保証 | 特異値=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 では必須ではない