В LSTM вывод временного шага зависит только от состояния и предыдущих временных шагов. Во второй ссылке (блог keras) во время обучения происходит то, что конечное состояние не используется ... только вектор для каждого шага. Во время вывода состояние сохраняется от одной итерации к следующей.
Следующий ответ объясняет концепцию временных шагов в LSTM Что такое временной шаг в модели LSTM?
Это полезная картинка для обсуждения.
Для согласования с LSTM Keras API:
- Когда указывается return_sequences = True, keras возвращает векторы h0, hN для каждого временного шага, указанные выше;
- Когда указывается return_state = True, возвращается последний побочный вывод (стрелка вправо из самого правого блока A).
На этом изображении результат шага N зависит только от [x0, xN].
Когда у вас есть модель, как определено в вашей ссылке, которая зависит только от значений h на изображении выше, они, когда вы вычисляете потери / градиенты, математика одинакова, независимо от того, делаете ли вы это за один снимок или за цикл.
Этого не произошло бы, если бы использовалось последнее состояние LSTM (боковая стрелка от самого правого блока A на рисунке).
Из документации Keras LSTM API:
return_state: логическое. Следует ли возвращать последнее состояние в дополнение к выходным данным. По умолчанию: False.
Соответствующий комментарий в коде:
# We set up our decoder to return full output sequences,
# and to return internal states as well. We don't use the
# return states in the training model, but we will use them in inference.
Вы можете попробовать взглянуть на последовательность длины 2. Если вы вычисляете градиенты предсказания временного шага 0 и 1 за один прием, то, что касается LSTM, градиент для h0 (результат временного шага 0 ) зависит только от соответствующего входа; градиент h1 (результат временного шага 1) зависит от x0 и x1 и преобразований через LSTM. Если вы рассчитываете время градиента шаг за шагом, вы получите точно такой же расчет.
Если вы посмотрите на модели трансформаторов, вы увидите, что они используют маску для маскировки последовательности, чтобы гарантировать, что шаг N зависит только от предыдущего шага N.
person
Pedro Marques
schedule
14.12.2020