Próbuję zrozumieć ogólne zastosowanie RNN do znakowania sekwencji za pomocą (między innymi) artykułu Gravesa z 2005 r. Na temat klasyfikacji fonemów.
Podsumowując problem: Mamy duży zestaw szkoleniowy składający się z (wejściowych) plików audio z pojedynczych zdań i (wyjściowych) opatrzonych znakiem eksperckim czasów rozpoczęcia, czasów zatrzymania i etykiet dla poszczególnych fonemów (w tym kilku „specjalnych” fonemów, takich jak cisza, tak, że każda próbka w każdym pliku audio jest oznaczona jakimś symbolem fonemu).
Celem pracy jest zastosowanie RNN z komórkami pamięci LSTM w ukrytej warstwie do tego problemu. (Dla porównania stosuje kilka wariantów i kilka innych technik. W tej chwili interesuje mnie TYLKO jednokierunkowy LSTM, dla uproszczenia.)
Wydaje mi się, że rozumiem architekturę sieci: warstwa wejściowa odpowiadająca 10 ms oknom plików audio, wstępnie przetworzona w sposób standardowy dla dźwięku; ukryta warstwa komórek LSTM i warstwa wyjściowa z jednym kodowaniem wszystkich możliwych 61 symboli telefonu.
Wierzę, że rozumiem (zawiłe, ale proste) równania przejścia do przodu i do tyłu przez jednostki LSTM. Są tylko rachunkiem i regułą łańcucha.
Po kilkakrotnym przeczytaniu tego artykułu i kilku podobnych nie rozumiem, kiedy dokładnie zastosować algorytm propagacji wstecznej i kiedy dokładnie zaktualizować różne wagi w neuronach.
Istnieją dwie wiarygodne metody:
1) Ramka korekcji i aktualizacja
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.
lub,
2) Modyfikacja zwrotna i aktualizacja:
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.
Zauważ, że jest to ogólne pytanie na temat treningu RNN z wykorzystaniem dokumentu Gravesa jako spiczastego (i osobiście istotnego) przykładu: Czy podczas szkolenia RNN na sekwencjach stosuje się backprop na każdym etapie? Czy wagi są dostosowywane za każdym razem? Czy też, w luźnej analogii do treningu wsadowego na architekturach ściśle sprzężonych, czy błędy są kumulowane i uśredniane dla określonej sekwencji przed zastosowaniem aktualizacji backprop i aktualizacji wagi?
A może jestem jeszcze bardziej zdezorientowany niż myślę?