Я намагаюся зрозуміти застосування високого рівня RNN для маркування послідовностей через (серед інших) документ Graves '2005 про класифікацію фонеми.
Підсумовуючи проблему: у нас є великий навчальний набір, що складається з (вхідних) аудіофайлів з одиночних пропозицій та (вихідних) часу початку роботи, часу зупинки та міток для окремих фонем (включаючи декілька "спеціальних" фонем, таких як мовчання, таким чином, що кожен зразок у кожному аудіофайлі позначений певним символом фонеми.)
Основна мета паперу полягає в застосуванні до цієї проблеми RNN з комірками пам'яті LSTM у прихованому шарі. (Він застосовує кілька варіантів та кілька інших методик для порівняння. На даний момент я ТІЛЬКО зацікавлений у однонаправленому LSTM, щоб все було просто.)
Я вважаю, що я розумію архітектуру мережі: вхідний шар, відповідний вікнам 10 мс аудіофайлів, попередньо оброблених способами, стандартними для роботи аудіо; прихований шар комірок LSTM та вихідний шар з однокольоровим кодуванням усіх можливих 61 символу телефону.
Я вважаю, що я розумію (складні, але прямолінійні) рівняння прямого та зворотного проходів через одиниці LSTM. Вони просто обчислення і правило ланцюга.
Що я не розумію, прочитавши цей документ і кілька подібних з них кілька разів, це коли саме застосувати алгоритм зворотного розповсюдження і коли саме оновити різні ваги в нейронах.
Існують два правдоподібні методи:
1) Кадрова підтримка та оновлення
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.
або,
2) резервна копія вироку та оновлення:
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.
Зауважте, що це загальне питання щодо тренувань RNN з використанням паперу Graves як загостреного (і особисто актуального) прикладу: Коли тренування RNNs на послідовностях застосовується backprop на кожному кроці часу? Чи регулюється вага кожного кроку? Або, за слабкою аналогією до пакетної підготовки з суворої передачі архітектури, накопичуються та усереднюються помилки за певну послідовність до того, як застосовуються оновлення заднього рівня та ваги?
Або я ще більше розгублений, ніж думаю?