【ディープラーニング基礎⑪】正規化層とバッチ正規化、その他正規化手法

2024/12/26に公開

はじめに

ディープラーニングは正規化層とよばれる層があります。これを実現するためのバッチ正規化についてまとめました。その他の正規化手法である重み正規化、重み標準化、白色化についてもまとめました。

正規化層の役割

正規化層は、ニューラルネットワークの各層におけるデータ分布を調整することで、学習の安定性や効率を向上させる役割を担います。これは、学習中に層の入力データのスケールや分布が大きく変化することを防ぎ、勾配消失や勾配爆発といった問題を軽減します。

正規化層の主な目的

  1. 内部共変量シフトの軽減

    • 内部共変量シフトとは、ネットワークの中間層で各ノードが受け取る入力の分布が学習中に変動する現象を指します。この変動を抑えることで学習がスムーズになります。
  2. 学習の高速化

    • データを正規化することで、モデルのパラメータ更新が効率的になり、収束が速くなります。
  3. モデルの安定性向上

    • 特徴量間のスケールの違いを抑えることで、学習率の設定に敏感になりにくく、モデルが安定して学習します。
  4. 過学習の抑制

    • 一部の正規化手法は、ノイズのような効果を持ち、過学習を抑える役割も果たします。

1.バッチ正規化(Batch Normalization)

バッチ正規化は、特にディープラーニングにおいて使用される正規化層の代表的な手法で、各層の入力または中間層の出力を調整して安定化させます。

仕組み

  1. ミニバッチ内の統計量を計算
    ミニバッチ単位で入力データの平均 \mu_B と分散 \sigma_B^2 を計算します:

    \mu_B = \frac{1}{m} \sum_{i=1}^m x_i, \quad \sigma_B^2 = \frac{1}{m} \sum_{i=1}^m (x_i - \mu_B)^2

    ここで、m はミニバッチサイズ、x_i はバッチ内のサンプル。

  2. データを正規化
    バッチ内のデータを平均0、分散1にスケール変換します:

    \hat{x}_i = \frac{x_i - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}}

    \epsilon は数値安定性のための微小量。

  3. スケールとシフトの適用
    学習可能なパラメータ(スケール \gamma とシフト \beta を導入して表現力を向上させます:

    y_i = \gamma \hat{x}_i + \beta

バッチ正規化の挙動

  • 訓練時
    ミニバッチごとに計算した平均と分散を使用します。

  • 推論時
    訓練中に計算した移動平均を用いて正規化を行います。

主なメリット

  1. 学習率の柔軟化
    高い学習率でも学習が安定しやすくなります。理由は目的関数が真円に近づき、勾配がより安定して目的関数の値を下げる方向を目指すことが可能になるからです

  2. 勾配消失や勾配爆発の軽減
    各層の出力が適切な範囲に収まるため、勾配が極端な値を取るリスクを減らします。

  3. 学習の高速化
    内部共変量シフトの影響を抑えることで収束が早まります。

  4. 正則化効果
    バッチ正規化はミニバッチごとに動作するため、学習中に軽いノイズのような効果を与え、過学習を抑制することがあります。

正規化層としてのバリエーション

  1. バッチ正規化(Batch Normalization)
    ミニバッチ単位で正規化する。

  2. 層正規化(Layer Normalization)
    各サンプルの全特徴に対して正規化する。RNNなど、ミニバッチに依存しにくい用途で有効。

  3. インスタンス正規化(Instance Normalization)
    各サンプル・特徴マップごとに正規化する。主にスタイル変換タスクで利用。

  4. グループ正規化(Group Normalization)
    チャネルをグループに分けて正規化する。ミニバッチサイズに依存しない。

以下に「重み正規化」「重み標準化」「白色化」について、それぞれの概要や目的を簡潔にまとめます。

2. 重み正規化(Weight Normalization)

概要

  • ニューラルネットワークの重みベクトルを、そのノルム(長さ)と方向に分解し、ノルムのスケール調整を独立に学習する手法。
  • ネットワークの収束を速める効果が期待されます。

手法

重み \mathbf{w} を以下のように分解します:

\mathbf{w} = \frac{\mathbf{v}}{\|\mathbf{v}\|} \cdot g
  • \mathbf{v}: 重みベクトルの方向を示すベクトル
  • g: 重みのスケール(学習可能なパラメータ)

目的

  1. 学習の安定化
    重みの大きさと方向を分離することで、学習がより効率的になります。
  2. 勾配の調整
    勾配が極端に大きくなったり小さくなったりする問題を軽減します。
  3. 学習率の自動調整
    \mathbf{v}が大きくなるので学習するにつれて学習率が低減していきます。

適用例

  • 畳み込み層や全結合層などに適用可能。
  • 強化学習や生成モデルで効果的とされています。

3. 重み標準化(Weight Standardization)

概要

  • 重みの分布を標準化する手法で、特に畳み込みニューラルネットワーク(CNN)で使用されます。
  • 重みの各要素が均一な分布になるよう調整します。

手法

重みの各フィルタ(特徴マップ)について、以下のように標準化を行います:

w'_{ij} = \frac{w_{ij} - \mu}{\sigma}
  • \mu: 各フィルタの平均
  • \sigma: 各フィルタの標準偏差

目的

  1. 学習の効率化
    標準化により、勾配の安定性が向上します。
  2. 過学習の抑制
    重みのスケールのばらつきを抑えることで、モデルの汎化性能が向上します。

適用例

  • ResNetなどのCNNアーキテクチャで利用されることが多い。

4. 白色化(Whitening)

概要

  • データの分布を正規化する手法の一つで、データを無相関化し、分散を均一化することを指します。
  • 主にデータ前処理やニューラルネットワークの入力データ調整に用いられます。

手法

  1. データの中心化
    平均を0にする:

    x' = x - \mu
  2. 共分散行列の計算
    データの共分散行列 \Sigma を計算。

  3. 共分散行列の正規化
    主成分分析(PCA)やゼロフェーズ成分解析(ZCA)などを用い、共分散行列を単位行列に変換:

    x'' = W x'
    • W: 白色化変換行列。

目的

  1. 特徴量間の相関を除去
    特徴量が独立することで、学習が効率的になります。
  2. 分散の均一化
    各特徴量のスケールを同じにすることで、モデルのバイアスを防ぎます。

適用例

  • 主成分分析(PCA)や畳み込みニューラルネットワークのデータ前処理。
  • 画像認識などのタスクでよく用いられます。

比較まとめ

手法 主な目的 適用対象 特徴
重み正規化 学習の安定化、収束の高速化 重み(パラメータ) ノルムと方向の分離で調整
重み標準化 学習効率化、汎化性能向上 重み(フィルタ) フィルタ単位で分布を標準化
白色化 入力データの無相関化、分散均一化 入力データ 特徴量間の依存性を除去する

Discussion