深層学習

正規化手法の使い分け

正規化する軸をバッチ・特徴・グループ・インスタンスで見分け、バッチサイズ、系列長、学習と推論の条件から手法を選びます。

  • A|中核
  • 深層学習

数式の記号で止まったら 記号の読み方 (∂・⊙・転置・上付き添字を、読み方から)

ひとことで言うと

正規化手法の選択は、式の形よりも「どの軸の値を一緒にして平均と分散を計算するか」で決まります。BNはバッチをまたぎ、LNは1サンプルの特徴をまたぎ、GNは1サンプル内のチャネルをグループに分け、INは1サンプル・1チャネル内の空間要素を使います。同じテンソルに平均と分散を適用していても、束ねる軸が違えば別の挙動です。

温度計をそろえるとき、同じ時刻に測った全員の値を基準にするのがBN、1人の持つ複数のセンサーを基準にするのがLN、センサーをいくつかの部署に分けて部署ごとに基準を作るのがGN、1人の1種類のセンサーだけで基準を作るのがINです。人数が毎回変わる現場では、全員基準だけが不安定になります。

なぜ必要か

実装で最初に見るべきなのは、正規化層の名前ではなく入力の形状と運用条件です。画像の畳み込み層で、十分な枚数を同時に処理できるなら、チャネルごとにバッチ統計を共有するBNが候補になります。大きなモデルを高解像度画像で学習するとGPUメモリの都合でバッチが2や4まで下がることがあります。このときBNは、統計を推定する人数そのものが少なく、更新ごとに基準が揺れます。GNはチャネルを群に分けて1サンプル内で統計を取るので、この制約をバッチ軸から切り離せます。

一方、系列モデルでは系列長がサンプルごとに異なることがあります。BNではパディングを統計に含めるか、マスクを統計計算にも反映するかを考えなければなりません。時刻ごとの隠れ状態を特徴方向に正規化するLNなら、他のサンプルの長さや値に依存しません。可変長だから必ずLNではありませんが、バッチ統計とマスクの整合性を設計できないならLNの方が判断しやすいです。

さらに、学習と推論の境界も選択軸です。BNは学習中のミニバッチ統計と、推論時の蓄積統計を切り替えます。したがって、学習時に見たバッチ分布と本番入力の分布がずれると、蓄積値の質が結果に影響します。LN、GN、INは通常、各サンプルからその都度統計を作るため、BNのような移動平均を持ちません。推論時も入力単体の値から計算できることは、バッチを1件ずつ処理するサービスや、学習済みモデルを別のバッチ構成へ移す場合に有利です。

まず確認する条件その条件が選択に与える意味
バッチを十分に確保できるかできるならBNの候補性が上がり、できないならGN・LN・INを比較する
サンプル間で統計を共有してよいか共有してよいならBN、独立させたいならバッチ非依存の手法を選ぶ
推論を1件ずつ行うかBNの蓄積統計の品質を確認し、入力から毎回計算する手法も候補にする
パディングやマスクがあるかバッチ・系列軸の統計に無効値が混ざらない軸設計を優先する

仕組み

入力をバッチ NN、チャネル CC、空間または系列方向 SS のテンソル xn,c,sx_{n,c,s} とします。ここで nn はサンプル、cc はチャネル、ss は空間位置または時刻です。各手法の違いは、平均 μ\mu と分散 σ2\sigma^2 の添字をどこまで残すかです。

手法1つの統計にまとめる軸バッチサイズへの依存典型的な判断
BNnn と必要な ss、ただし cc は残す依存する十分なバッチを組める画像学習
LN1サンプル内の特徴軸(設計した c,sc,s)依存しない系列・可変長・バッチ1の処理
GN1サンプル内でまとめたチャネル群と ss依存しない小バッチの畳み込みモデル
IN1サンプル・1チャネルの ss依存しないサンプルごとの外観差を消したい画像処理

正規化の共通部分だけを書けば、統計を取る集合を AA として、

μA=1∣A∣∑i∈Axi,σA2=1∣A∣∑i∈A(xi−μA)2,x^i=xi−μAσA2+ϵ\mu_A=\frac{1}{|A|}\sum_{i\in A}x_i,\qquad \sigma_A^2=\frac{1}{|A|}\sum_{i\in A}(x_i-\mu_A)^2,\qquad \hat{x}_i=\frac{x_i-\mu_A}{\sqrt{\sigma_A^2+\epsilon}}

となります。AA は統計を共有する要素の集合、∣A∣|A| はその要素数、ϵ\epsilon はゼロ除算を防ぐ定数です。BNなら同じチャネルのバッチ要素が AA に入り、GNなら同じサンプルの同じグループに属するチャネルが入ります。LNとINの境界も同じ見方で切れます。LNは特徴全体を、INはチャネルごとの空間要素を集合にするためです。

