Рекуррентные нейронные сети могут изучать временную зависимость на нескольких временных шагах в задачах прогнозирования последовательности.
Современные рекуррентные нейронные сети, такие как сеть Long-Short-Term Memory или LSTM, обучаются с помощью варианта алгоритма обратного распространения, называемого обратным распространением во времени. Этот алгоритм был дополнительно модифицирован для повышения эффективности при решении задач прогнозирования последовательностей с очень длинными последовательностями и получил название «Усеченное обратное распространение во времени».
Важным параметром конфигурации при обучении повторяющихся нейронных сетей, таких как LSTM, с использованием усеченного обратного распространения во времени, является решение, сколько временных шагов использовать в качестве входных данных. То есть, как именно разбить очень длинные входные последовательности на подпоследовательности, чтобы добиться максимальной производительности.
В этом посте вы откроете для себя 6 различных способов разделения очень длинных входных последовательностей для эффективного обучения рекуррентных нейронных сетей с помощью усеченного обратного распространения во времени в Python с Keras.
Прочитав этот пост, вы узнаете:
- Что такое усеченное обратное распространение во времени и как оно реализовано в библиотеке глубокого обучения Python Keras.
- Как именно выбор количества входных временных шагов влияет на обучение в повторяющихся нейронных сетях.
- 6 различных методов, которые вы можете использовать для разделения задач прогнозирования очень длинной последовательности, чтобы наилучшим образом использовать алгоритм обучения усеченного обратного распространения во времени.
Начните свой проект с моей новой книгой Long-Term Memory Networks With Python, включая пошаговые инструкции и Исходный код Python файлы для всех примеров.
Давайте начнем.

