J'essaie de comprendre l'application de haut niveau des RNN à l'étiquetage des séquences via (entre autres) l'article de Graves de 2005 sur la classification des phonèmes.
Pour résumer le problème: nous avons un grand ensemble de formation composé de fichiers audio (d'entrée) de phrases simples et (de sortie) d'heures de début, d'heures d'arrêt et d'étiquettes pour des phonèmes individuels (y compris quelques phonèmes "spéciaux" tels que le silence, de sorte que chaque échantillon de chaque fichier audio soit étiqueté avec un symbole de phonème.)
Le but du papier est d'appliquer un RNN avec des cellules de mémoire LSTM dans la couche cachée à ce problème. (Il applique plusieurs variantes et plusieurs autres techniques à titre de comparaison. Je ne suis pour l'instant intéressé que par le LSTM unidirectionnel, pour garder les choses simples.)
Je crois comprendre l'architecture du réseau: une couche d'entrée correspondant à des fenêtres de 10 ms des fichiers audio, prétraitées de manière standard pour le travail audio; une couche cachée de cellules LSTM et une couche de sortie avec un codage à chaud de tous les 61 symboles téléphoniques possibles.
Je crois que je comprends les équations (complexes mais simples) de la passe avant et de la passe arrière à travers les unités LSTM. Ce ne sont que du calcul et la règle de la chaîne.
Ce que je ne comprends pas, après avoir lu cet article et plusieurs similaires plusieurs fois, c'est quand exactement appliquer l'algorithme de rétropropagation et quand exactement mettre à jour les différents poids dans les neurones.
Il existe deux méthodes plausibles:
1) Backprop et mise à jour du cadre
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.
ou,
2) Backprop phrase et mise à jour:
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.
Notez qu'il s'agit d'une question générale sur la formation des RNN en utilisant le document Graves comme exemple pointu (et personnellement pertinent): lors de la formation des RNN sur les séquences, la propulsion est-elle appliquée à chaque pas de temps? Les poids sont-ils ajustés à chaque pas de temps? Ou, dans une analogie lâche avec la formation par lots sur des architectures strictement à action directe, les erreurs sont-elles accumulées et moyennées sur une séquence particulière avant que les mises à jour du backprop et du poids ne soient appliquées?
Ou suis-je encore plus confus que je ne le pense?