Рекуррентные нейронные сети

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

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

Рекуррентные нейронные сети решают эту проблему. Это сети с петлями в них, что позволяет сохранять информацию.

Рекуррентные нейронные сети имеют петли.

На приведенной выше диаграмме фрагмент нейронной сети A рассматривает некоторый входной xt и выводит значение ht. Цикл позволяет передавать информацию с одного шага сети на другой.

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

Развернутая рекуррентная нейронная сеть.

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

И они, безусловно, используются! В последние несколько лет был достигнут невероятный успех, применяя RNN к множеству проблем: распознавание речи, языковое моделирование, перевод, субтитры изображений … Список можно продолжить. Я оставлю обсуждение замечательных достижений, которые можно достичь с помощью RNN на превосходном блоге Андрея Карпати «Необоснованная эффективность повторяющихся нейронных сетей». Но они действительно потрясающие.

Существенным для этих успехов является использование «LSTMs» — очень специфического типа рекуррентной нейронной сети, которая работает для многих задач намного лучше стандартной. С ними достигается почти все захватывающие результаты, основанные на повторяющихся нейронных сетях. Именно эти LSTM будут изучать это эссе.

Проблема долгосрочных зависимостей.

Одним из призывов RNN является идея о том, что они могут подключать предыдущую информацию к настоящей задаче, например, используя предыдущие видеокадры, могут информировать о настоящем фрейме. Если бы RNN могли это сделать, они были бы чрезвычайно полезны. Но могут ли они? Это зависит.

Иногда нам нужно только просмотреть последнюю информацию для выполнения настоящей задачи. Например, рассмотрим модель языка, которая пытается предсказать следующее слово, основанное на предыдущих. Если мы пытаемся предсказать последнее слово в «облаках в небе», нам не нужен какой-либо дополнительный контекст — довольно очевидно, что следующее слово будет небом. В таких случаях, когда разрыв между соответствующей информацией и местом, в котором он необходим, невелик, RNN могут научиться использовать прошлую информацию.

Но есть также случаи, когда нам нужно больше контекста. Подумайте о том, чтобы попытаться предсказать последнее слово в тексте «Я вырос во Франции … Я свободно говорю по-французски». Недавняя информация предполагает, что следующим словом, вероятно, является название языка, но если мы хотим сузить язык, нам нужно В контексте Франции, от дальнейшего назад. Вполне возможно, что разрыв между релевантной информацией и точкой, в которой это необходимо, становится очень большим.

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

Теоретически RNN абсолютно способны справиться с такими «долгосрочными зависимостями». Человек мог бы тщательно выбирать параметры для решения проблем игрушек этой формы. К сожалению, на практике РНН, похоже, не могут их изучить. Эта проблема была подробно исследована Хохрейтером (1991) [German] и Bengio, et al. (1994), который нашел некоторые довольно фундаментальные причины, почему это может быть сложно.

К счастью, у LSTM нет этой проблемы!

Сети LSTM

Длинные краткосрочные сети памяти — обычно называемые «LSTM» — это особый тип RNN, способный изучать долгосрочные зависимости. Они были введены Hochreiter & Schmidhuber (1997), и были усовершенствованы и популяризированы многими людьми в следующей работе. Они работают очень хорошо по множеству проблем и в настоящее время широко используются.

LSTM специально разработаны, чтобы избежать проблемы долгосрочной зависимости. Запоминание информации в течение длительных периодов времени — это практически их поведение по умолчанию, а не то, чему они пытаются научиться!

Все рекуррентные нейронные сети имеют форму цепочки повторяющихся модулей нейронной сети. В стандартных RNN этот повторяющийся модуль будет иметь очень простую структуру, например, один слой tanh.

Повторяющийся модуль в стандартном RNN содержит один слой.

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

Повторяющийся модуль в LSTM содержит четыре взаимодействующих слоя.

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

На приведенной выше диаграмме каждая строка переносит целый вектор, начиная с вывода одного узла и входа других. Розовые круги представляют поточечные операции, такие как векторное сложение, тогда как в желтых ящиках изучаются уровни нейронной сети. Слияние линий означает объединение, в то время как строка forking обозначает, что ее содержимое копируется, а копии — в разных местах.

Основная идея за LSTM

Ключ к LSTM — состояние ячейки, горизонтальная линия, проходящая через верхнюю часть диаграммы.

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

LSTM имеет возможность удалять или добавлять информацию в состояние ячейки, тщательно регулируемую структурами, называемыми воротами.

Гейтс — это способ, по которому можно передавать информацию. Они состоят из сигмовидного слоя нейронной сетки и операции точечного умножения.

Сигмоидный слой выводит числа от нуля до единицы, описывая, сколько из каждого компонента должно быть пропущено. Значение нуля означает «не пропускать ничего через», в то время как значение одного означает «пропустить все!».

LSTM имеет три из этих ворот, чтобы защитить и контролировать состояние ячейки.

Шаг за шагом LSTM Walk Through

Первый шаг в нашей LSTM — решить, какую информацию мы собираемся выбросить из состояния ячейки. Это решение принимается сигмовидным слоем, называемым «слоем забытых ворот». Он рассматривает ht-1 и xt и выводит число между 0 и 1 для каждого номера в состоянии ячейки Ct-1. A 1 представляет «полностью сохранить это», а 0 означает «полностью избавиться от этого».

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

Следующий шаг — решить, какую новую информацию мы собираемся хранить в состоянии ячейки. Это имеет две части. Во-первых, сигмоидный слой, называемый «уровнем входных ворот», решает, какие значения мы будем обновлять. Затем слой tanh создает вектор новых значений кандидата C̃t, которые могут быть добавлены в состояние. На следующем шаге мы объединим эти два, чтобы создать обновление состояния.

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