Как подготовить предсказание последовательности для усеченного обратного распространения во времени в Keras
Фото Giò, некоторые права защищены.
Усеченное обратное распространение во времени
Обратное распространение - это алгоритм обучения, используемый для обновления весов в нейронной сети, чтобы минимизировать ошибку между ожидаемым выходом и предсказанным выходом для заданного входа.
Для задач прогнозирования последовательности, где существует зависимость порядка между наблюдениями, рекуррентные нейронные сети используются вместо классических нейронных сетей с прямой связью. Рекуррентные нейронные сети обучаются с использованием разновидности алгоритма обратного распространения, называемого обратным распространением во времени или сокращенно BPTT.
Фактически, BPTT разворачивает рекуррентную нейронную сеть и распространяет ошибку назад по всей входной последовательности, один временной шаг за раз. Затем веса обновляются с учетом накопленных градиентов.
BPTT может медленно обучать рекуррентные нейронные сети решать проблемы с очень длинными входными последовательностями. Помимо скорости, накопление градиентов за такое количество временных шагов может привести к уменьшению значений до нуля или увеличению значений, которые в конечном итоге переполняются или взрываются.
Модификация BPTT состоит в том, чтобы ограничить количество временных шагов, используемых при обратном проходе, и фактически оценить градиент, используемый для обновления весов, а не рассчитать его полностью.
Этот вариант называется усеченным обратным распространением во времени или TBPTT.
Алгоритм обучения TBPTT имеет два параметра:
- k1: Определяет количество временных шагов, отображаемых в сети при прямом проходе.
- k2: Определяет количество временных шагов, на которые следует обратить внимание при оценке градиента при обратном проходе.
Таким образом, мы можем использовать обозначение TBPTT (k1, k2) при рассмотрении того, как настроить алгоритм обучения, где k1 = k2 = n, где n - длина входной последовательности для классического необрезанного BPTT.
Влияние конфигурации TBPTT на модель последовательности RNN
Современные рекуррентные нейронные сети, такие как LSTM, могут использовать свое внутреннее состояние для запоминания очень длинных входных последовательностей. Например, более тысячи временных шагов.
Это означает, что конфигурация TBPTT не обязательно определяет память сети, которую вы оптимизируете, с выбором количества временных шагов. Вы можете выбрать, когда внутреннее состояние сети сбрасывается отдельно от режима, используемого для обновления весов сети.
Вместо этого выбор параметров TBPTT влияет на то, как сеть оценивает градиент ошибок, используемый для обновления весов. В более общем плане конфигурация определяет количество временных шагов, начиная с которых сеть может рассматриваться для моделирования вашей проблемы с последовательностью.
Формально это можно сформулировать примерно так:
Где yhat - это результат для определенного временного шага, f (…) - это отношение, которое аппроксимирует рекуррентная нейронная сеть, а X
Он концептуально похож (но на практике сильно отличается) с размером окна на многослойных персептронах, обученных на задачах временных рядов, или с параметрами p и q в моделях линейных временных рядов, таких как ARIMA. TBPTT определяет объем входной последовательности для модели во время обучения.
Нужна помощь с LSTM для прогнозирования последовательности?
Пройдите мой бесплатный 7-дневный курс электронной почты и откройте для себя 6 различных архитектур LSTM (с кодом).
Нажмите, чтобы зарегистрироваться, а также получите бесплатную электронную версию курса в формате PDF.
Начните БЕСПЛАТНЫЙ мини-курс прямо сейчас!
Керас Внедрение TBPTT
Библиотека глубокого обучения Keras предоставляет реализацию TBPTT для обучения повторяющихся нейронных сетей.
Реализация более ограничена, чем общая версия, указанная выше.
В частности, значения k1 и k2 равны друг другу и фиксированы.
- TBPTT (k1, k2), где k1 = k2
Это реализуется с помощью трехмерного ввода фиксированного размера, необходимого для обучения повторяющихся нейронных сетей, таких как сеть с долгой краткосрочной памятью или LSTM.
LSTM ожидает, что входные данные будут иметь размеры: образцы, временные шаги и функции.
Это второе измерение этого входного формата, временные шаги, которые определяют количество временных шагов, используемых для прямого и обратного проходов в вашей задаче прогнозирования последовательности.
Следовательно, необходимо тщательно выбирать количество временных шагов, указанных при подготовке входных данных для задач прогнозирования последовательности в Keras.
Выбор временных шагов будет влиять на оба:
- Внутреннее состояние, накопленное во время прямого прохода.
- Оценка градиента, используемая для обновления весов при обратном проходе.
Обратите внимание, что по умолчанию внутреннее состояние сети сбрасывается после каждого пакета, но более явный контроль над сбросом внутреннего состояния может быть достигнут с помощью так называемого LSTM с отслеживанием состояния и ручного вызова операции сброса.
Дополнительные сведения о LSTM с отслеживанием состояния в Keras см. В сообщениях:
Подготовьте данные последовательности для TBPTT в Керасе
Способ разделения данных последовательности будет определять количество временных шагов, используемых в прямом и обратном проходах BPTT.
Таким образом, вы должны тщательно продумать, как вы будете готовить данные для тренировки.
В этом разделе перечислены 6 техник, которые вы можете рассмотреть.
1. Используйте данные как есть
Вы можете использовать свои входные последовательности как есть, если количество временных шагов в каждой последовательности невелико, например, десятки или несколько сотен временных шагов.
Были предложены практические пределы для TBPTT примерно от 200 до 400 временных шагов.
Если ваши данные последовательности меньше или равны этому диапазону, вы можете преобразовать наблюдения последовательности как временные шаги для входных данных.
Например, если у вас есть коллекция из 100 одномерных последовательностей из 25 временных шагов, ее можно преобразовать в 100 выборок, 25 временных шагов и 1 функцию или [100, 25, 1].
2. Наивное разделение данных
Если у вас длинные входные последовательности, например тысячи временных шагов, вам может потребоваться разбить длинные входные последовательности на несколько смежных подпоследовательностей.
Это потребует использования LSTM с отслеживанием состояния в Keras, чтобы внутреннее состояние сохранялось на входе подпоследовательностей и сбрасывалось только в конце более полной входной последовательности.
Например, если у вас есть 100 входных последовательностей с 50 000 временных шагов, то каждую входную последовательность можно разделить на 100 подпоследовательностей по 500 временных шагов. Одна входная последовательность станет 100 отсчетов, поэтому 100 исходных отсчетов станут 10 000. Размерность ввода для Keras будет 10 000 выборок, 500 временных шагов и 1 функция или [10000, 500, 1]. Потребуется осторожность, чтобы сохранить состояние для каждых 100 подпоследовательностей и сбросить внутреннее состояние после каждых 100 выборок либо явно, либо с использованием размера пакета 100.
Разделение, которое аккуратно делит всю последовательность на подпоследовательности фиксированного размера, является предпочтительным. Выбор коэффициента полной последовательности (длины подпоследовательности) является произвольным, отсюда и название «наивное разбиение данных».
Разделение последовательности на подпоследовательности не принимает во внимание информацию домена о подходящем количестве временных шагов для оценки градиента ошибки, используемого для обновления весов.
3. Разделение данных по домену
Может быть трудно узнать правильное количество временных шагов, необходимых для получения полезной оценки градиента ошибки.
Мы можем использовать наивный подход (см. Выше), чтобы быстро получить модель, но модель может быть далека от оптимизации.
В качестве альтернативы мы можем использовать информацию о предметной области, чтобы оценить количество временных шагов, которые будут иметь отношение к модели при изучении проблемы.
Например, если проблема последовательности - это временной ряд регрессии, возможно, обзор графиков автокорреляции и частичной автокорреляции может сообщить выбор количества временных шагов.
Если проблема последовательности связана с обработкой естественного языка, возможно, входная последовательность может быть разделена на предложения, а затем дополнена до фиксированной длины или разделена в соответствии со средней длиной предложения в домене.
Подумайте широко и подумайте, какие знания, характерные для вашей области, вы можете использовать, чтобы разбить последовательность на значимые фрагменты.
4. Систематическое разделение данных (например, поиск по сетке)
Вместо того, чтобы угадывать подходящее количество временных шагов, вы можете систематически оценивать набор различных длин подпоследовательностей для вашей задачи предсказания последовательности.
Вы можете выполнить поиск в сетке по каждой длине подпоследовательности и принять конфигурацию, которая в среднем дает наилучшую производительность модели.
Некоторые предостережения, если вы рассматриваете этот подход:
- Начните с длины подпоследовательности, которая является фактором полной длины последовательности.
- Используйте заполнение и, возможно, маскирование, если исследуете длины подпоследовательностей, которые не являются фактором полной длины последовательности.
- Подумайте об использовании слегка переопределенной сети (больше ячеек памяти и больше эпох обучения), чем требуется для решения проблемы, чтобы исключить пропускную способность сети как ограничение вашего эксперимента.
- Возьмите среднюю производительность за несколько запусков (например, 30) каждой отдельной конфигурации.
Если вычислительные ресурсы не являются ограничением, рекомендуется систематическое исследование различного количества временных шагов.
5. Сильно полагайтесь на внутреннее состояние с TBPTT (1, 1)
Вы можете переформулировать задачу прогнозирования последовательности, указав один вход и один выход для каждого временного шага.
Например, если у вас было 100 последовательностей по 50 временных шагов, каждый временной шаг стал бы новой выборкой. 100 образцов превратятся в 5000. Трехмерный вход будет составлять 5000 выборок, 1 временной шаг и 1 объект, или [5000, 1, 1].
Опять же, это потребует сохранения внутреннего состояния на каждом временном шаге последовательности и сброса в конце каждой фактической последовательности (50 отсчетов).
Это возложит бремя изучения проблемы предсказания последовательности на внутреннее состояние рекуррентной нейронной сети. В зависимости от типа проблемы, это может быть больше, чем сеть может обработать, и проблема прогнозирования может быть недоступна для изучения.
Личный опыт показывает, что эта формулировка может хорошо работать для задач прогнозирования, которые требуют запоминания последовательности, но плохо работают, когда результат является сложной функцией ...