【バッチせいきか】

バッチ正規化 とは?

最終更新:
💡 バッチの統計で整えて、学習する係数で調整

ニューラルネットワークの中間値を、学習時にはミニバッチの平均・分散で整え、学習する係数で大きさと位置を調整する手法。学習を進めやすくするために使う。

📌 このページのポイント
統計で正規化し、係数で調整 1つの特徴・2件のミニバッチの例 入力 1 3 平均2・分散1 正規化 −1 1 平均0・分散1 係数で調整 1 5 平均3・分散4 正規化:平均を引き、標準偏差で割る 調整:γ = 2、β = 3 → 値 × 2 + 3 最終出力が平均0・分散1とは限らない εを省略した計算例
1つの特徴の値を比べた計算例。実際は分散に小さな定数εを足して計算し、γとβは学習で調整します。
ひよこ ひよこ
BatchNormって何を整えるの?
ペンギン先生 ペンギン先生
ニューラルネットワークの途中の値だよ。学習時には、特徴やチャンネルごとに、ミニバッチに含まれる値の平均と分散を計算する。平均を引き、分散に小さな定数εを足した値の平方根で割って値を整えるんだ。
ひよこ ひよこ
出力は必ず平均0・分散1になる?
ペンギン先生 ペンギン先生
その後に、学習する倍率γで掛け、加算値βを足すよ。だから最終出力の平均と分散は固定されないんだ。例えばεを省略した計算例では、平均2・分散1で1と3を整えると−1と1。それにγ=2、β=3を適用すると1と5になるよ。
ひよこ ひよこ
なぜ学習を進めやすくなるの?
ペンギン先生 ペンギン先生
2015年の論文は、学習中に層への入力分布が変わる「内部共変量シフト」を減らす説明をしたよ。後の研究では最適化の滑らかさに注目した説明もある。速度や精度が必ず上がるわけではなく、正則化の効果もドロップアウトを常に不要にする保証ではないんだ。
ひよこ ひよこ
推論のときは、どの平均と分散を使うの?
ペンギン先生 ペンギン先生
PyTorchの既定では、学習中に蓄積した平均と分散を使うよ。ただし track_running_stats=False の設定では、推論時にもそのバッチの統計量を使う。学習と推論のモード、それぞれの設定を確認しよう。
ひよこ ひよこ
バッチが小さい場合も使える?
ペンギン先生 ペンギン先生
統計量の推定が不安定になる場合があるよ。別の手法として、チャンネルをグループに分け、バッチの大きさに依存せず平均・分散を計算するGroup Normalizationがある。どの手法が適切かは、モデルとデータで確かめるんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「BatchNorm」って出てきたら「バッチの統計で中間値を整え、学習する係数で調整する手法」と思えばだいたいOK!
📖 おまけ:英語の意味
「Batch Normalization」 = バッチ単位の正規化
💬 Sergey IoffeとChristian Szegedyが2015年に提案した手法だよ。学習時にミニバッチの統計量を使って値を整えることを表す名前なんだ。

参考資料

← 用語集にもどる