AI・機械学習
中級

Kaiming初期化(カイミンショキカ)

2015年にKaiming Heが提案した重み初期化手法。ReLU系活性化関数での分散減衰を補正するため、Var(W) = 2/n_inと設定する。ResNetの成功に貢献し、現在もCNNやReLUを使用するネットワーク層で標準的に採用されている。

0 回閲覧
0 いいね

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
PyTorchnn.init.kaiming_normal_(t, nonlinearity='relu')nn.init.kaiming_uniform_(t)mode='fan_in' (default)
TensorFlowtf.initializers.HeNormal()tf.initializers.HeUniform()fan_in固定
JAXjax.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初期化との比較

比較項目XavierKaiming
分散計算式2/(n_in + n_out)2/n_in
想定活性化関数線形、Sigmoid、TanhReLU、Leaky ReLU
提案年2010年2015年
代表的な採用BERT、T5ResNet、一部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 では α に応じた補正係数の調整が必要