Нежное введение в обратное распространение во времени

Нежное введение в обратное распространение во времени

Обратное распространение во времени или BPTT - это обучающий алгоритм, используемый для обновления весов в повторяющихся нейронных сетях, таких как LSTM.

Чтобы эффективно решать задачи прогнозирования последовательности кадров для рекуррентных нейронных сетей, вы должны иметь четкое концептуальное понимание того, что делает обратное распространение во времени и как настраиваемые вариации, такие как усеченное обратное распространение во времени, будут влиять на навыки, стабильность и скорость при обучении вашей сети. пост, вы получите краткое введение в Обратное распространение во времени, предназначенное для практиков (никаких уравнений!).

В этом посте вы получите краткое введение в Обратное распространение во времени, предназначенное для практиков (без уравнений!).

Прочитав этот пост, вы узнаете:

  • Что такое обратное распространение во времени и как оно связано с алгоритмом обучения обратного распространения, используемым в многослойных сетях персептронов.
  • Мотивы, которые приводят к необходимости усеченного обратного распространения во времени, наиболее широко используемого варианта глубокого обучения для обучения LSTM.
  • Нотация для размышлений о том, как настроить усеченное обратное распространение во времени и канонические конфигурации, используемые в исследованиях и библиотеками глубокого обучения.

Начните свой проект с моей новой книгой Long-Term Memory Networks With Python, включая пошаговые инструкции и Исходный код Python файлы для всех примеров.

Давайте начнем.

Нежное введение в обратное распространение во времени

Нежное введение в обратное распространение во времени
Фото Джоселин Кингхорн, некоторые права защищены.

Алгоритм обучения обратного распространения ошибки

Обратное распространение имеет отношение к двум вещам:

  • Математический метод, используемый для расчета производных, и применение правила производной цепочки.
  • Алгоритм обучения для обновления весов сети для минимизации ошибки.

Именно это последнее понимание обратного распространения ошибки мы используем здесь.

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

Это контролируемый алгоритм обучения, который позволяет корректировать сеть с учетом конкретных допущенных ошибок.

Общий алгоритм следующий:

  1. Представьте шаблон ввода для обучения и распространите его по сети, чтобы получить результат.
  2. Сравните прогнозируемые результаты с ожидаемыми и вычислите ошибку.
  3. Вычислите производные ошибки по весам сети.
  4. Отрегулируйте веса, чтобы минимизировать ошибку.
  5. Повторение.

Подробнее об обратном распространении см. В сообщении:

Алгоритм обучения Backpropagation подходит для обучения нейронных сетей с прямой связью на парах ввода-вывода фиксированного размера, но как насчет данных последовательности, которые можно упорядочить во времени?

Нужна помощь с LSTM для прогнозирования последовательности?

Пройдите мой бесплатный 7-дневный курс электронной почты и откройте для себя 6 различных архитектур LSTM (с кодом).

Нажмите, чтобы зарегистрироваться, а также получите бесплатную электронную версию курса в формате PDF.

Начните БЕСПЛАТНЫЙ мини-курс прямо сейчас!

Обратное распространение во времени

Обратное распространение во времени или BPTT - это приложение алгоритма обучения обратного распространения к рекуррентной нейронной сети, применяемой к данным последовательности, таким как временной ряд.

Рекуррентная нейронная сеть показывает по одному входу на каждом временном шаге и прогнозирует один выход.

Концептуально BPTT работает путем разворачивания всех временных шагов ввода. Каждый временной шаг имеет один временной шаг входа, одну копию сети и один выход. Затем ошибки вычисляются и накапливаются для каждого временного шага. Сеть откатывается, и веса обновляются.

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

Мы можем резюмировать алгоритм следующим образом:

  1. Представьте в сети последовательность временных шагов входных и выходных пар.
  2. Разверните сеть, затем рассчитайте и накапливайте ошибки на каждом временном шаге.
  3. Сверните сеть и обновите веса.
  4. Повторение.

BPTT может быть дорогостоящим с точки зрения вычислений, поскольку количество временных шагов увеличивается.

Если входные последовательности состоят из тысяч временных шагов, то это будет количество производных, необходимых для одного обновления веса обновления. Это может привести к исчезновению или взрыву весов (переходу к нулю или переполнению) и сделать медленное обучение и умение моделировать шумным.

Усеченное обратное распространение во времени

Усеченное обратное распространение во времени, или TBPTT, представляет собой модифицированную версию алгоритма обучения BPTT для рекуррентных нейронных сетей, в которой последовательность обрабатывается по одному временному шагу за раз и периодически (k1 временных шагов) обновление BPTT выполняется обратно для фиксированного количества временных шагов ( k2 временных шагов).

Илья Суцкевер поясняет это в своей диссертации:

Усеченное обратное распространение, возможно, является наиболее практичным методом обучения RNN.

Одна из основных проблем BPTT - высокая стоимость обновления одного параметра, что делает невозможным использование большого количества итераций.

Стоимость может быть уменьшена с помощью простого метода, который разбивает последовательность длиной 1000 на 50 (скажем) последовательностей длиной 20 и обрабатывает каждую последовательность длиной 20 как отдельный обучающий пример. Это разумный подход, который может хорошо работать на практике, но он не учитывает временные зависимости, охватывающие более 20 временных шагов.

Усеченный BPTT - метод, тесно связанный с этим. Он обрабатывает последовательность один временной шаг за раз, и каждые k1 временных шагов он запускает BPTT для k2 временных шагов, поэтому обновление параметра может быть дешевым, если k2 мало. Следовательно, его скрытые состояния подвергались воздействию многих временных шагов и поэтому могут содержать полезную информацию о далеком прошлом, которая может быть использована оппортунистически.

