BatchNorm、LayerNorm、InstanceNorm、および GroupNorm

1 はじめに

ここに画像の説明を挿入

  • Batch Norm :NHW正規化パラメータ (平均と分散) を計算し、Cグループ正規化パラメータの合計を取得します。これは、channelそれぞれを正規化するのと同じです。BN は主にペアのサイズの比較缺点です。平均と分散はバッチごとに毎回計算されるため、バッチサイズが小さすぎる場合、計算された平均と分散はデータ分布全体を表すのに十分ではありません。batchsize敏感
  • Layer Norm :CHW正規化パラメータを計算するために、N(バッチ) グループ正規化パラメータが取得されます。バッチの場合、これは 1 であり、フィーチャ マップ全体を正規化するのと同等です。主に RNN と Transformer に明らかな影響を及ぼし、大きな変化のある入力データには適していません。大Batch较差
  • Instance Norm :HW正規化パラメータの計算では、グループ正規化パラメータの合計N*Cが出力されます。これは、各チャネルおよび各バッチの正規化に相当します。优点:イメージスタイルの転送に適用されますが、缺点:チャネル間の相関が強いデータには適していません。
  • **GroupNorm: **チャネル方向をグループに分割し、各グループで正規化を実行して (C//G)HW の平均値を計算します。これはバッチサイズとは関係がなく、それに束縛されません。

1.1 バッチノルム

torch.nn.BatchNorm1d(num_features, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
torch.nn.BatchNorm2d(num_features, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
torch.nn.BatchNorm3d(num_features, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)

パラメータ:

  • num_features: サイズ「batch_size x num_features[x width]」の目的の入力からの特徴の数
  • eps: 数値の安定性を確保するため (分母が 0 に近づかない、または 0 を取ることができない)、分母に加算される値。デフォルトは 1e-5 です。
  • 勢い: 動的平均と動的分散に使用される勢い。デフォルトは 0.1 です。
  • affine: ブール値。true に設定すると、学習可能なアフィン変換パラメータがこのレイヤーに追加されます。
  • track_running_stats: ブール値を true に設定すると、トレーニング中の平均と分散が記録されます。

実装式:
ここに画像の説明を挿入

1.2 グループノルム

torch.nn.GroupNorm(num_groups, num_channels, eps=1e-05, affine=True)

パラメータ:

  • num_groups: グループに分ける必要がある
  • num_features: サイズ「batch_size x num_features[x width]」の予想される入力からの特徴の数
  • eps: 数値の安定性を確保するため(分母が 0 に近づかない、または 0 を取ることができない)、分母に加算される値。デフォルトは 1e-5 です。
  • momentum: 動的平均と動的分散に使用される運動量。デフォルトは 0.1 です。
  • affine: ブール値を true に設定すると、学習可能なアフィン変換パラメータがこのレイヤーに追加されます。

実装式:
ここに画像の説明を挿入

1.3 インスタンスノルム

torch.nn.InstanceNorm1d(num_features, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False)
torch.nn.InstanceNorm2d(num_features, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False)
torch.nn.InstanceNorm3d(num_features, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False)

パラメータ:

  • num_features: サイズ「batch_size x num_features[x width]」の目的の入力からの特徴の数
  • eps: 数値の安定性を確保するため (分母が 0 に近づかない、または 0 を取ることができない)、分母に加算される値。デフォルトは 1e-5 です。
  • 勢い: 動的平均と動的分散に使用される勢い。デフォルトは 0.1 です。
  • affine: ブール値。true に設定すると、学習可能なアフィン変換パラメータがこのレイヤーに追加されます。
  • track_running_stats: ブール値を true に設定すると、トレーニング中の平均と分散が記録されます。

実装式:
ここに画像の説明を挿入

1.4 レイヤーノルム

torch.nn.LayerNorm(normalized_shape, eps=1e-05, elementwise_affine=True)

パラメータ:

  • Normalized_shape: 入力サイズ
  • [∗×正規化形状[0]×正規化形状[1]×…×正規化形状[−1]]
  • eps: 数値の安定性を確保するため (分母が 0 に近づかない、または 0 を取ることができない)、分母に加算される値。デフォルトは 1e-5 です。
  • elementwise_affine: ブール値。true に設定すると、学習可能なアフィン変換パラメータがこのレイヤーに追加されます。

実装式:

ここに画像の説明を挿入

2. バッチ正規化

Ioffe S、Szegedy C. バッチ正規化: 内部共変量シフトを削減することでディープ ネットワーク トレーニングを加速する[C]//機械学習に関する国際会議。PMLR、2015: 448-456。

ここに画像の説明を挿入

2.1 理由を述べる

1. ニューラル ネットワークのトレーニングのプロセスでは、通常、データのバッチがトレーニング用に入力されるため、各バッチの分布が異なるため、モデルのトレーニングが比較的困難になります。

2. 内部共変量シフト (ICS) 問題: 深いネットワークをトレーニングする場合、活性化関数によって各層のデータの分布と大きさが変化します。ネットワークが深くなるにつれて、この変化はますます大きくなり、モデルは不安定になります収束しにくく、さらには勾配消失の問題が発生する可能性があります。

次に、以下の 2 つのアニメーションを見てみましょう。これは、ニューラル ネットワークの各層でバッチ正規化があるかどうかの違いです。

図* BN なしのモデル重量分布

図* BNを使用したモデル重量分布

没有normalization 的输出数据很多都等于0,导致后面的神经元“死掉”,起不到任何作用。

2.2 原則

BN の主なアイデア: チャネル次元に沿って、バッチ次元で (N、H、W) の平均と分散を計算し、特徴マップを正規化することで、データ分布が一貫しているだけでなく、グラデーションが消えます。データが正規化されるたびに、元の学習された特徴が保持されることが保証され、同時に正規化操作を完了してトレーニングを高速化できます。

計算プロセス:

  • チャネルに沿った各バッチの平均μ \muを計算しますμと分散σ \sigmap
  • 正規化を行う
  • スケーリングγ \gammaを追加γと翻訳β \betaβ学習可能変数

ここに画像の説明を挿入

2.3 BNの使用

BN の問題の 1 つは、トレーニング中のバッチ サイズは通常大きくなりますが、テスト中のバッチ サイズは通常 1 であり、平均と分散の計算がバッチに依存するため、トレーニングとテストの間で不一致が発生することです。BN ソリューションは、テスト中の正規化パラメーターとしてトレーニング中に平均と分散を推定することです。一般に、各ミニバッチの平均と分散は、この値を取得するために指数関数的に重み付けされます。このようにして、トレーニングとテストの間の不一致が解決され、トレーニング中に平均と分散が計算され、平均と分散が推論に使用されます。

BN が使用される場所: アクティベーション関数の前、ResNet V1: conv>BN>Relu 構造体、resnet v2 は BN>Relu>conv 構造体を使用します。ただし、いずれの場合も、BN はアクティベーション前に使用されます。

torch.nn.BatchNorm1d(num_features, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True, device=None, dtype=None)  # 1维
torch.nn.BatchNorm2d(num_features, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True, device=None, dtype=None)  # 2维

アドバンテージ

  • BN は、ネットワーク内の各層の入力データの分布を比較的安定させます。これにより、トレーニング速度が大幅に向上するだけでなく、収束プロセスも大幅に加速されます。
  • BN は、ネットワーク内のパラメーターに対するモデルの感度を下げ、初期化への強い依存を弱め、パラメーター調整プロセスを簡素化し、ネットワーク学習をより安定させます。
  • BN を使用すると、ネットワークが飽和した活性化関数 (シグモイド、タン関数など) を使用して、勾配消失の問題を軽減できるようになります。
  • より大きな学習率が可能になります
  • これにはわずかな正則化効果 (ドロップアウトと同様に、隠れ層にノイズを追加するのと同じ) があり、過学習を軽減できます。深いネットワークは過学習する傾向があり、ドロップアウトではそれを解決できない場合があります。したがって、場合によっては BN がドロップアウトの代わりになることもあります

欠点がある

  • 1. バッチサイズが小さすぎると、BN 効果が大幅に低下します。

バッチ サイズが小さすぎる場合、計算された平均と分散はデータ分布全体を表すのに十分ではありません。バスのサイズが小さいとランダム性が大きくなり、収束を達成することが困難になります。ターゲット検出モデルなどの比較的大きなモデルの場合、メモリの制限によりバッチ サイズを大きくすることが難しく、現時点では BN 層が制限となる可能性があります。

  • 2. バッチ サイズが大きすぎる場合: メモリ容量を超えます。より多くのエポックを実行する必要があるため、合計トレーニング時間が長くなります。深層学習の最適化 (トレーニング損失を削減できない) と汎化 (汎化ギャップが大きい)問題が発生します。局所最適化があるかもしれない

  • 3. RNN およびその他の動的ネットワークは BN を使用しており、効果がなく、使用が不便です

実際にBNを利用する際には、ある層のニューラルネットワークバッチの平均や分散などの統計情報を計算して保存する必要がありますが、固定深さのフォワードニューラルネットワーク(DNN、CNN)にBNを利用すると非常に便利です。

RNN の場合、その構造は静的ネットワークのように見えますが、入力シーケンス シーケンスが可変長であるため、実際に実行して展開すると動的ネットワーク構造になります。これは、トレーニング サンプルが同じミニ内にあるという事実から来ます。バッチにはさまざまな長さがあります。RNN のような動的なネットワーク構造の場合、BN を適用するには RNN の各タイム ステップが独自の統計を維持する必要があり、ミニバッチのトレーニング サンプルの長さが異なるため、BN は使用が不便です。つまり、RNN の隠れ層は異なるタイム ステップでは異なる量の入力データが表示されるため、BN を適切に使用する際に問題が発生する可能性があります。ミニバッチに特に長い例が少数しかないと仮定すると、深いタイムステップ深度を持つ RNN ネットワークの隠れ層の場合、その統計はカウントするのが不便であり、その統計的妥当性も非常に疑わしいです。さらに、推論フェーズで非常に長いサンプルに遭遇した場合、トレーニングフェーズでディープネットワークの統計をまったく取得できない可能性があります。要約すると、RNN のような動的ネットワークで BN を使用するのは不便であり、BN の多くの改良バージョンが一般に RNN に適用されます。

  • 4. 画像セグメンテーションなどのタスクの場合、バッチ サイズは 1 桁しかなく、ビデオ メモリがいくら大きくても十分ではありません。バッチ サイズが 1 桁の場合、複数のサンプルのデータ量を通じて母集団の平均と標準偏差を近似する方法がないため、BN のパフォーマンスは低下します。GN はバッチからも独立しています。

  • 5. 一部のピクセルレベルの画像生成タスクでは、BN 効果は良好ではありません。

画像分類などのタスクでは、主要な特徴が見つかっていれば正しく分類できますが、これは粗粒度のタスクですが、この場合、BN は通常プラスの効果をもたらします。ただし、画像スタイル変換やその他のアプリケーション シナリオなど、入力と出力が画像である一部のピクセル レベルの画像生成タスクでは、BN を使用すると悪影響が生じます。これはおそらく、複数の無関係な画像間の統計の計算が原因であると考えられます。ミニバッチでは、この量により、単一の画像自体に固有の一部の詳細が弱められます。

3. レイヤーの正規化

Ba JL、Kiros JR、Hinton GE. レイヤー正規化[J]。arXiv プレプリント arXiv:1607.06450、2016。

ここに画像の説明を挿入

3.1 理由を述べる

バッチ正規化の原理は前に紹介しましたが、BN 層は CNN でのモデルのトレーニングを加速し、モデルの過剰適合や勾配の消失を防ぐことができることがわかっています。ただし、BN 層を RNN に直接適用することが可能であれば、原理的には可能ですが、バッチ正規化がミニバッチに基づいて標準化されていることがわかっているため、いくつかの問題が発生します。サンプルが異なると、その長さが異なることがよくあります。したがって、各タイム ステップでもバッチ正規化を使用すると、その正規化は異なるタイム ステップのテキストごとに適用されることになります。したがって、これは不合理です。また、テスト中に、テスト テキストがトレーニング テキストの長さよりも長い場合、バッチ正規化にも問題が発生します。したがって、RNN では通常、バッチ正規化はあまり使用しませんが、非常によく似たアプローチであるレイヤー正規化を使用します。

3.2 原則

レイヤー正規化の考え方はバッチ正規化と非常に似ていますが、バッチ正規化が各ニューロンのミニバッチ サイズのサンプルを正規化するのに対し、レイヤー正規化は各レイヤーの単一サンプルのすべてのニューロン ノードを正規化する点が異なります。 、W、および H 次元は、正規化のための平均と分散を計算します (現在のレイヤーはバッチ サイズの平均と分散の合計を計算し、各バッチ サイズは個別に正規化されます)。LN はバッチ トレーニングを必要とせず、単一のデータ内で正規化できます。

3.3 計算プロセス

ここに画像の説明を挿入

torch.nn.LayerNorm(normalized_shape, eps=1e-05, elementwise_affine=True, device=None, dtype=None)

アドバンテージ

LN の利点の 1 つは、バッチ トレーニングが必要ないことです。正規化操作は 1 つのデータ内で完了できるため、batch_size=1 および RNN トレーニングで使用できます。RNN では、レイヤー正規化を使用する効果はバッチ正規化よりも優れています。入力サンプルが異なると、平均と分散も異なります。 、最適な効果をより速く、より良く達成できます。LN はミニバッチの平均と分散を保存する必要がないため、追加の保管スペースが節約されます。

欠点がある

LN はバッチ サイズとは関係がありません。小さなバッチ サイズでは効果が BN よりも優れている可能性がありますが、大きなバッチ サイズでは BN の方が優れた効果があります。LN は、同じ変換を取得するためにニューロンの層全体をトレーニングします。すべての入力は同じ間隔範囲内にあります。異なる入力フィーチャが同様のカテゴリ (色やサイズなど) に属さない場合、LN の処理によりモデルの表現力が低下する可能性があります。

4. インスタンスの正規化

Ulyanov D、Vedaldi A、Lempitsky V. インスタンスの正規化: 高速な様式化に欠けている要素[J]。arXiv プレプリント arXiv:1607.08022、2016。
ここに画像の説明を挿入

3.1 理由を述べる

BN はバッチサイズデータの正規化に注意を払っていますが、画像スタイル化タスクでは、生成されたスタイル結果は主に特定の画像インスタンスに依存するため、バッチサイズデータ全体を正規化するのは不適切であるため、IN は HW に対してのみ提案されます。次元は正規化されています。

3.2 原則

IN は N と C の次元を保持し、チャネル内の H と W の平均と標準偏差のみを計算します。

3.3 計算プロセス

ここに画像の説明を挿入

アドバンテージ

IN は、画像スタイルの転送などの生成モデルに適しています。画像生成の結果は主に特定の画像インスタンスに依存するため、バッチ全体に対する正規化操作は画像のスタイル化のタスクには適していません。スタイル転送に IN を適用すると、モデルの収束を高速化できるだけでなく、差分を維持することもできます。各イメージ インスタンス間の独立性。IN の計算は、各 HW を個別に取り出して正規化することであり、チャネルやバッチ サイズの影響を受けません。

欠点がある

特徴マップがチャネル間の相関を使用できる場合、それを正規化に使用することはお勧めできません。

5.グループの正規化

Wu Y、He K. グループ正規化[C]//コンピューター ビジョンに関する欧州会議 (ECCV) の議事録。2018: 3-19。

ここに画像の説明を挿入

5.1 理由を述べる

GN は、バッチサイズが小さい場合に BN の効果が低いという問題を解決するものです。LN はバッチ サイズに依存しませんが、CNN の現在の層のすべてのチャネル データを直接正規化することはあまり良いことではありません。

BN がバッチ上で正規化される場合、次元は固定されません。たとえば、トレーニング中に、トレーニング セット上で正規化された値が計算され、テスト中に直接使用されますが、トレーニング中に偏差がある場合、テスト セットとテスト セットのデータ分布に不整合は生じますか? GN の計算手順は BN と同じですが、バッチ サイズとは関係ありません。

論文では、著者は GN と比較するために ImageNet データセットのバッチ サイズを 32 に設定しましたが、トレーニング中は GN のパフォーマンスが BN よりも優れていましたが、検証中は BN よりも悪かったことがわかりました。

5.2 原則

グループ正規化では、チャネルを num_groups 個のグループに分割し、各グループにはチャネル / num_groups 個のチャネルが含まれ、特徴マップは (N、G、C//G、H、W) になり、各グループ (C//G、H、 W) 寸法の平均と標準偏差。このように、バッチ サイズとは何の関係もありませんし、束縛されることもありません。実際、GN の極端なケースは LN と IN で、それぞれ G が C に等しい、G が 1 に等しいことに対応します。

ここに画像の説明を挿入

5.3 計算プロセス

ここに画像の説明を挿入

torch.nn.GroupNorm(num_groups, num_channels, eps=1e-05, affine=True, device=None, dtype=None)

def GroupNorm(x, gamma, beta, G, eps=1e-5):
    # x:input features with shape [N,C,H,W]
    # gamma,beta:scale and offset,with shape [1,C,1,1]
    # G:number of groups for GN
    N, C, H, W = x.shape
    x = tf.reshape(x, [N, G, C / G, H, W])
    mean, var = tf.nn.moments(x, [2, 3, 4], keep_dims=True)
    x = (x - mean) / tf.sqrt(var + eps)
    x = tf.reshape(x, [N, C, H, W])
    return x, gamma, beta

アドバンテージ

GN はバッチ サイズに依存せず、それでも素晴らしい結果をもたらします。GN はチャネル次元で実行される標準であり、RNN にうまく適用できます。これは GN の大きな利点です。この記事には RNN に関する実験はありませんが、間違いなく新しいアイデアを提供します。

欠点がある

GN と比較した BN は、BN の最も強い状態ではありません。Megvii Technology が提案する MegDet は超大規模なバッチ サイズ = 256 を使用しており、BN 効果はバッチ サイズ = 32 の場合よりもはるかに優れており、ちなみに COCO2017 検出チャンピオンを獲得しました。

6 重みの正規化

6.1 原則

ここに画像の説明を挿入
ここに画像の説明を挿入

torch.nn.utils.weight_norm(module, name='weight', dim=0)

アドバンテージ

WN の正規化操作は重み行列に作用します。計算方法の観点から見ると、WN は正規化方法とはまったく異なりますが、行列の分解に基づく最適化戦略に似ています。

より速い収束速度、
より強力な学習率の堅牢性、
RNN などの動的ネットワークに適用可能、
WN はサンプル サイズにも依存しないため、より小さいバッチ サイズを使用できます
WN 正規化は入力データ量の統計を直接使用しないため、ミニバッチに依存しすぎた BN の不足、LN の各層の固有コンバーターの制限に加えて、
BN はグローバル統計の代わりにミニバッチベースの正規化統計を使用しますが、これはノイズを導入することに相当します。WN にはこの問題がないため、生成モデルや強化学習などのノイズに敏感な環境では、WN の方が BN よりも優れています。
WN には同様の追加パラメータがないため、より多くのビデオ メモリが節約されます。同時に、正規化された統計を計算する場合、WN の計算効率も BN よりも優れています。

欠点がある

WN が正規化とは異なる理由は、取得された特徴範囲を制限する機能がないためです。そのため、WN は依然としてパラメーターの初期値に非常に敏感であり、これも WN の重大な問題です。

要約する

BN は通常、中規模および大規模なバッチで優れたパフォーマンスを達成できます。ただし、小さなバッチではパフォーマンスがさらに低下します。GN はさまざまなバッチ サイズで安定性が高く、中規模および大規模なバッチ サイズでは GN のパフォーマンスは BN よりわずかに悪くなります。IN、LN、PN、および CBN は、特定のタスクで良好なパフォーマンスを示します (例: IN は画像スタイル転送でより優れたパフォーマンスを発揮し、LN は RNN でより優れたパフォーマンスを発揮します。PN はネットワーク生成でより優れたパフォーマンスを発揮します。また、CBN はターゲット検出タスクでより優れたパフォーマンスを発揮します)。これらのいくつかは、他の視覚タスクにあまり一般化できません。SN は数千匹のペットのコレクションですが、トレーニングが複雑すぎます。FRN と BGN には他の正規化方法に比べて明らかな利点がありますが、まだ広く使用されていません。

これらの正規化方法の中で、BN は通常、中規模および大規模なバッチで優れたパフォーマンスを達成できます。ただし、小さなバッチではパフォーマンスがさらに低下します。GN はさまざまなバッチ サイズで安定性が高く、中規模および大規模なバッチ サイズでの GN のパフォーマンスは BN よりわずかに劣ります。IN、LN、PN などの他の正規化方法は、特定のタスクではうまく機能しますが、他の視覚タスクにはあまり一般化できません。

BGN: 超大規模バッチ (たとえば、バッチが 128) では BN は飽和します。小規模/超大規模バッチでの BN の劣化/飽和は、ノイズ/混乱の統計計算によって引き起こされると提案されています。したがって、新しいトレーニングパラメータを追加したり、追加の計算を導入したりせずに、チャネル、高さ、幅の寸法を導入して補償することで、小規模/超大規模バッチの下でのBNでのバッチ正規化のノイズ/混乱統計計算問題が解決されます。

参考:https://www.cnblogs.com/lxp-never/p/11566064.html

おすすめ

転載: blog.csdn.net/weixin_38346042/article/details/131882490