Чтобы понять LSTM, я бы посоветовал сначала потратить несколько минут, чтобы понять «простые ванильные» RNN, поскольку LSTM - только более сложная версия этого.Я постараюсь описать, что происходит в вашей сети, если это был базовый RNN.
Вы тренируете один набор весов, которые многократно используются для каждого временного шага (t-20,...,t
).Первый вес (скажем, W1
) для входов.Один за другим, каждый из x_t-20,...,x_t
умножается на W1
, затем применяется нелинейная функция активации - так же, как любой прямой ход NN.
Разница с номерами RNN заключается в наличии отдельного «состояния» (примечание: не обученный вес), которое может начинаться со случайного или нулевого значения и несет информацию о вашей последовательности во временных шагах.Есть еще один вес для государства (W2
).Таким образом, начиная с первого шага t-20
, начальное состояние умножается на W2
и применяется функция активации.
Таким образом, на временном шаге t-20
мы имеем выходные данные из W1
(на входах) и W2
(на состоянии).Мы можем объединить эти выходные данные на каждом временном шаге и использовать его для генерации состояния для перехода к следующему временному шагу, то есть t-19
.Поскольку состояние должно рассчитываться на каждом временном шаге и передаваться на следующий, эти вычисления должны выполняться последовательно, начиная с t-20.Чтобы сгенерировать желаемый результат, мы можем использовать каждое состояние вывода на всех временных шагах или только на последнем временном шаге.Как и return_sequences=False
по умолчанию в Керасе, вы используете выход только на последнем временном шаге, который затем попадает в ваш плотный слой.
Весам W1
и W2
необходимо иметь одно измерение, равноеРазмеры каждого временного шага x_t-20...
для умножения матрицы на работу.Это измерение равно 1 в вашем случае, так как каждый из 20 входов представляет собой 1d вектор (или число), который умножается на W1
.Тем не менее, мы можем установить второе измерение весов по своему усмотрению - 300 в вашем случае.Таким образом, W1
имеет размер 1x300 и умножается 20 раз, один раз для каждого временного шага.
Эта лекция проведет вас через базовую блок-схему RNN, которые я описал выше, всепуть к более продвинутым вещам, которые вы можете пропустить. Это известное объяснение LSTM , если вы хотите совершить переход от базовых RNN к LSTM, что вам может и не понадобиться - есть только более сложные веса и состояния.