インスタンスとバッチの正規化
1. 概要
このチュートリアルでは、ディープラーニングの2つの正規化手法、つまりインスタンス正規化(IN)とバッチ正規化(BN)について説明します。 また、これら2つの方法の違いについても説明します。
2. 正規化の動機
ディープニューラルネットで正規化を実行する理由から始めましょう。 正規化または機能スケーリングは、非常に多様な範囲の機能がネットワークパフォーマンスに比例して影響を与えることを確認する方法です。 正規化しないと、一部の機能または変数が無視される可能性があります。
例の場合、走行距離と車の年齢などの2つの機能を使用して車の価格を予測するとします。 最初の機能の範囲は数千年ですが、2番目の機能の範囲は数十年です。 車の価格を予測するための生データを使用すると、距離の特徴が年齢の特徴を大幅に上回ります。 したがって、より正確な予測を取得するには、これら2つの機能を正規化する必要があります。
正規化の概念とその変形の詳細については、人工ニューラルネットワークの入力の正規化を参照してください。
通常、正規化は、生データを正規化するために入力層で実行されます。 ただし、ディープニューラルネットの場合、中間層ノードのアクティブ化値が非常に大きくなる可能性があり、この例と同じ問題が発生します。 これには、隠れ層でもある種の正規化が必要です。
3. インスタンスの正規化(IN)
インスタンスの正規化は、コントラストの正規化の別の用語であり、StyleNetペーパーで最初に造られました。 どちらの名前も、この手法に関するいくつかの情報を示しています。
INがどのように機能するかを明確にするために、IN層への入力テンソルを構成するサンプル特徴マップを考えてみましょう。 画像のバッチで構成されるテンソルとします。 これらの各画像には、身長と体重の特徴マップまたはチャネルがあります。 したがって、は4次元テンソルです。 インスタンスの正規化では、1つのトレーニングサンプルと機能マップ(図で赤で指定)を検討し、その空間位置(および)の平均と分散を取得します。
単一のインスタンスに対してインスタンスの正規化を実行するには、平均と分散を計算する必要があります。
次に、取得した平均と分散を使用して、各空間次元が正規化されます。
ここで、はより安定したトレーニングのための小さな付加価値です。 最後に、2つのスケーリングパラメータとバイアスパラメータを使用して、結果を線形に変換します。 この変換は、正規化レイヤーが恒等関数を生成できるようにすることで、ネットワークの容量を維持します。 ネットワークは、トレーニング中に2つのパラメーターを学習します。 たとえば、恒等関数を取得するために、必要に応じて、ネットワークはそれを学習します。
4. バッチ正規化(BN)
前の図と同じ機能マップを考慮すると、BNはミニバッチ(赤で指定)のすべてのトレーニングサンプルに対して1つのチャネル(1つの機能マップ)で動作します。
サイズのミニバッチにしましょう。 BNは、ミニバッチの平均( ) と分散( )を使用してアクティブ化値を正規化し、2つの学習可能なパラメーターを導入します。 。 ネットワークは、 GradientDescentアルゴリズムを使用してこれらのパラメーターを学習できます。
INと同様に、分母にinコンピューティングを追加して、ミニバッチの分散がゼロの場合にトレーニングを安定させます。
ついに、
およびパラメーターは、INのスケーリングおよびバイアス演算子と同じであり、同じ機能を備えています。
5. INとBNの違いを理解する
どちらの正規化方法でも、トレーニングを加速し、ネットワークの収束を高速化できます。 さらに、BN はより大きなトレーニングレートを可能にし、ニューラルネットワークの一般化を改善します。 そうは言っても、これら2つの形式の間にはいくつかの違いがあります。
まず第一に、それらの定義に基づいて、それらは入力に対して異なる機能を果たします。
ただし、バッチサイズが大きいと大量のメモリが必要になるため、これを実装するのは難しい場合があります。 その結果、メモリに制限がある場合は、より小さなバッチサイズを選択する必要があり、場合によっては問題が発生する可能性があります。 非常に小さいバッチサイズを使用すると、平均と分散のノイズが大きくなるため、トレーニングにエラーが発生する可能性があります。 小さなバッチサイズ設定では、INがBNよりもパフォーマンスが高くなります。
また、BNはバッチサイズに依存するため、トレーニング時と同じようにテスト時に適用することはできません。 その理由は、テストフェーズでは、通常、処理する例が1つあるためです。 したがって、平均と分散はトレーニングのように計算できません。
6. 結論
このチュートリアルでは、インスタンスとバッチの正規化メソッドがどのように機能するかを説明しました。 また、実装とユースケースの観点から、2つの規範の主な違いを指摘しました。