Jag försöker förstå den höga tillämpningen av RNN på sekvensmärkning via (bland annat) Graves 2005-uppsats om fonemklassificering.
För att sammanfatta problemet: Vi har en stor träningssats bestående av (inmatning) ljudfiler med enstaka meningar och (utdata) expertmärkta starttider, stopptider och etiketter för enskilda fonem (inklusive några "speciella" fonem som tystnad, så att varje prov i varje ljudfil är märkt med någon fonemsymbol.)
Pappersfunktionen är att tillämpa ett RNN med LSTM-minneceller i det dolda lagret på detta problem. (Han använder flera varianter och flera andra tekniker som jämförelse. Jag är för tillfället ENDAST intresserad av den enkelriktade LSTM, för att hålla sakerna enkla.)
Jag tror att jag förstår nätverkets arkitektur: Ett ingångsskikt motsvarande 10 ms fönster i ljudfilerna, förbehandlade på sätt som är standard för ljudarbete; ett dolt lager av LSTM-celler, och ett utgående lager med en het-kodning av alla möjliga 61 telefonsymboler.
Jag tror att jag förstår de (invecklade men raka) ekvationerna för framåtpassering och bakåtpassering LSTM-enheterna. De är bara kalkyl och kedjeregeln.
Vad jag inte förstår, efter att ha läst denna uppsats och flera liknande flera gånger, är när exakt att tillämpa backpropagationsalgoritmen och när exakt på uppdatera de olika vikterna i neuronerna.
Det finns två rimliga metoder:
1) Bildmässig bakgrundsuppdatering och uppdatering
Ladda en mening. Dela upp i ramar / tidssteg. För varje ram: - Tillämpa framåtsteg - Bestäm felfunktion - Tillämpa backpropagation på den här ramens fel - Uppdatera vikter i enlighet därmed I slutet av meningen, återställ minnet, ladda en annan mening och fortsätt. > 2) Satsmässig bakgrund och uppdatering:
Ladda en mening. Dela upp i ramar / tidssteg. För varje ram: - Tillämpa steg framåt - Bestäm felfunktion I slutet av meningen: - Använd backprop till genomsnittet av meningsfelfunktionen - Uppdatera vikterna i enlighet med detta - Återställ minnet Ladda en annan mening och fortsätt. Observera att detta är en allmän fråga om RNN-träning använder Graves-papperet som ett spetsigt (och personligt relevant) exempel: När back-prop tillämpas vid varje tidssteg när du tränar RNN på sekvenser? Justeras vikterna varje gång? Eller, i en löst analogi till batchutbildning om strikt matningsarkitekturer, ackumuleras och medelvärdesfel över en viss sekvens innan backprop och viktuppdateringar tillämpas?
Eller är jag ännu mer förvirrad än jag tror?