Sto cercando di capire l'applicazione ad alto livello di RNN per l'etichettatura in sequenza tramite (tra gli altri) il documento di Graves del 2005 sulla classificazione dei fonemi.
Riassumendo il problema: disponiamo di un ampio set di formazione costituito da file audio (di input) di singole frasi e orari di inizio, output e etichette con etichetta di esperti (output) per singoli fonemi (inclusi alcuni fonemi "speciali" come silenzio, in modo tale che ogni campione in ogni file audio sia etichettato con un simbolo di fonema.)
La spinta del foglio è applicare a questo problema un RNN con celle di memoria LSTM nello strato nascosto. (Applica diverse varianti e diverse altre tecniche come confronto. Per il momento sono SOLO interessato all'LSTM unidirezionale, per semplificare le cose.)
Credo di comprendere l'architettura della rete: un livello di input corrispondente a 10 ms di finestre dei file audio, preelaborato in modo standard rispetto all'audio; uno strato nascosto di celle LSTM e uno strato di output con una codifica a caldo di tutti i possibili 61 simboli del telefono.
Credo di comprendere le equazioni (complesse ma semplici) del passaggio in avanti e del passaggio all'indietro attraverso le unità LSTM. Sono solo calcolo e la regola della catena.
Ciò che non capisco, dopo aver letto più volte questo articolo e molti altri simili, è quando applicare esattamente l'algoritmo di backpropagation e quando aggiornare esattamente i vari pesi nei neuroni.
Esistono due metodi plausibili:
1) Backprop e aggiornamento a livello di frame
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 e aggiornamento frase-saggio:
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.
Si noti che questa è una domanda generale sull'allenamento RNN usando il documento Graves come esempio appuntito (e personalmente rilevante): Quando si allena RNN su sequenze, il backprop viene applicato ad ogni momento? I pesi sono regolati ad ogni intervallo di tempo? Oppure, in un'analogia libera con l'addestramento in lotti su architetture strettamente feed-forward, gli errori vengono accumulati e calcolati in media su una sequenza particolare prima che vengano applicati gli aggiornamenti di backprop e di peso?
O sono ancora più confuso di quanto pensi?