MVN

バージョン名: MVN-1

カテゴリー: 正規化

簡単な説明: 入力テンソルの平均分散正規化を計算します。次の 2 つの正規化手法をサポートします: インスタンス/コントラスト正規化レイヤー正規化

詳細な説明:

across_channels 属性に基づいて、平均値は以下の式のいずれかで計算されます。

  1. true の場合、平均値はレイヤー正規化を使用して計算されます。

    \[\mu_{n} = \frac{\sum_{c}^{C}\sum_{h}^{H}\sum_{w}^{W} i_{nchw}}{C * H * W}\]
  2. false の場合、平均値はインスタンス/コントラスト正規化を使用して計算されます。

    \[\mu_{nc} = \frac{\sum_{h}^{H}\sum_{w}^{W} i_{nchw}}{H * W}\]

ここで、\(i_{nchw}\) は、\(n\) バッチ、math:c チャネル、math:h,w 空間次元によってパラメーター化された入力テンソルです。

reduction_axes 属性が指定されている場合、平均値は次の式に基づいて計算されます。

\[\mu_{n} = ReduceMean(i_{k}, reduction_axes)\]

その後、MVN は入力ブロブから平均値を減算します。

normalize_variancetrue に設定されている場合、出力ブロブは分散で除算されます。

\[o_{i}=\frac{o_{i}}{\sqrt {\sum {\sigma_{k}^2}+\epsilon}}\]

ここで、\(\sigma_{k}^2\) は平均値に基づいて計算された分散、\(\epsilon\) は数値安定性のため分散に加算される値であり、epsilon 属性に対応します。

属性:

  • across_channels
    • 説明: across_channels は、平均値をチャネル間で共有するかどうかを指定するフラグです。true の場合、平均値と分散がすべてのチャネルおよび空間次元の各サンプルに対して計算され (レイヤー正規化)、それ以外の場合、空間次元にわたって各サンプルおよび各チャネルに対して計算されます (インスタンス/コントラスト正規化)。

    • 値の範囲:

      • false - チャネル間で平均値を共有しません

      • true - チャネル間で平均値を共有します

    • タイプ: boolean

    • 必須: はい

  • reduction_axes
    • 説明: 一意の要素の 1D テンソルと、正規化スライスを定義する data 内の次元のインデックスを指定する T_IND タイプ。負の値は、次元を後ろから数えることを意味します。

    • 値の範囲: 軸の許容範囲は [-r; r-1] です。ここで、r = rank(data)、順序はソートできません

    • タイプ: int

    • 必須: はい

  • normalize_variance
    • 説明: normalize_variance は分散正規化を行うかどうかを指定するフラグです。

    • 値の範囲:

      • false - 分散を正規化しません

      • true - 分散を正規化します

    • タイプ: boolean

    • 必須: はい

  • eps
    • 説明: eps は、値を正規化するときにゼロによる除算を避けるため分散に追加される数値です。例えば、epsilon が 0.001 に等しい場合は、分散に 0.001 が加算されることを意味します。

    • 値の範囲: 正の浮動小数点数

    • タイプ: double

    • 必須: はい

重要

across_channels 属性または reduction_axes 属性のいずれかを使用する必要があり、これらを一緒に定義することはできません。

入力:

  • 1: data - タイプ T および任意の形状の入力テンソル。必須。

出力:

  • 1: 入力テンソルとしてのタイプ T および形状の正規化されたテンソル。

タイプ:

  • T: 任意の浮動小数点タイプ。

  • T_IND: int64 または int32

例:

: across_channels 属性を使用した場合

<layer ... type="MVN">
    <data across_channels="true" eps="1e-9" normalize_variance="true"/>
    <input>
        <port id="0">
            <dim>6</dim>
            <dim>12</dim>
            <dim>10</dim>
            <dim>24</dim>
        </port>
    </input>
    <output>
        <port id="2">
            <dim>6</dim>
            <dim>12</dim>
            <dim>10</dim>
            <dim>24</dim>
        </port>
    </output>
</layer>

: reduction_axes 属性を使用した場合

<layer ... type="MVN">
    <data reduction_axes="2,3" eps="1e-9" normalize_variance="true"/>
    <input>
        <port id="0">
            <dim>6</dim>
            <dim>12</dim>
            <dim>10</dim>
            <dim>24</dim>
        </port>
    </input>
    <output>
        <port id="2">
            <dim>6</dim>
            <dim>12</dim>
            <dim>10</dim>
            <dim>24</dim>
        </port>
    </output>
</layer>