AI・機械学習の基本概念

バッチ正規化 ばっちせいきか

正規化学習安定化勾配消失内部共変量シフトディープラーニング活性化関数
バッチ正規化について教えて

簡単に言うとこんな感じ!

「走るペースがバラバラな選手たちを、各チェックポイントで揃えながら進む」イメージだよ!深いニューラルネットワークでは、層を重ねるごとにデータのスケールがバラバラになって学習が不安定になりがち。各層の出力を「平均ゼロ・分散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というのが一般的なすみ分け

正規化手法の比較

正規化手法の「正規化する方向」比較 縦軸=バッチ(サンプル) 横軸=特徴(チャネル) Batch Norm 列(特徴)方向で正規化 CNN向け・主流 Layer Norm 行(サンプル)方向で正規化 Transformer向け・主流 Instance Norm サンプル×特徴単位で正規化 スタイル転送向け Group Norm チャネルをグループに分けて正規化 バッチサイズが小さい場面で有効 (物体検出・セグメンテーション) 用途別の選び方 画像分類・CNN → Batch Norm  自然言語・Transformer → Layer Norm  スタイル転送 → Instance Norm

関連する規格・RFC

規格・RFC番号内容
ISO/IEC 22989:2022AI概念・用語(深層学習の訓練技法を含む)

関連用語