バッチ正規化 ばっちせいきか
正規化学習安定化勾配消失内部共変量シフトディープラーニング活性化関数
バッチ正規化について教えて
簡単に言うとこんな感じ!
「走るペースがバラバラな選手たちを、各チェックポイントで揃えながら進む」イメージだよ!深いニューラルネットワークでは、層を重ねるごとにデータのスケールがバラバラになって学習が不安定になりがち。各層の出力を「平均ゼロ・分散1」に正規化して揃えることで、学習を速く安定させるのがバッチ正規化なんだ!
バッチ正規化とは
バッチ正規化(Batch Normalization、BN)とは、ニューラルネットワークの各層の出力を、ミニバッチ内で平均ゼロ・分散1になるよう正規化してから次の層に渡す手法です。2015年にGoogleのIoffe & Szegedyが提案しました。
ディープラーニングでは、学習が進むにつれて各層の入力分布が変化し続ける内部共変量シフト(Internal Covariate Shift)が起きます。これがあると勾配が爆発・消失しやすくなり、学習に非常に大きな学習率を使えなくなります。バッチ正規化はこの問題を緩和し、より高い学習率での安定した学習を可能にします。
バッチ正規化のもうひとつの副次効果は正則化への貢献です。ドロップアウトと組み合わせることで過学習をさらに抑えられ、バッチ正規化単体でもある程度の正則化効果があるため、ドロップアウトを省略できる場合もあります。
バッチ正規化の計算ステップ
| ステップ | 処理 | 説明 |
|---|---|---|
| ①平均計算 | μ_B = (1/m) Σxᵢ | ミニバッチの平均を求める |
| ②分散計算 | σ²_B = (1/m) Σ(xᵢ-μ_B)² | ミニバッチの分散を求める |
| ③正規化 | x̂ᵢ = (xᵢ-μ_B) / √(σ²_B+ε) | 平均0・分散1に正規化 |
| ④スケール・シフト | yᵢ = γ × x̂ᵢ + β | γ(スケール)・β(シフト)は学習パラメータ |
正規化後のスケール・シフトが必要な理由
正規化しただけだと「活性化関数の中心付近にしか値が来なくなる」問題があります。γ(ガンマ)とβ(ベータ)を学習可能なパラメータとして持つことで、ネットワークが「どのくらいのスケール・シフトが最適か」を自分で学びます。
歴史と背景
- 2015年:Ioffe & Szegedyが「Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift」を発表。当時記録的な引用数を記録
- 2015年:GoogLeNet(Inception v2)にバッチ正規化が組み込まれ、ImageNet競技での精度向上を実証
- 2016年:ResNet(残差ネットワーク)がバッチ正規化を標準採用し、152層という超深いネットワークの学習を可能にした
- 2016年:Layer Normalization(層正規化)が提案。バッチサイズに依存しない代替手法として登場
- 2018年以降:Transformerモデル(BERT・GPT)ではバッチ正規化ではなくLayer Normalizationが主流となる
- 現在:画像系タスク(CNN)ではバッチ正規化、言語系タスク(Transformer)ではLayer Normalizationというのが一般的なすみ分け
正規化手法の比較
関連する規格・RFC
| 規格・RFC番号 | 内容 |
|---|---|
| ISO/IEC 22989:2022 | AI概念・用語(深層学習の訓練技法を含む) |
関連用語
- バックプロパゲーション — バッチ正規化の勾配も逆伝播で計算される
- 勾配降下法 — バッチ正規化により高い学習率で安定した勾配降下が可能になる
- 学習率 — バッチ正規化の恩恵として高い学習率が使えるようになる
- ドロップアウト — バッチ正規化と組み合わせて使われる正則化手法
- 過学習・過適合 — バッチ正規化の副次効果として緩和される現象
- エポック・バッチサイズ — バッチサイズはバッチ正規化の安定性に影響する
- 損失関数 — バッチ正規化後の出力を使って計算される誤差の尺度