2016-08-27 14 views
2

私が構築しているテンソルフローモデルで簡単なRNNの再活性化を使用したいと思います。深い畳み込みネットワークの上に位置します。私は一連の画像を分類しようとしています。私は、kerasとtensorflowソースコードの両方のデフォルトの有効化が単純なRNNのtanhであることに気付きました。これには理由がありますか? reluの使用に何か問題はありますか? reluが消えていく勾配でうまくいくように思える。テンソルフローとケラスSimpleRNNレイヤーのデフォルト活性化がtanh

nn = tf.nn.rnn_cell.BasicRNNCell(1024, activation = tf.nn.relu)

答えて

3

RNNは、爆発勾配および勾配勾配の両方の問題を抱えている可能性があります。学習するシーケンスが長い場合、これは非常に微妙なバランスになりがちです。両方の問題は累乗によって引き起こされます。各層に重み行列と活性化の派生関数が乗算されるため、行列の大きさまたは活性化派生要素のいずれかが1.0と異なる場合、爆発または消滅する傾向があります。

ReLUsは爆発勾配の問題を助けません。実際には、Sigmoidやtanhなどのウェイトが大きいときには当然制限される活性化関数よりも悪化する可能性があります。

ReLUs do勾配の問題が消えています。しかしながら、LSTMおよびGRUセルの設計は、(潜在的に弱い信号から多くの時間ステップを離れて学習することを扱う)同じ問題に対処することを意図しており、非常に効果的である。

短い時間系列を持つ単純なRNNの場合、ReLUの起動には何も問題ありません。訓練の際に勾配を爆発させる可能性に対処するために、勾配クリッピング(許容範囲外の勾配をその範囲の最小値または最大値として扱う)を見ることができます。

2

Iは、2つの理由を見ることができます:

  1. LSTMs(下地RNNブロック)は常にtanh活性化機能を使用するために文献で定義されています。それが、ほとんどのユーザーが実装から期待するものです。

  2. 正確に言えば、tanhは、再帰ネットワークではreluより優れていますが、このメモリの紙/リソースが見つかりません。

2つのアクティベーション機能の中で最もよく機能する特定のデータセット/問題について、自分自身を試してみることをおすすめします。

+0

なぜ私はLSTMに最適なのか理解していますが、シーケンスは長さが6であるため、SimpleRNNを使用しています。 – chasep255

関連する問題