この質問は、RNNとDNNの一般的ないくつかの非常に重要な性質を理解します。同じ順序ではありませんが、それぞれのサブ質問に回答します(どこにあるかを強調します)
パラメータの共有
まず、RNNの最も重要な品質はパラメーター共有と呼ばれます。通常、シーケンシャルデータは個別のレイヤーに入力されます。長さが20の入力の場合、RNNネットワークは20層になります。各レイヤーに同じ内部パラメーターが使用されるため、20のレイヤーすべてが同じ重みとバイアスます。これを、20の個別の重みとバイアスを持つ多層パーセプトロンと比較してください。bWb
パラメータの共有にはいくつかの利点があります。
- これで、パラメーターがはるかに少なくなりました。20の個別のレイヤーではなく、1つの繰り返しブロックがあります。20倍の削減!
- これにより、トレーニングデータが効果的に乗算されます。反復層は、1つの例文のすべての単語から学習しますが、MLPの各層は、文ごとに1つの単語から学習します。
- 私たちのネットワークははるかに柔軟になりました。20ワードまでの文でトレーニングし、ステップを追加するか動的RNNを使用して、25ワードの文に一般化できます。
ネットワークアーキテクチャー
あなたはtanhとシグモイドアクティベーションについて尋ねます。これに答えるには、特定のRNNアーキテクチャについて話す必要があります。上記で説明した単純なRNNには、単一のアクティブ化があります。単純なRNN は、同じ重みと活性化関数を繰り返し適用するため、勾配が消える(または爆発する)問題を引き起こす傾向があります。
ゲート付きRNNブロック(GRUやLSTMなど)は、ゲートメカニズムを使用して、アクティブ化をメモリ状態に出し入れし、メモリ状態を入力と組み合わせて各ブロックの出力を生成します。このため、ゲートは勾配の後方への伝播を停止できます。シグモイドはアクティブ化を(0,1)に押しつぶすのでゲートの一般的なアクティブ化関数です--- 0は完全にアクティブ化を停止し、1は通過させます。ただし、同様のスカッシュプロファイルを備えたまともなアクティベーション機能は機能します。事例的には、最近ではハードシグモイドが一般的です。
ゲートに加えて、ゲートRNNブロックには内部状態があり、アクティブ化はかなり変化します。ゲーティングはグラディエントバックプロップを制限するため、このアクティブ化には多くの柔軟性があります。たとえば、つぶす必要はありません。これは、整流のアクティブ化(relu、elu、isluなど)がよく見られる場所です。Tanhも完全に賢明な選択です。
バイアスと重みについては、RNNセルの各アクティブ化には通常、独自の重みとバイアスがあります。したがって、GRUには3つのアクティブ化(非表示、更新、およびリセット)があり、それぞれに独自の重みとバイアスがあります。ただし、RNNとして、これらのそれぞれがすべてのタイムステップで再利用されることを思い出してください。
後方パス
これは順方向パスをうまくカバーしていますが、エラーがどのように逆方向に伝播するかについても重要な質問をします。これに対処するには2つの方法があります。
教師強制
各タイムステップで予測を出力するRNN(次のステップの結果の予測、変換、音素認識など)の場合、教師の強制はRNNの各ステップを分離する方法です。これらの依存関係を削除することで、ティーチャーフォーシングはRNNがチェーンルールで従来のバックプロップを使用できるようにします。
しかし、それはどのように機能しますか?教師強制ネットワークには、個別のトレーニングアーキテクチャとテストアーキテクチャがあります。トレーニングでは、各タイムステップで、入力が前のターゲットと連結されます。次の特性を予測するタスクを課されたネットワークについてこれを想像してください。ネットワークは、前のタイムステップのキャラクターを予測しようとしました。ただし、代わりにそのタイムステップで観測されたキャラクターを使用します(これはトレーニングフェーズにいるのでわかります)。したがってタイムステップでの誤差だけで観測値に依存してとの入力。このようにして、時間をかけてネットワークから接続を削除しました。x t y t − 1 t t − 1 ttxtyt−1tt−1t
テストでは、各タイムステップでの真の値がわからないため、を前のレイヤーの出力でます。この場合、一時的な接続は戻りましたが、テスト段階でのみです。 o t − 1yt−1ot−1
時間の経過による逆伝播
しかし、教師フォーシングに頼る必要はありません。時間を介した逆伝播により、逆伝播アルゴリズムをRNNに適用できます。タイムステップと、各タイムステップの入力、非表示状態、出力、観測値のネットワークを考えます。x h o ynxhoy
BPTTは次の手順で機能します。
- 各ペアの勾配を計算します。(これは一度にすべて実行できます。) O 、T、Y T∇otot,yt
- 最後のタイムステップから始めて、逆方向に繰り返し作業しながら、各タイムステップの勾配を計算します。(これは一度に1つずつ実行する必要があります。)∇ht
- これにより、RNNの内部パラメーターごとにエッジが得られます。パラメータを更新するコツは、各タイムステップの勾配の寄与を見つけ(たとえば、が1つしかない場合でも)、それらの勾配を合計して内部パラメーターを更新することです。∇ W T Wn ∇WtW
参考文献
RNNの詳細については、Goodfellow、Bengio、Courvilleのディープラーニングの第10章を強くお勧めします。さらに、GravesのRNNブックは、より詳細な詳細のために素晴らしいです