1

Я новичок в нейронных сетях, и создаю LSTM с нуля. У меня есть работа с прямым распространением ... но у меня есть несколько вопросов о движущихся частях в прямом распространении в контексте обученной модели, обратного распространения и управления памятью.LSTM NN: распространение вперед

Итак, прямо сейчас, когда я запускаю прямое распространение, я складываю новые столбцы, f_t, i_t, C_t, h_t, etc на своих соответствующих массивах, когда я накапливаю предыдущие позиции для вычислений градиента bptt.

Мой вопрос 4 часть:

1) Как далеко назад во времени, мне нужно, чтобы поддержать распространяться, чтобы сохранить достаточно долгосрочные воспоминания? (память, растянутая назад 20-40 шагов по времени, вероятно, то, что мне нужно для моей системы (хотя я мог бы выиграть от гораздо более длительного периода времени), что является минимальным для достойной производительности - , и я только снимаю минимум прямо сейчас, так что я могу заставить его работать)

2) После того, как я считаю, моя модель «обучен» есть любой причина для меня, чтобы держать больше, чем временные шаги 2 Мне нужно вычислить следующие C и h значения? (где C_t это состояние клеток, а h_t является конечным продуктом LSTM сети) в этом случае мне нужно несколько версий функции

3) прямого распространения Если я ограничил данные временных рядов на который должен тренироваться, и я хочу тренировать свою модель, будет ли производительность моей модели сходиться, так как я тренирую ее на обучающих данных снова и снова (как и колеблются вокруг некоторой максимальной средней производительности)? И будет ли он сходиться, если я реализую исключение?

4) Сколько компонентов градиента необходимо учитывать? Когда я вычисляю градиент различных матриц, я получаю основной вклад на временном шаге t, а вторичные вклады от временного шага t-1 (и вычисление возвращается обратно к t = 0)? (другими словами: это основной вклад доминирует вычисление градиента - будет изменение наклона за счет вторичных компонентов достаточно, чтобы гарантировать реализацию рекурсии резервное размножать временные шаги ...)

ответ

1
  1. Как вам наблюдали, это зависит от зависимостей в данных. Но LSTM может научиться изучать долгосрочные зависимости, хотя мы возвращаем только несколько временных шагов, если мы не сбросим ячейки и скрытые состояния.

  2. № Приведенные c_t и h_t, вы можете определить c и h для следующего шага времени. Так как вам не нужно прокручивать назад, вы можете выбросить c_t (и даже h_t, если вас просто интересует конечный выход LSTM)

  3. Вы можете сходиться, если начинаете с установки. Использование Dropout определенно поможет избежать этого, особенно вместе с ранней остановкой.

  4. Будет два компонента градиента для h_t - один для текущего выхода и один из следующего шага времени. После того, как вы добавите оба, вам не придется беспокоиться о каких-либо других компонентах.

Смежные вопросы