Я пытаюсь понять применение RNN высокого уровня для маркировки последовательностей с помощью (среди прочего) статьи Грейвса 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 с использованием бумаги Грейвса в качестве наглядного (и лично значимого) примера: при обучении RNN по последовательностям применяется ли backprop на каждом временном шаге? Вес корректируется каждый шаг? Или, в свободной аналогии с пакетным обучением на архитектурах с прямой связью, ошибки накапливаются и усредняются по определенной последовательности перед применением обновлений backprop и weight?
Или я даже более смущен, чем я думаю?