2017-02-28 9 views
1

どちらを使うべきですか?チュートリアルとサンプルは、Examples/common/nn.pyのSequential([Stabilizer(), Recurrence(LSTM(hidden_dim))])またはLSTMP_component_with_self_stabilizationのいずれかを使用します。私はchar_rnn.pyの例では前者をRecurrence(LSTM(hidden_dim, enable_self_stabilization=True))に置き換えようとしましたが、結果はかなり悪化しています。Stabilizer()ブロックとenable_self_stabilizationパラメータの違いは何ですか?

答えて

3

Stabilizerレイヤーは入力を学習可能なスカラーで乗算します。この簡単なトリックは、収束と安定性を大幅に改善することが示されています。 BatchNormalizationと類似点があります。一般に、BatchNormalizationを使用できる場合は、最初に試してください。それが不可能な箇所、具体的にはリカレントループの内側にある場合は、代わりにStabilizerを使用することをお勧めします。

通常、モデルに明示的に注入する必要があります。特殊なケースは、内部にStabilizerを含む反復ステップ関数(例えば、LSTM)です。これを有効にするにはenable_self_stabilization=Trueを使用してください。組み込みのStabilizerは内部変数にのみ適用されます。メイン入力の場合は、自分でStabilizerを挿入する必要があります。

明示的なStabilizer Sを含むが(例えばdefault_optionとして)enable_self_stabilization=Falseを設定した場合、それらの明示的なStabilizer sが何-OPSません。

Stabilizerが状況を悪化させるのは私の経験ではありません。コンバージェンスを改善するのは一般的には確実なことです。しかし、それは数値の範囲を変更します。ですから、コンバージェンスが悪化する場合は、さまざまなハイパーパラメータ設定を試してみることをおすすめします。学習率を下げる。

関連する問題