09. ニューラルネットワーク実装の基礎

実践的なNN構築のための要素技術。活性化関数の選択、重み初期化戦略、正規化手法、正則化技法、最適化アルゴリズム。理論的背景と実装上の指針。

最終更新:2025年11月

1. 活性化関数

1.1 非線形性の必要性

活性化関数なしでは、多層ネットワークも単層の線形変換と等価。非線形活性化により表現力を獲得。

1.2 古典的活性化関数

Sigmoid:

$$\sigma(x) = \frac{1}{1 + e^{-x}}$$

出力範囲 $(0, 1)$。勾配消失問題。出力層の二値分類に使用。

Tanh:

$$\tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}$$

出力範囲 $(-1, 1)$。ゼロ中心。依然として勾配消失。

1.3 ReLU系

ReLU(Rectified Linear Unit):

$$\text{ReLU}(x) = \max(0, x)$$

勾配消失を軽減。計算効率が高い。「死んだReLU」問題。

Leaky ReLU:

$$\text{LeakyReLU}(x) = \max(\alpha x, x), \quad \alpha \approx 0.01$$

負の領域でも勾配を維持。

PReLU(Parametric ReLU):

$\alpha$ を学習可能なパラメータに。

ELU(Exponential Linear Unit):

$$\text{ELU}(x) = \begin{cases} x & x > 0 \\ \alpha(e^x - 1) & x \leq 0 \end{cases}$$

負の値で滑らか。ゼロ中心に近づく。

主要論文:

  • Nair & Hinton (2010) "Rectified Linear Units Improve Restricted Boltzmann Machines", ICML
  • He et al. (2015) "Delving Deep into Rectifiers: Surpassing Human-Level Performance (PReLU)", ICCV
  • Clevert et al. (2016) "Fast and Accurate Deep Network Learning by ELUs", ICLR

1.4 現代的活性化関数

GELU(Gaussian Error Linear Unit):

$$\text{GELU}(x) = x \cdot \Phi(x)$$

$\Phi$ は標準正規分布のCDF。BERT、GPT等で標準。確率的な滑らかなゲーティング。

SiLU / Swish:

$$\text{SiLU}(x) = x \cdot \sigma(x)$$

自己ゲート。GELUと類似の性能。

Mish:

$$\text{Mish}(x) = x \cdot \tanh(\text{softplus}(x))$$

主要論文:

  • Hendrycks & Gimpel (2016) "Gaussian Error Linear Units (GELUs)", arXiv
  • Ramachandran et al. (2017) "Searching for Activation Functions (Swish)", arXiv

1.5 選択指針

  • CNN:ReLU、Leaky ReLU
  • Transformer:GELU(標準)、SiLU
  • 出力層(分類):Softmax、Sigmoid
  • 出力層(回帰):線形(なし)

2. 重み初期化

2.1 初期化の重要性

不適切な初期化は勾配消失・爆発を引き起こす。各層の活性化と勾配の分散を維持することが目標。

2.2 Xavier / Glorot初期化

Sigmoid/Tanh向け。入力・出力ユニット数の平均で分散を調整。

$$W \sim \mathcal{N}\left(0, \frac{2}{n_{in} + n_{out}}\right)$$

または一様分布:$W \sim \mathcal{U}\left(-\sqrt{\frac{6}{n_{in} + n_{out}}}, \sqrt{\frac{6}{n_{in} + n_{out}}}\right)$

主要論文:

  • Glorot & Bengio (2010) "Understanding the difficulty of training deep feedforward neural networks", AISTATS

2.3 He初期化(Kaiming)

ReLU向け。ReLUが半分のニューロンを無効化することを考慮。

$$W \sim \mathcal{N}\left(0, \frac{2}{n_{in}}\right)$$

主要論文:

  • He et al. (2015) "Delving Deep into Rectifiers", ICCV

2.4 その他の初期化

  • LeCun初期化:$\text{Var}(W) = 1/n_{in}$
  • 直交初期化:RNNで有効
  • LSUV:Layer-Sequential Unit-Variance
  • Fixup:ResNetでBatchNormなしで訓練可能に

2.5 Transformerの初期化

GPT系では残差接続のスケーリング $1/\sqrt{N}$($N$は層数)を使用。深いネットワークの安定化。

3. 正規化技法

3.1 Batch Normalization

ミニバッチ統計量で正規化。訓練の高速化・安定化。

$$\hat{x}_i = \frac{x_i - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}}$$ $$y_i = \gamma \hat{x}_i + \beta$$

効果:学習率を上げられる、初期化への依存軽減、正則化効果

課題:バッチサイズ依存、RNNでの適用困難

主要論文:

  • Ioffe & Szegedy (2015) "Batch Normalization: Accelerating Deep Network Training", ICML
  • Santurkar et al. (2018) "How Does Batch Normalization Help Optimization?", NeurIPS

3.2 Layer Normalization

特徴次元で正規化。バッチサイズに依存しない。Transformerの標準。

$$\hat{x} = \frac{x - \mu}{\sqrt{\sigma^2 + \epsilon}}, \quad \mu = \frac{1}{H}\sum_i x_i$$

主要論文:

  • Ba et al. (2016) "Layer Normalization", arXiv

3.3 その他の正規化

Group Normalization:

チャネルをグループ化して正規化。小バッチでも安定。CNNで有効。

Instance Normalization:

各サンプル・各チャネルで正規化。スタイル転送で使用。

RMSNorm:

平均の計算を省略。計算効率向上。LLaMA等で採用。

$$\hat{x} = \frac{x}{\sqrt{\frac{1}{n}\sum_i x_i^2 + \epsilon}}$$

主要論文:

  • Wu & He (2018) "Group Normalization", ECCV
  • Zhang & Sennrich (2019) "Root Mean Square Layer Normalization", NeurIPS

3.4 Pre-LN vs Post-LN

Post-LN(オリジナルTransformer):残差接続後に正規化。勾配問題あり。

Pre-LN(GPT-2以降):残差接続前に正規化。訓練が安定。現在の標準。

4. 正則化

4.1 Weight Decay / L2正則化

損失関数に重みのノルムを追加。

$$L_{total} = L + \lambda \|w\|_2^2$$

AdamWではweight decayを勾配更新と分離。

4.2 Dropout

訓練時にランダムにユニットを無効化。アンサンブル効果。

$$y = \frac{1}{1-p} \cdot x \cdot m, \quad m_i \sim \text{Bernoulli}(1-p)$$

推論時は全ユニットを使用(スケーリング済み)。

変種:

  • Spatial Dropout:CNNのチャネル単位
  • DropConnect:重み単位
  • DropPath / Stochastic Depth:層単位

主要論文:

  • Srivastava et al. (2014) "Dropout: A Simple Way to Prevent Neural Networks from Overfitting", JMLR
  • Huang et al. (2016) "Deep Networks with Stochastic Depth", ECCV

4.3 データ拡張

訓練データを人工的に拡張。暗黙的な正則化。

画像:回転、反転、クロップ、色変換、MixUp、CutMix、RandAugment

テキスト:Back-translation、Token置換、EDA

主要論文:

  • Zhang et al. (2018) "mixup: Beyond Empirical Risk Minimization", ICLR
  • Yun et al. (2019) "CutMix: Regularization Strategy to Train Strong Classifiers", ICCV
  • Cubuk et al. (2020) "RandAugment: Practical automated data augmentation", NeurIPS

4.4 早期停止

検証損失が改善しなくなったら訓練を停止。暗黙的な正則化効果。

5. 最適化アルゴリズム

5.1 SGDと運動量

Vanilla SGD:

$$\theta_{t+1} = \theta_t - \eta \nabla L(\theta_t)$$

Momentum:

$$v_{t+1} = \mu v_t + \nabla L(\theta_t)$$ $$\theta_{t+1} = \theta_t - \eta v_{t+1}$$

振動を抑え、収束を加速。$\mu \approx 0.9$ が一般的。

Nesterov Momentum:

先読み勾配。より速い収束。

5.2 適応的学習率

Adam:

$$m_t = \beta_1 m_{t-1} + (1-\beta_1) g_t$$ $$v_t = \beta_2 v_{t-1} + (1-\beta_2) g_t^2$$ $$\hat{m}_t = m_t / (1-\beta_1^t), \quad \hat{v}_t = v_t / (1-\beta_2^t)$$ $$\theta_{t+1} = \theta_t - \eta \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon}$$

デフォルト:$\beta_1=0.9$, $\beta_2=0.999$, $\epsilon=10^{-8}$

AdamW:

Weight decayを正しく分離。LLM訓練の標準。

主要論文:

  • Kingma & Ba (2015) "Adam: A Method for Stochastic Optimization", ICLR
  • Loshchilov & Hutter (2019) "Decoupled Weight Decay Regularization (AdamW)", ICLR

5.3 学習率スケジューリング

  • Step Decay:一定エポックごとに減衰
  • Cosine Annealing:余弦関数で滑らかに減衰
  • Warmup:初期に学習率を徐々に上昇
  • Warmup + Cosine:LLM訓練の標準
  • OneCycleLR:急速な訓練

主要論文:

  • Loshchilov & Hutter (2017) "SGDR: Stochastic Gradient Descent with Warm Restarts", ICLR
  • Smith & Topin (2019) "Super-Convergence: Very Fast Training Using Large Learning Rates", arXiv

5.4 勾配クリッピング

勾配爆発の防止。RNN、Transformer訓練で必須。

$$g \leftarrow \min\left(1, \frac{c}{\|g\|}\right) g$$

$c$ はクリップ閾値(通常1.0)。

6. アーキテクチャ設計

6.1 Skip Connection

勾配の直接伝播。深いネットワークの訓練を可能に。

$$y = F(x) + x$$

ResNet(加算)、DenseNet(連結)。

6.2 幅 vs 深さ

  • 深いネットワーク:階層的特徴、計算効率
  • 広いネットワーク:並列化しやすい、勾配安定
  • スケーリング則:深さ・幅・データ量のバランス

6.3 実践的指針

  • まず小さなモデルで実験し、徐々にスケールアップ
  • 過学習するまでモデル容量を増やす
  • 正則化で汎化性能を調整
  • 学習曲線を監視し、ハイパーパラメータを調整

7. 参考文献

教科書

  • Goodfellow et al. (2016) "Deep Learning", Chapter 6-8, MIT Press
  • Prince (2023) "Understanding Deep Learning", MIT Press(無料オンライン)

サーベイ・チュートリアル

  • Ruder (2016) "An overview of gradient descent optimization algorithms", arXiv
  • He et al. (2019) "Bag of Tricks for Image Classification with CNNs", CVPR

実装リソース

  • PyTorch Documentation:公式チュートリアル
  • Hugging Face Transformers:最新モデル実装
  • Papers with Code:論文と実装の対応