BNだけは、推論用に学習中の統計を保存します。学習ステップ tt のバッチ平均を μB(t)\mu_B^{(t)}、保存値を r(t)r^{(t)}、更新係数を α\alpha とすれば、代表的には

r(t)=αr(t−1)+(1−α)μB(t)r^{(t)}=\alpha r^{(t-1)}+(1-\alpha)\mu_B^{(t)}

のように更新します。r(t)r^{(t)} は推論で使う移動平均です。係数の向きや実装上の補正はライブラリで異なり得ますが、判断上重要なのは「BNは推論時に現在のバッチ統計をそのまま使わず、学習時に蓄積した状態を使う」点です。LN、GN、INではこの状態を持たず、学習と推論で同じ軸の統計を入力から計算します。

試験でどう問われるか

問われ方正解に寄る条件引っかけ
統計を取る軸の比較BNはバッチ、LNは特徴、GNはチャネル群、INはサンプル内のチャネルごとの空間「正規化層は全要素を一括で標準化する」とする
小バッチでの選択BNは推定が揺れやすい。GNやLNなどバッチ非依存を候補にするバッチが小さいほどBNの統計が精密になる
学習・推論の違い移動平均・移動分散を保存して切り替えるのはBNLNやGNも推論用移動平均を必ず持つ
可変長の系列他サンプルやパディングに依存しにくい特徴軸のLNを検討する可変長なら全手法を無条件に使えないとする
GNの説明1サンプル内のチャネルを複数群に分けるバッチを複数群に分ける

実装で確かめる

軸の違いをNumPyで固定します。x の形を (batch, channel, position) とし、BNはバッチと位置、LNはチャネルと位置、GNは指定したチャネル群と位置をまとめます。実際のライブラリでは、マスクやレイアウト変換がこの軸対応を壊していないかを確認します。

import numpy as np

x = np.arange(2 * 4 * 3, dtype=float).reshape(2, 4, 3)
def standardize(x, axes):
    mean = x.mean(axis=axes, keepdims=True)
    var = x.var(axis=axes, keepdims=True)
    return (x - mean) / np.sqrt(var + 1e-5)

bn = standardize(x, (0, 2))
ln = standardize(x, (1, 2))
gn = standardize(x.reshape(2, 2, 2, 3), (2, 3)).reshape(2, 4, 3)
assert np.allclose(bn.mean(axis=(0, 2)), 0)
assert np.allclose(ln.mean(axis=(1, 2)), 0)
assert np.allclose(gn.reshape(2, 2, 2, 3).mean(axis=(2, 3)), 0)

この確認で大切なのは、平均が0になること自体ではなく、どの添字を平均から消したかです。axis を取り違えてもコードは実行でき、別の正規化として値を返します。BNなら学習モードと推論モードを分け、推論時に同居例を変えても結果が意図せず変わらないことを確認します。

取り違えやすいもの

判断軸BNLNGNIN
統計の共有範囲サンプル間で共有1サンプルの特徴全体1サンプルのチャネル群1サンプル・1チャネル
小バッチ不利になりやすい影響なし影響なし影響なし
移動平均推論用に持つ持たない持たない持たない
系列長の変化マスクと軸設計が必要時刻ごとに適用しやすい主に畳み込みのチャネル設計向き空間・時刻方向の情報を個別にそろえる

「バッチに依存しない」だけでLN、GN、INを同一視しないことが要点です。系列の隠れ状態を特徴方向に整えるならLN、画像のチャネル表現を群で保つならGN、サンプルごとのチャネル内の外観をそろえるならINです。GNのグループ数を変えると、全チャネルをまとめるLN寄りから、1チャネルずつにするIN寄りまで挙動が変わります。手法名より、正規化後にも残したい相関の範囲を軸で指定する方が実装の移植に強いです。

想起チェック

4手法を分ける最初の判断軸は何か

平均と分散を計算する集合、つまりバッチ・特徴・チャネル群・チャネル内空間のどの軸をまとめるかです。

学習時と推論時に移動平均を使い分ける代表的な手法は何か

BNです。学習中のミニバッチ統計を蓄積し、推論ではその移動平均・移動分散を使います。LN、GN、INは通常、入力サンプルから同じ軸の統計を計算します。

小バッチの画像モデルでBN以外を検討する理由は何か

BNはバッチ統計の推定に依存し、例数が少ないと基準が揺れやすいからです。GNは1サンプル内のチャネル群、LNやINもバッチ外の軸から統計を作るため候補になります。

可変長系列でLNを候補にする条件は何か

各時刻の隠れ状態を特徴方向に正規化し、他サンプルの長さやパディングを統計に混ぜない設計にできる場合です。可変長という事実だけで自動的に決まるわけではありません。

出典