- Илья Суцкевер, Обучение рекуррентных нейронных сетей, Диссертация, 2013

Мы можем резюмировать алгоритм следующим образом:

  1. Представьте в сеть последовательность из k1 временных шагов входных и выходных пар.
  2. Разверните сеть, затем вычислите и накапливайте ошибки за k2 временных шагов.
  3. Сверните сеть и обновите веса.
  4. Повторение

Алгоритм TBPTT требует учета двух параметров:

  • k1: Количество временных шагов прямого прохода между обновлениями. Как правило, это влияет на то, насколько медленными или быстрыми будут тренировки с учетом того, как часто выполняется обновление веса.
  • k2: Количество временных шагов, к которым применяется BPTT. Как правило, он должен быть достаточно большим, чтобы охватить временную структуру проблемы, которую сеть могла бы изучить. Слишком большое значение приводит к исчезновению градиентов.

Чтобы было понятнее:

… Можно использовать приближение к нему с ограниченной историей, при котором релевантная информация сохраняется для фиксированного числа временных шагов h, а любая более старая информация забывается. В общем, это следует рассматривать как эвристический метод для упрощения вычислений, хотя, как обсуждается ниже, он иногда может служить адекватным приближением к истинному градиенту, а также может быть более подходящим в тех ситуациях, когда веса корректируются как сеть бежит. Назовем этот алгоритм усеченным обратным распространением во времени. Когда h представляет количество сохраненных предыдущих временных шагов, этот алгоритм будет обозначен как BPTT (h).

Обратите внимание, что в BPTT (h) обратный проход через самые последние h временных шагов выполняется заново каждый раз, когда сеть проходит через дополнительный временной шаг. Чтобы обобщить это, можно рассмотреть возможность прохождения сети через h0 дополнительных временных шагов перед выполнением следующего вычисления BPTT, где h0 <= h.

Ключевой особенностью этого алгоритма является то, что следующий обратный проход не выполняется до временного шага t + h0; за это время история входных данных сети, состояния сети и целевых значений сохраняется в буфере истории, но обработка этих данных не выполняется. Обозначим этот алгоритм BPTT (h; h0). Очевидно, что BPTT (h) - это то же самое, что BPTT (h; 1), а BPTT (h; h) - это эпохальный алгоритм BPTT.

- Рональд Дж. Уильямс и Цзин Пэн, Эффективный градиентный алгоритм для онлайн-обучения рекуррентных сетевых траекторий, 1990 г.

Мы можем позаимствовать обозначения у Вильямса и Пэна и называть различные конфигурации TBPTT как TBPTT (k1, k2).

Используя эту нотацию, мы можем определить некоторые стандартные или общие подходы:

Обратите внимание, здесь n означает общее количество временных шагов в последовательности:

  • TBPTT (n, n): Обновления выполняются в конце последовательности на всех временных шагах последовательности (например, классический BPTT).
  • TBPTT (1, n): временные шаги обрабатываются по одному, после чего следует обновление, охватывающее все временные шаги, наблюдаемые до сих пор (например, классический TBPTT Уильямса и Пэна).
  • TBPTT (k1,1): Сеть, вероятно, не имеет достаточного временного контекста для изучения, в значительной степени полагаясь на внутреннее состояние и входные данные.
  • TBPTT (k1, k2), где k1 : Для каждой последовательности выполняется несколько обновлений, что может ускорить обучение.
  • TBPTT (k1, k2), где k1 = k2: Общая конфигурация, в которой фиксированное количество временных шагов используется как для прямого, так и для обратного временного шага (например, от 10 до 100 секунд).

Мы видим, что все конфигурации являются вариациями TBPTT (n, n), которые по сути пытаются приблизить тот же эффект, возможно, с более быстрым обучением и более стабильными результатами.

Канонический TBPTT, описанный в статьях, можно рассматривать как TBPTT (k1, k2), где k1 = k2 = h и h <= n, и где выбранный параметр мал (от десятков до сотен временных шагов).

В таких библиотеках, как TensorFlow и Keras, все выглядит одинаково, и h определяет векторизованную фиксированную длину временных шагов подготовленных данных.

Дальнейшее чтение

В этом разделе представлены некоторые ресурсы для дальнейшего чтения.

Книги

Статьи

Статьи

Резюме

В этом посте вы узнали об обратном распространении во времени для обучения повторяющихся нейронных сетей.

В частности, вы узнали:

  • Что такое обратное распространение во времени и как оно связано с алгоритмом обучения обратного распространения, используемым в многослойных сетях персептрона.
  • Мотивы, которые приводят к необходимости усеченного обратного распространения во времени, наиболее широко используемого варианта глубокого обучения для обучения LSTM.
  • Нотация для размышлений о том, как настроить усеченное обратное распространение во времени и канонические конфигурации, используемые в исследованиях и библиотеками глубокого обучения.

Есть ли у вас какие-либо вопросы об обратном распространении во времени?
Задайте свои вопросы в комментариях ниже, и я постараюсь ответить.

Разработайте LSTM для прогнозирования последовательности уже сегодня!

Сети с долгосрочной краткосрочной памятью с Python

Разработайте свои собственные модели LSTM за считанные минуты

... всего несколькими строками кода Python

Узнайте, как в моей новой электронной книге:
Сети с долгосрочной краткосрочной памятью с Python

Это обеспечивает самообучения на такие темы, как:
CNN LSTM, кодировщик-декодер LSTM, генеративные модели, подготовка данных, прогнозирование и многое другое...

Наконец, доведите рекуррентные нейронные сети LSTM до
Ваши проекты прогнозирования последовательности

Пропустите академики. Только результаты.

Посмотрите, что внутри

Вас также может заинтересовать