Estoy tratando de comprender la aplicación de alto nivel de los RNN para el etiquetado de secuencias a través (entre otros) del documento de Graves de 2005 sobre la clasificación de fonemas.
Para resumir el problema: tenemos un gran conjunto de capacitación que consta de archivos de audio (de entrada) de oraciones individuales y (salida) horas de inicio etiquetadas por expertos, horas de finalización y etiquetas para fonemas individuales (incluidos algunos fonemas "especiales" como el silencio, de modo que cada muestra en cada archivo de audio esté etiquetada con algún símbolo de fonema).
El objetivo del trabajo es aplicar un RNN con celdas de memoria LSTM en la capa oculta a este problema. (Aplica varias variantes y varias otras técnicas como comparación. Por el momento, SOLO estoy interesado en el LSTM unidireccional, para simplificar las cosas).
Creo que entiendo la arquitectura de la red: una capa de entrada correspondiente a ventanas de 10 ms de los archivos de audio, preprocesada de manera estándar para el trabajo de audio; una capa oculta de celdas LSTM y una capa de salida con una codificación única de todos los 61 símbolos telefónicos posibles.
Creo que entiendo las ecuaciones (intrincadas pero sencillas) del paso hacia adelante y hacia atrás a través de las unidades LSTM. Son solo cálculo y la regla de la cadena.
Lo que no entiendo, después de leer este documento y varios similares varias veces, es cuándo aplicar exactamente el algoritmo de retropropagación y cuándo actualizar exactamente los diversos pesos en las neuronas.
Existen dos métodos plausibles:
1) Backprop y actualización en marco
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.
o,
2) Backprop y actualización basada en oraciones:
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.
Tenga en cuenta que esta es una pregunta general sobre el entrenamiento RNN utilizando el papel de Graves como un ejemplo puntiagudo (y personalmente relevante): cuando se entrena RNN en secuencias, ¿se aplica backprop en cada paso de tiempo? ¿Se ajustan los pesos cada vez? O, en una analogía laxa al entrenamiento por lotes en arquitecturas estrictamente avanzadas, ¿se acumulan y promedian los errores sobre una secuencia particular antes de aplicar las actualizaciones de backprop y peso?
¿O estoy aún más confundido de lo que pienso?