バッチ正規化
バッチ正規化(BatchNorm)は、学習時の統計グループから求めた平均と分散で隠れチャネルを標準化し、学習可能な倍率 γ とオフセット β を適用します。本課の 6 層ネットワークでは、エポック 50 の活性値のピークが 64.35 から 9.15 に、ホールドアウト BCE が 0.6911 から 0.0985 に下がります。1 チャネルの変換を確認した後、最適化の 1 更新を 32 例に固定して統計グループだけを変えます。
ステップ:1 チャネルの四つの変換
全結合層のあるチャネルに、統計グループ内の Nstats 個の値 z₁, …, zᴺ があるとします。添字 B はバッチ統計量を表します。
μᴮ = (1 / Nstats) Σᵢ zᵢ
σ²ᴮ = (1 / Nstats) Σᵢ (zᵢ − μᴮ)²
分散の分母は Nstats です。続いて標準化し、アフィン変換を適用します。
ẑᵢ = (zᵢ − μᴮ) / √(σ²ᴮ + ε)
yᵢ = γẑᵢ + β
本課では ε = 10⁻⁵ を使います。値がすべて同じなら分散はゼロです。ε はゼロ除算を防ぎ、逆伝播も同じ分母を使います。
表示するのは第 4 層のチャネル 1 で、各点が統計グループの 1 例です。平均を引くと点群の中心がゼロへ移り、標準偏差で割ると広がりが変わって分散が 1 に近づきます。γ = 1、β = 0 は恒等変換から始まり、他のパラメータとともに学習されます。その出力に ReLU を適用します。
統計を取る軸
全結合層では、特徴チャネルごとに μᴮ、σ²ᴮ、γ、β を持ち、グループのサンプル軸で統計を取ります。各サンプルのチャネル間で正規化する層正規化などとは異なります。全層・全チャネルを一つの平均にまとめる操作も別物です。「活性値を正規化する」だけでは軸が分かりません。
学習と評価で使う統計量
学習では現在の統計グループの平均と分散を使います。本課は比較条件をそろえるため、32 例の最適化バッチ全体から、更新ごとに 1 回だけ移動統計量を更新します。モメンタム 0.9 では次の式です。
μrun ← 0.9 μrun + 0.1 μopt(32)
分散も同じ更新形式です。μopt(32) は小グループではなく 32 例全体の平均です。
評価では蓄積した平均と分散を使います。ホールドアウトの 1 例から再推定せず、一緒に評価する他の例にも依存しません。モデルと入力を固定すれば通常の推論は再現できます。評価時も現在のグループ統計を使うと、配備する推論ネットワークとは別の手順を測ることになります。
6 層ネットワークの比較
両レーンは 2 → 12 × 6 → 1 の ReLU ネットワークを、固定した two-moons の学習点 64 個で学習し、400 個のホールドアウト点で評価します。出力は sigmoid、損失は二値交差エントロピーです。ミニバッチ SGD は 1 更新につき 32 例を使います。初期重みは固定したガウス標本で、標準偏差 2.5 / √fan_in は 6 層の学習を活性値のスケールに敏感にする設定です。
既定値は最適化バッチ B = 32、統計グループ Nstats = 32、学習率 η = 0.1 です。エポック 50 では、正規化なしの最大の生の隠れ層前活性値が 64.35、ホールドアウト BCE が 0.6911 で、分類がほぼ停滞します。BatchNorm はそれぞれ 9.15、0.0985 です。
エポック 300 では BatchNorm の BCE は 0.0572、正解率は 98% です。正規化なしも後に回復し、BCE は 0.0901 に達します。エポック 50 の値は、その前の不安定な経路を示しています。BatchNorm が変えたのは最終値だけでなく学習軌跡です。ただし、初期化、残差経路、最適化手法、活性化関数、データの尺度、構造でも結果は変わります。BatchNorm なしなら必ず発散するという定理ではありません。
統計グループの大きさ
2 例だけの平均・分散は、元の分布が同じでも変動しやすくなります。固定したチャネルの値の集合から、シードを固定して 8 回再標本化すると、Nstats = 2 の平均は 32 より広い範囲に散ります。
学習比較では最適化バッチを 32、1 エポックの更新を 2 回に固定し、統計グループだけを変えます。エポック 300 で Nstats = 32 は BCE 0.0572、正解率 98%、Nstats = 2 は 2.3795、37.5% です。通常の小バッチ化による勾配ノイズや更新回数と、統計推定の粒度を切り分けています。
32 が普遍的な下限ではありません。少数例の統計では学習時の変換が不安定になりうる、という実験です。代表性のあるグループを作れない場合は、別の軸で統計を取る層正規化やグループ正規化も候補になります。
操作項目
統計グループは 2、8、32 から選びます。BatchNorm レーンが 32 個の生の活性値を分割する方法だけが変わり、最適化は毎回 32 例、毎エポック 2 更新のままです。
学習率は 0.003、0.03、0.1 で、両レーンに同じ値を使います。「Slow steps」は Nstats = 32、η = 0.003 です。安定していますが、300 エポックの予算ではホールドアウト BCE は 0.4586 にとどまります。安定性と速さは別の評価です。
境界ケース
- 一定値のチャネル:分散はゼロです。
εが有限な計算を保ち、標準化後はすべてゼロになってからγ、βを適用します。 - 1 例のグループ:分散は必ずゼロで、中心化した信号が消えます。式は計算できますが本課の層の学習には適さないため、選択肢は 2 例からです。
- 2 例のグループ:信号は残りますが、この実験では推定の変動により正解率が偶然水準を下回ります。
- 未学習の移動統計量:初期化直後に評価モードへ切り替えてもデータ分布は分かりません。代表性のある推定値を蓄積する必要があります。
よくある間違い
- 平均を引くだけで済ませ、分散によるスケーリングや
γ、βを省く。 - 軸を取り違える。全結合 BatchNorm はチャネルごとにサンプル軸で統計を取ります。
εを省き、一定またはほぼ一定のチャネルで分母を不安定にする。- 推論に現在のバッチ統計を使い、他の評価例に予測を依存させる。
- 最適化バッチと統計グループを混同する。2 例で計算できることは、推定が学習に十分なことを意味しません。
- BatchNorm を万能な解決策と考える。最適化や正則化に役立っても、すべての構造・データ・学習率・バッチ設定を直せるわけではありません。
- データ、初期化、最適化手法、学習率、予算を変えた実験から一つの機構を結論づける。
モデルの範囲
固定シードの合成 two-moons、小型全結合ネットワーク、sigmoid/BCE、32 例の SGD を使い、各隠れアフィン層の後、ReLU の前に BatchNorm を置きます。学習は仮想統計グループに分割できますが、移動統計量は 32 個の生の活性値から 1 回更新し、評価用統計の更新方法を追加の変更要因にしません。
入力、初期パラメータ、移動統計量、確定したパラメータを小数点以下 11 桁に量子化し、ブラウザと Node で長い軌跡を一致させます。指標は 10 エポックごとに採取し、10、50、300 の正確なチェックポイントも保持します。実際には畳み込み版や同期 BatchNorm、混合精度、異なるモメンタム規約、残差接続、微調整時の統計量の固定などもあります。本課は学習時の統計の境界を調べるもので、すべてのモデルへの導入を勧めるものではありません。
続けて学ぶ
同じ手法につながるレッスンや、次の概念への入口です。
鍵マークのあるレッスンの操作には有料アクセスが必要です。解説はすべて無料で読めます。
誤りや気になる点を見つけましたか? フィードバックを送る。