LLM(大規模言語モデル)の学習開始時にニューラルネットワークの各層パラメータへ初期値を設定する戦略の総称。Xavier・Kaiming・直交・ゼロ初期化など複数の手法があり、選択を誤ると勾配消失・爆発が起きて数十億パラメータ規模のモデルが収束しない。2026年現在の主要LLMでは層種別に最適な初期化を組み合わせるハイブリッド方式が標準となっている。
LLM 重み初期化(Weight Initialization)は、大規模言語モデルの訓練を開始する前に、Transformer の各層(Embedding・Self-Attention・FFN・LayerNorm 等)のパラメータ行列に初期値を割り当てる工程である。ディープラーニングにおいて重み初期化は訓練の成否を左右する最重要ファクターの一つであり、不適切な初期値は勾配消失(vanishing gradients)または勾配爆発(exploding gradients)を引き起こし、モデルがまったく学習しない状態に陥る。
2026 年現在、GPT-4・Llama 3・Mistral・Gemini といった主要 LLM は数十億〜数兆パラメータを持ち、1 回の訓練に数千万ドル規模の計算資源を消費する。訓練初期に発散すれば莫大なコストが無駄になるため、初期化戦略の選択は実用面でも極めて重要である。GPT-2 以降の多くのモデルでは、層の種類ごとに異なる初期化手法を組み合わせるハイブリッドアプローチが採用されている。
| 初期化手法 | 分散スケーリング | 対応活性化関数 | 主な採用モデル | PyTorch API |
|---|---|---|---|---|
| Xavier (Glorot) Uniform | Var = 2/(fan_in+fan_out) | Sigmoid, Tanh | 初期 Transformer, BERT | torch.nn.init.xavier_uniform_ |
| Xavier (Glorot) Normal | Var = 2/(fan_in+fan_out) | Sigmoid, Tanh | Transformer-XL | torch.nn.init.xavier_normal_ |
| Kaiming (He) Uniform | Var = 2/fan_in | ReLU, GELU, SiLU | GPT-NeoX, BLOOM | torch.nn.init.kaiming_uniform_ |
| Kaiming (He) Normal |
| Var = 2/fan_in |
| ReLU, GELU, SiLU |
| Llama 3, Mistral |
torch.nn.init.kaiming_normal_ |
| 直交初期化 | SVD で直交行列生成 | 任意 | メガトロンLM, PaLM | torch.nn.init.orthogonal_ |
| ゼロ初期化 | 0 固定 | 残差出力層限定 | GPT-2, GPT-3, OPT | torch.nn.init.zeros_ |
| Truncated Normal | σ = 0.02, ±2σ 切断 | 任意 | GPT-2, BERT, RoBERTa | torch.nn.init.trunc_normal_ |
| Small Init | σ = 2/(d_model×√L) | 任意 | DeepSeek-V2, Phi-3 | カスタム実装 |
GPT-2 では全結合層の重みを N(0, 0.02) の切断正規分布で初期化し、残差接続の出力射影層のみ N(0, 0.02/√N) にスケールダウンする。ここで N は残差ブロックの総数である。この手法により、深層ネットワークでも各残差ブロックの出力が蓄積して爆発するのを防ぐ。
# GPT-2 スタイル初期化(PyTorch 擬似コード)
import torch.nn as nn
import torch.nn.init as init
def init_gpt2(module, n_layers):
if isinstance(module, nn.Linear):
init.trunc_normal_(module.weight, std=0.02)
if module.bias is not None:
init.zeros_(module.bias)
if isinstance(module, nn.Embedding):
init.trunc_normal_(module.weight, std=0.02)
# 残差出力射影のスケーリング
for name, p in module.named_parameters():
if name.endswith('c_proj.weight'):
init.trunc_normal_(p, std=0.02 / (2 * n_layers) ** 0.5)
Meta の Llama 3 では、RMSNorm を採用する関係で Xavier ではなく Kaiming Normal が標準となった。SwiGLU 活性化関数に対して fan_in モードで初期化し、RMSNorm のゲインパラメータは 1.0 で初期化する。70B パラメータモデルでは 80 層の Transformer を安定的に訓練できる。
Mistral 7B は Llama アーキテクチャをベースにしつつ、Sliding Window Attention の Q/K/V 射影に対して std = 1/√d_head(d_head = 128)で初期化する独自スケーリングを採用。これにより局所的注意パターンの初期形成が安定する。
実験的に、同一アーキテクチャ(Transformer 1.3B パラメータ)で初期化手法のみを変えた場合の収束特性が報告されている:
| 初期化手法 | 1K ステップ後 Loss | 10K ステップ後 Loss | 50K ステップ後 Loss | 発散率 |
|---|---|---|---|---|
| Xavier Uniform | 8.42 | 3.91 | 2.85 | 0% |
| Kaiming Normal | 8.15 | 3.72 | 2.78 | 0% |
| 直交初期化 | 7.98 | 3.65 | 2.76 | 0% |
| ゼロ初期化(全層) | 発散 | — | — | 100% |
| GPT-2 式 Truncated Normal | 8.21 | 3.78 | 2.80 | 0% |
| Small Init(DeepSeek) | 7.85 | 3.58 | 2.72 | 0% |
| ランダム一様 [−1, 1] | 12.50 | 発散 | — | 85% |
この結果から、適切な初期化手法間の最終 Loss 差は小さい(2.72〜2.85)が、不適切な初期化では訓練自体が不可能になることが分かる。特に全層ゼロ初期化は対称性が破れず勾配がゼロのまま更新されないため、必ず発散する。
PyTorch の torch.nn.init モジュールは全主要初期化手法を提供する:
import torch
import torch.nn as nn
import torch.nn.init as init
class TransformerBlock(nn.Module):
def __init__(self, d_model=4096, n_heads=32, n_layers=80):
super().__init__()
self.attn_qkv = nn.Linear(d_model, 3 * d_model, bias=False)
self.attn_out = nn.Linear(d_model, d_model, bias=False)
self.ffn_gate = nn.Linear(d_model, 4 * d_model, bias=False)
self.ffn_down = nn.Linear(4 * d_model, d_model, bias=False)
self._init_weights(n_layers)
def _init_weights(self, n_layers):
# Q/K/V: Kaiming Normal (GELU/SiLU 対応)
init.kaiming_normal_(self.attn_qkv.weight, mode='fan_in', nonlinearity='relu')
# Attention 出力: 残差スケーリング
init.normal_(self.attn_out.weight, std=0.02 / (2 * n_layers) ** 0.5)
# FFN Gate: Kaiming Normal
init.kaiming_normal_(self.ffn_gate.weight, mode='fan_in', nonlinearity='relu')
# FFN Down: 残差スケーリング
init.normal_(self.ffn_down.weight, std=0.02 / (2 * n_layers) ** 0.5)
2025-2026 年にかけて、初期化の自動最適化が進んでいる。μP(Maximal Update Parametrization)は、幅 d_model を変えてもハイパーパラメータが転移するよう初期化スケールを数学的に決定する理論で、Cerebras が GPT-3 規模で有効性を実証した。また、Spectral Initialization はランダム行列の特異値分解に基づき、初期状態で各層のスペクトルノルムを 1 に揃える手法で、DeepSeek-V3 の安定訓練に寄与したと報告されている。
分散訓練フレームワーク DeepSpeed の ZeRO-3 と組み合わせた初期化手法。各 GPU が担当するパラメータシャードのみを初期化し、全パラメータを一度にメモリに載せる必要がない。1 兆パラメータ規模のモデルでメモリ効率的な初期化を実現する。
Q1: すべての層を同じ初期化手法で統一すべきですか? A: いいえ。2026 年の主要 LLM は層の種類(Embedding, Attention QKV, FFN, Normalization, 残差出力)ごとに異なる初期化を使うハイブリッド方式が標準です。Embedding は Truncated Normal(σ=0.02)、Attention は Kaiming Normal、残差出力はゼロまたは縮小スケールが一般的です。
Q2: 初期化を間違えると必ず訓練が失敗しますか? A: 小規模モデル(数億パラメータ以下)では Adam オプティマイザが初期化の差をある程度吸収します。しかし 10B パラメータ以上では初期化の影響が顕著になり、全層ゼロ初期化やスケール過大な一様分布では確実に発散します。70B 以上では初期化ミスが数百万ドルの計算損失に直結します。
Q3: ファインチューニング時も初期化は重要ですか? A: プリトレイン済みモデルのファインチューニングでは、既存の重みがそのまま使われるため通常の初期化は不要です。ただし LoRA アダプタの B 行列のゼロ初期化や、新たに追加する分類ヘッドの Xavier 初期化は必要です。QLoRA では 4bit 量子化済み重みに対する NormalFloat 初期化が採用されています。
Q4: バッチサイズと初期化の関係はありますか? A: 直接的な数学的関係はありませんが、大バッチ(4096 以上)では勾配推定のノイズが減少するため、初期化のスケールが若干大きくても安定します。逆に小バッチでは初期化に敏感になるため、保守的なスケーリング(Small Init 等)が推奨されます。
torch.nn.init で主要手法はすべてワンライナーで適用可能