Kaiming初期化(カイミンショキカ)
2015年にKaiming Heが提案した重み初期化手法。ReLU系活性化関数での分散減衰を補正するため、Var(W) = 2/n_inと設定する。ResNetの成功に貢献し、現在もCNNやReLUを使用するネットワーク層で標準的に採用されている。
Kaiming初期化(He初期化)は、ReLU(Rectified Linear Unit)系の活性化関数を使用するニューラルネットワーク向けに設計された重み初期化手法である。2015年にMicrosoft Research のKaiming He(何恺明)らが論文「Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification」で発表した。ReLUが負の入力をゼロにすることで実効ノード数が半減する問題を補正し、Var(W) = 2/n_in と設定することで深いネットワークでも安定した学習を実現する。ResNet-152(6,000万パラメータ)でImageNetの人間超え精度(Top-5エラー率3.57%)を達成した基盤技術の一つである。
数学的導出
Xavier初期化ではVar(W) = 2/(n_in + n_out)としたが、ReLU活性化関数の場合、負の入力がゼロになるため出力の期待値が変わる。ReLU後の出力分散は入力分散の約半分になることから:
- Var(y) = (n_in / 2) × Var(W) × Var(x)
順伝播でVar(y) = Var(x)を満たすには:
- Kaiming正規分布: W ~ N(0, 2/n_in)
- Kaiming一様分布: W ~ U(-√(6/n_in), √(6/n_in))
逆伝播基準では Var(W) = 2/n_out となるが、実用上は順伝播基準(fan_in モード)がデフォルト。
Leaky ReLU(負の傾き α)の場合は補正係数が変わり:
- Var(W) = 2 / ((1 + α²) × n_in)
α = 0 で標準ReLU、α = 0.01 で標準的なLeaky ReLUに対応する。
フレームワーク別実装
| フレームワーク | 正規分布版 | 一様分布版 | fan_in/fan_out |
|---|---|---|---|
| PyTorch | nn.init.kaiming_normal_(t, nonlinearity='relu') | nn.init.kaiming_uniform_(t) | mode='fan_in' (default) |
| TensorFlow | tf.initializers.HeNormal() | tf.initializers.HeUniform() | fan_in固定 |
| JAX | jax.nn.initializers.he_normal() | jax.nn.initializers.he_uniform() | fan_in固定 |
PyTorch の nn.Linear は デフォルトで Kaiming 一様分布(fan_in モード)を使用する。つまり nn.Linear(768, 3072) を作成すると、重みは自動的に Kaiming 一様分布で初期化される。
LLMにおけるKaiming初期化の位置づけ
現代のLLM(GPT-4、Llama 3、Gemini 1.5)ではGELU活性化関数が主流であり、GELUは原点付近でReLUほど急激なゼロ化をしないため、Kaiming初期化の補正がそのまま当てはまらない。そのため:
- FFN層のReLU/SwiGLU部分: Kaiming系が有効(Llama 2/3のSwiGLU-FFNなど)
- Attention層のQ/K/V射影: Xavier系またはカスタム分散が多い
- 全体的な初期化: σ = 0.02 などの固定値 + 残差スケーリング
Llama 3 では SwiGLU 活性化を採用しており、FFN層の Gate/Up 射影には Kaiming 系の分散設定、Down 射影には残差スケーリング付き初期化が使われている。
Xavier初期化との比較
| 比較項目 | Xavier | Kaiming |
|---|---|---|
| 分散計算式 | 2/(n_in + n_out) | 2/n_in |
| 想定活性化関数 | 線形、Sigmoid、Tanh | ReLU、Leaky ReLU |
| 提案年 | 2010年 | 2015年 |
| 代表的な採用 | BERT、T5 | ResNet、一部LLMのFFN |
| GELU との相性 | 良好(原点付近で線形) | やや過大(GELU ≠ ReLU) |
| PyTorchデフォルト | 明示的に呼ぶ必要あり | nn.Linear のデフォルト |
よくある質問(FAQ)
Q1: 「Kaiming」の読み方は? A: 中国語の人名「何恺明(ハー・カイミン)」に由来する。英語圏では「カイミン・ヒー初期化」と呼ばれることが多い。「He初期化」という表記も一般的。
Q2: PyTorchのnn.Linearはデフォルトで何の初期化を使っていますか?
A: Kaiming一様分布(fan_inモード)がデフォルト。nn.Linear(in_features, out_features) を作成すると自動適用される。バイアスは一様分布 U(-1/√n_in, 1/√n_in) で初期化される。
Q3: GELUを使うLLMでKaiming初期化を使うべきですか? A: GELUはReLUと異なり負の入力を完全にはゼロにしないため、Kaimingの補正係数2がやや過大になる。実用的にはXavier系またはσ=0.02の固定値が多く採用されている。ただしSwiGLU-FFN内のReLU的な動作をする部分にはKaimingが適合する。
Q4: fan_inとfan_outモードの違いは何ですか? A: fan_in(デフォルト)は順伝播時の分散保存を重視し、fan_outは逆伝播時の勾配分散保存を重視する。通常はfan_inで十分だが、最終出力層など勾配の安定性が重要な層ではfan_outが使われることがある。
まとめ
- Kaiming初期化は Var(W) = 2/n_in でReLU系の分散減衰を補正
- Xavier初期化の拡張版で、2015年のResNetの成功を支えた基盤技術
- PyTorchのnn.Linearデフォルト初期化として広く普及
- 現代のLLMではGELU/SwiGLU使用のため、適用範囲はFFN層の一部に限定される傾向
- Leaky ReLU では α に応じた補正係数の調整が必要