音素分類に関するGravesの2005年の論文(とりわけ)を使用して、シーケンスラベリングへのRNNの高レベルの適用を理解しようとしています。
問題を要約すると、個々の音素(無音、各オーディオファイルの各サンプルに音素記号が付けられるようにします。)
この論文の主旨は、隠れ層にLSTMメモリセルを持つRNNをこの問題に適用することです。(彼はいくつかのバリアントと他のいくつかの手法を比較として適用しています。私は今のところ、物事を単純に保つために、単方向LSTMにのみ関心があります。)
私はネットワークのアーキテクチャを理解していると思います。オーディオ作業の標準的な方法で前処理された、オーディオファイルの10 msウィンドウに対応する入力レイヤー。LSTMセルの非表示層、およびすべての可能な61個の電話記号のワンホットコーディングを備えた出力層。
LSTMユニットを通過するフォワードパスとバックワードパスの(複雑ですが簡単な)方程式は理解できたと思います。それらは単なる微積分と連鎖規則です。
この論文といくつかの類似の論文を数回読んだ後、私が理解していないのは、バックプロパゲーションアルゴリズムを正確に適用するタイミングと、ニューロンのさまざまな重みを正確に更新するタイミングです。
2つのもっともらしい方法が存在します。
1)フレーム単位のバックプロップと更新
Load a sentence.
Divide into frames/timesteps.
For each frame:
- Apply forward step
- Determine error function
- Apply backpropagation to this frame's error
- Update weights accordingly
At end of sentence, reset memory
load another sentence and continue.
または、
2)文ごとのバックプロップと更新:
Load a sentence.
Divide into frames/timesteps.
For each frame:
- Apply forward step
- Determine error function
At end of sentence:
- Apply backprop to average of sentence error function
- Update weights accordingly
- Reset memory
Load another sentence and continue.
これは、先のとがった(そして個人的に関連のある)例としてGravesペーパーを使用したRNNトレーニングに関する一般的な質問であることに注意してください。シーケンスでRNNをトレーニングする場合、バックプロップはすべてのタイムステップに適用されますか?ウェイトはタイムステップごとに調整されますか?または、厳密にフィードフォワードアーキテクチャでのバッチトレーニングの大まかな例えで、バックプロップと重みの更新が適用される前に、特定のシーケンスでエラーが累積および平均化されていますか?
それとも私は思っているよりももっと混乱していますか?