09. ニューラルネットワーク実装の基礎
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:論文と実装の対応