切り捨てられた逆伝搬を使用した場合の初期パターンのキャプチャ(RNN / LSTM)


12

RNN / LSTMを使用してセンチメント分析を行います。これは多対1のアプローチです(このブログを参照)。ネットワークは、通常の30の最後のステップでのみ展開される、切り捨てられたバックプロパゲーション(BPTT)によってトレーニングされます。

私の場合、分類したい各テキストセクションは、展開されている30ステップ(〜100ワード)よりもはるかに長くなっています。私の知識に基づいて、BPTTは単一のテキストセクションに対して1回だけ実行されます。これは、テキストセクション全体を通過し、バイナリ分類ターゲットを計算したときに、損失関数と比較してエラーを見つけます。y

この場合、各テキストセクションの最初の単語に関して、勾配は計算されません。RNN / LSTMはどのようにして重みを調整し、最初の数ワード内でのみ発生する特定のパターンをキャプチャすることができますか?たとえば、とマークされたすべての文は「I love this」で始まり、とマークされたすべての文は「I hate this」で始まります。RNN / LSTMは、100ステップの長いシーケンスの最後に到達したときに、最後の30ステップだけ展開された場合、どのようにキャプチャしますか?postvenegatve

回答:


11

勾配の伝播を30タイムステップに制限すると、データセットで可能なすべてを学習できなくなるのは事実です。ただし、データセットによって、モデルの機能に関する重要な情報を学習できなくなるかどうかに大きく依存します!

トレーニング中に勾配を制限することは、モデルが高い信頼性で入力フィーチャと非表示状態を吸収できるウィンドウを制限することに似ています。テスト時にモデルを入力シーケンス全体に適用するため、すべての入力フィーチャに関する情報を非表示状態に組み込むことができます。文の最終的な予測を行うまで、その情報を保存する方法を正確に知らないかもしれませんが、いくつかの(明らかに弱い)接続がまだある可能性があります。

最初に不自然な例について考えてください。ネットワークの入力に1がある場合は1を生成し、それ以外の場合は0を生成するとします。長さ20のシーケンスでネットワークをトレーニングし、勾配を10ステップに制限するとします。トレーニングデータセットの入力の最後の10ステップに1が含まれていない場合、ネットワークはあらゆる構成のテスト入力に問題が発生します。ただし、トレーニングセットに[1 0 0 ... 0 0 0]などの例と[0 0 0 ... 1 0 0]などの他の例がある場合、ネットワークは「入力のどこにでも1インチフィーチャ。

センチメント分析に戻ります。トレーニング中に、たとえば50語の省略記号を含む「...前後に」というような長い否定文にモデルが遭遇したとします。勾配伝播を30タイムステップに制限することで、モデルは「I hate this because」を出力ラベルに接続しないため、このトレーニングから「I」、「hate」、または「this」取得しません。。しかし、文の終わりから30タイムステップ以内の単語を拾います。トレーニングセットに同じ単語を含む他の例が含まれている場合、おそらく「憎しみ」とともに、「憎しみ」と否定的な感情ラベルの間のリンクを拾う可能性があります。また、短いトレーニング例がある場合は、「ひどいのでこれが嫌いです!」と言います。モデルは「hate」および「this」機能をターゲットラベルに接続できます。これらのトレーニング例が十分にある場合、モデルは接続を効果的に学習できるはずです。

テスト時に、「ヤモリのせいで...これが嫌いだ!」のような別の長い文をモデルに提示するとしましょう。モデルの入力は、「私はこれが嫌いです」で始まり、何らかの形でモデルの隠された状態に渡されます。この隠された状態は、モデルの将来の隠された状態に影響を与えるために使用されるため、文の終わりの前に50個の単語がある場合でも、それらの最初の単語からの隠された状態は、たとえ出力されなかったとしても、出力に影響を与える可能性があります「これが嫌い」と文末までの距離が非常に長いサンプルについてトレーニングしました。


0

@ Imjohns3には権利があります。長いシーケンス(サイズN)を処理し、バックプロパゲーションを最後のKステップに制限すると、ネットワークは最初にパターンを学習しません。

私は長いテキストを扱っており、損失を計算し、Kステップごとに逆伝播するアプローチを使用しています。シーケンスにN = 1000トークンがあり、RNNプロセスが最初にK = 100であり、次に予測(計算損失)および逆伝播を試みると仮定します。次に、RNN状態を維持しながら勾配チェーンにブレーキをかけ(pytorch-> detach)、さらにk = 100ステップを開始します。

あなたがここで見つけることができるこのテクニックの良い例:https : //github.com/ksopyla/pytorch_neural_networks/blob/master/RNN/lstm_imdb_tbptt.py

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.