ドロップ アウト
Dropout 関数。
Dropout (x)
パラメーター
x
: ドロップアウト関数を適用する入力
注: ドロップアウト率は、この関数のパラメーターではなく、セクションで SGD
指定されます。
戻り値
Dropout()
は、入力に適用されたドロップアウト操作の結果を返します。
結果は、入力と同じテンソル ディメンションを持ちます。
説明
この操作は Dropout()
、 ドロップアウト 率と呼ばれる特定の確率で入力の要素をランダムに選択し、0 に設定します。
これは、モデルの一般化性を向上させるために示されています。
CNTKの実装では、0 に設定されていない残りの値は、代わりに (1 / (1 - ドロップアウト レート)) と乗算されます。 こうすることで、ドロップアウトで学習したモデル パラメーターが推論に直接適用されます。 (これが行われなかった場合、ユーザーは推論の前に手動でスケーリングする必要があります)。
トレーニングでドロップアウトを有効にするには、セクションにパラメーター dropoutRate
を追加して SGD
ドロップアウト率を定義する必要もあります。
これは、ドロップアウトなしでトレーニングを開始し、一般的なシナリオであるいくつかのエポックの後にそれを有効にするために、それ自体のパラメーターDropout()
ではなく、セクションでSGD
行われます。
このためにはベクトル dropoutRate
として指定され、各値は特定のエポック用です。
推論を実行すると、操作は Dropout()
変更されていない入力を渡します (no-op です)。
例
次に示す単純な畳み込みネットワークは、ドロップアウト レイヤーを末尾に向けて持つ単純な畳み込みネットワークです。
features = Input{...}
c = ConvolutionalLayer {32, (5:5), activation=ReLU} (features)
p = MaxPoolingLayer {(3:3), stride = (2:2)} (c)
h = DenseLayer {64, activation = ReLU} (p)
d = Dropout (h)
z = LinearLayer {10} (d)
さらに、セクションに対応するエントリが SGD
必要です。
次の例では、最初の 3 つのエポックにドロップアウトを使用せず、ドロップアウト 率 50% で続行することを定義しています。
便宜上、この例ではアスタリスク (*
) 構文を使用して繰り返しを示します。
SGD = {
...
dropoutRate = 0*3:0.5
...
}