В настоящее время я работаю над учебником Keras для периодического обучения сети., и у меня возникли проблемы с пониманием концепции LSTM с отслеживанием состояния. Для максимальной простоты последовательности имеют одинаковую длину seq_length
. Насколько я понимаю, входные данные имеют форму (n_samples, seq_length, n_features)
, и затем мы обучаем наш LSTM на n_samples/M
пакетах размера M
следующим образом:
Для каждой партии:
- Подайте 2D-тензоры
(seq_length, n_features)
и для каждого входного 2D-тензора вычислите градиент - Суммируйте эти градиенты, чтобы получить общий градиент партии.
- Обратное распространение градиента и обновление весов
В примере из учебника подача 2D-тензоров - это подача последовательности размером seq_length
букв, закодированных как векторы длины n_features
. Однако в руководстве говорится, что в реализации LSTM в Keras скрытое состояние сбрасывается не после ввода всей последовательности (2D-тензор), а после подачи пакета последовательностей для использования большего контекста.
Почему сохранение скрытого состояния предыдущей последовательности и использование его в качестве начального скрытого состояния для нашей текущей последовательности улучшает обучение и прогнозы на нашем тестовом наборе, поскольку это «ранее изученное» начальное скрытое состояние не будет доступно при прогнозировании? Более того, поведение Keras по умолчанию заключается в перетасовке входных выборок в начале каждой эпохи, чтобы контекст пакета изменялся в каждую эпоху. Такое поведение кажется противоречащим сохранению скрытого состояния в пакете, поскольку контекст пакета является случайным.