Настало время обновить старое состояние ячейки Ct1 в новом состоянии Ct. Предыдущие шаги уже решили, что делать, нам просто нужно это сделать.

Мы умножаем старое состояние на ft, забывая то, что мы решили забыть ранее. Затем добавим его itC̃t. Это новые значения кандидатов, масштабируемые тем, насколько мы решили обновить каждое значение состояния.

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

Наконец, нам нужно решить, что мы будем выводить. Этот вывод будет основан на нашем состоянии ячейки, но будет отфильтрованной версией. Во-первых, мы запускаем слой сигмоида, который решает, какие части состояния ячейки мы собираемся вывести. Затем мы помещаем состояние ячейки через tanh (чтобы поднять значения между -1 и 1) и умножать их на выход сигмовидного затвора, так что мы выводим только те части, которые мы решили.

Для примера языковой модели, поскольку он просто видел предмет, он может захотеть выводить информацию, относящуюся к глаголу, в случае, если это будет следующим. Например, он может выводить, является ли объект сингулярным или множественным, так что мы знаем, к какой форме должен быть сопряжен глагол, если это то, что следует далее.

Варианты долгосрочной долговременной памяти

То, что я описал до сих пор, является довольно нормальным LSTM. Но не все LSTM такие же, как и выше. На самом деле, похоже, что почти каждая статья с участием LSTM использует немного другую версию. Различия незначительны, но стоит упомянуть некоторые из них.

Один популярный вариант LSTM, введенный Gers & Schmidhuber (2000), добавляет «соединения с глазок». Это означает, что мы позволяем слоям ворот смотреть на состояние ячейки.

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

Другим вариантом является использование связанных задержек и входных ворот. Вместо того, чтобы отдельно решать, что забыть и к чему мы должны добавить новую информацию, мы вместе принимаем эти решения. Мы только забываем, когда мы собираемся ввести что-то на его место. Мы вводим новые значения только в состояние, когда забываем что-то более старое.

Несколько более резкие изменения в LSTM — это Gated Recurrent Unit или GRU, введенные Cho и др. (2014). Он объединяет блоки забытых и входных данных в единый «шлюз обновления». Он также объединяет состояние ячейки и скрытое состояние и производит некоторые другие изменения. Полученная модель проще, чем стандартные модели LSTM, и становится все более популярной.

Это лишь некоторые из наиболее известных вариантов LSTM. Есть много других, таких как RHN с глубиной Gated от Yao, et al. (2015). Существует также совершенно иной подход к решению долгосрочных зависимостей, таких как Clockwork RNN by Koutnik, et al. (2014).

Какой из этих вариантов лучше? Знают ли различия? Greff, et al. (2015) делают хорошее сравнение популярных вариантов, обнаружив, что все они примерно одинаковы. Jozefowicz, et al. (2015) проверили более десяти тысяч архитектур RNN, найдя некоторые, которые работали лучше, чем LSTM для определенных задач.

Вывод

Раньше я упоминал о замечательных результатах, достигнутых людьми с RNN. По сути, все они достигаются с использованием LSTM. Они действительно работают намного лучше для большинства задач!

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

LSTM были большим шагом в том, что мы можем выполнить с RNN. Естественно удивляться: есть еще один большой шаг? Общим для исследователей является мнение: «Да! Существует следующий шаг, и это внимание! »Идея состоит в том, чтобы каждый шаг информации о наборе RNN можно было посмотреть из некоторого большего набора информации. Например, если вы используете RNN для создания заголовка, описывающего изображение, он может выбрать часть изображения для просмотра каждого выводимого слова. Фактически, Xu, et al. (2015) делают именно это — это может быть интересной отправной точкой, если вы хотите изучить внимание! Было много действительно интересных результатов с привлечением внимания, и кажется, что гораздо больше за углом …

Внимание — это не единственная интересная тема в исследованиях RNN. Например, Grid LSTM by Kalchbrenner, et al. (2015) представляется чрезвычайно перспективным. Работа с использованием RNN в генеративных моделях, таких как Gregor, et al. (2015), Chung, et al. (2015), или Bayer & Osendorfer (2015) — также представляется очень интересным. Последние несколько лет были захватывающим временем для повторяющихся нейронных сетей, а ближайшие обещали только быть более!

Подтверждения

Я благодарен нескольким людям за то, что помог мне лучше понять LSTM, прокомментировать визуализацию и предоставить отзывы об этом сообщении.

Я очень благодарен своим коллегам из Google за их отзывчивую информацию, особенно Ориол Виньялс, Грег Коррадо, Джон Шленс, Люк Вильнис и Илья Суцкве. Я также благодарен многим другим друзьям и коллегам за то, что нашел время, чтобы помочь мне, включая Дарио Амодей и Якова Штайнхардта. Я особенно благодарен Kyunghyun Cho за очень продуманную переписку о моих диаграммах.

До этого поста я практиковал объяснение LSTM во время двух семинаров, которые я преподавал в нейронных сетях. Спасибо всем, кто участвовал в них за их терпение со мной, и за их отзывы.

  1. В дополнение к оригинальным авторам многие люди способствовали созданию современного LSTM. Неофициальный список: Феликс Герс, Фред Камминс, Сантьяго Фернандес, Джастин Байер, Даан Вирстра, Джулиан Тогелиус, Фаустино Гомес, Маттео Гаглиоло и Алекс Грейвс.

Переведено гугл переводом с сайта http://colah.github.io/posts/2015-08-Understanding-LSTMs/

This article has 1 comments

  1. Арабелла Reply

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

Leave a Comment

Ваш e-mail не будет опубликован. Обязательные поля помечены *