Методология обучения рекуррентной искусственной нейронной сети с динамической стековой памятью. Open Library - открытая библиотека учебной информации

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

Нейронные сети

Для начала давайте вспомним, что вообще такое искусственная нейронная сеть. В одной из предыдущих статей мы уже обсуждали, что ИНС – это сеть искусственных нейронов («черный ящик» со множеством входов и одним выходом), осуществляющая преобразование вектора входных сигналов (данных) в вектор выходных сигналов при помощи некоей функции, называемой функцией активации. При этом между слоем «принимающих» нейронов и выходным слоем присутствует как минимум один промежуточный.

Вид структуры ИНС определяет понятие обратной связи: таким образом, в ИНС прямого распространения сигнал идет последовательно от входного слоя нейронов по промежуточным к выходному; рекуррентная же структура подразумевает наличие обратных связей, когда сигнал с выходных или промежуточных нейронов частично поступает на входы входного слоя нейронов (или одного из внешних промежуточных слоев).

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

Если остановится на рекуррентных ИНС немного подробнее, то выяснится, что наиболее современные (и считающиеся наиболее «удачными») из них берут начало из структуры, называемой многослойным перцептроном (математической модели мозга – ИНС прямого распространения с промежуточными слоями). При этом со времен своего появления они претерпели значительные изменения – и ИНС «нового поколения» устроены гораздо проще своих предшественников, при том, что они позволяют с успехом решать задачи запоминания последовательностей. Так, к примеру, наиболее популярная на сегодняшний день сеть Элмана устроена таким образом, что обратный сигнал с внутреннего слоя поступает не на «главные» входные нейроны, а на дополнительные входы – так называемый контекст. Эти нейроны хранят информацию о предыдущем входном векторе (стимуле); получается, что выходной сигнал (реакция сети) зависит не только от текущего стимула, но и от предыдущего.

Решение задачи прогнозирования

Понятно, что сети Элмана потенциально пригодны для прогнозирования (в частности, временных рядов). Однако известно также, что нейронные сети прямого распространения с успехом справляются с этой задачей – правда, не во всех случаях. Как пример, предлагаем рассмотреть одну из наиболее популярных вариаций задачи прогнозирования – прогнозирование временных рядов (ВР). Постановка задачи сводится к выбору произвольного ВР с N отсчетами. Далее данные разделяются на три выборки – обучающую, тестирующую и контрольную – и подаются на вход ИНС. Полученный результат будет представлен в виде значения временного ряда в требуемый момент времени.

В общем случае, задача прогнозирования временных рядов с помощью ИНС сводится к следующей последовательности этапов:

  • сбор данных для обучения (этап, считающийся одним из наиболее сложных);
  • подготовка и нормализация данных (приведение к виду ВР);
  • выбор топологии ИНС (на этом этапе принимается решение о количестве слоев и наличии обратной связи);
  • эмпирический (путем эксперимента) подбор характеристик ИНС;
  • эмпирический подбор параметров обучения;
  • обучение ИНС;
  • проверка обучения на адекватность поставленной задаче;
  • корректировка параметров с учетом предыдущего шага, окончательное обучение;
  • вербализация ИНС (минимизированное описание с использованием нескольких алгебраических или логических функций) с целью дальнейшего использования.

Почему рекуррентные ИНС?

Понятно, что решение о топологии ИНС способно повлиять на результат; но вернемся к началу разговора: почему же мы сознательно выбрали темой этой статьи прогнозирование при помощи рекуррентной сети? Ведь, если «погуглить», прогнозирование ВР в работах обычно производится при помощи многослойных перцептронов (мы помним, что это сети прямого распространения) и метода обратного распространения ошибки. Здесь стоит пояснить: да, действительно, в теории такие ИНС хорошо решают задачу прогнозирования – при условии, что степень зашумленности (ошибок и пропусков во входных данных), например, исходного временного ряда минимальна.

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

Использование рекуррентной сети Элмана позволяет решать задачу прогнозирования даже на сильно зашумленных временных рядах (это особенно важно для бизнеса). В общем случае эта ИНС представляет собой структуру из трех слоев, а также набора дополнительных «контекстных» элементов (входов). Обратные связи идут от скрытого слоя к этим элементам; каждая связь имеет фиксированный вес, равный единице. На каждом временном отрезке входные данные распределяются по нейронам в прямом направлении; затем на них применяется обучающее правило. Благодаря фиксированным обратным связям, контекстные элементы всегда хранят копию значений из скрытого слоя за предыдущий шаг (поскольку они отправляются в обратном направлении еще до применения обучающего правила). Таким образом, шум временного ряда постепенно нивелируется, и вместе с ним минимизируется и ошибка: мы получаем прогноз, который в общем случае будет точнее, чем результат классического подхода, что западные работы подтверждают экспериментально.

Резюме

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

К одному из сложных видов искусственных нейронных сетей (ИНС) относятся рекуррентные, в которых имеются обратные связи. В первых рекуррентных ИНС главной идеей было обучение своему выходному сигналу на предыдущем шаге. Рекуррентные сети реализуют нелинейные модели, которые могут быть применены для оптимального управления процессами, изменяющимися во времени, то есть обратные связи позволяют обеспечить адаптивное запоминание прошлых временных событий. Обобщение рекуррентных ИНС позволит создать более гибкий инструмент для построения нелинейных моделей. Рассмотрим некоторые архитектуры рекуррентных ИНС.

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

Сеть Элмана так же, как и сеть Джордана получается из многослойного персептрона введением обратных связей. Только сигналы на входной слой идут не от выходов сети, а от выходов нейронов скрытого слоя . Пример архитектуры сети Элмана показан на рис. 1. Выходы скрытого слоя { c 1 , c 2 ,…, c k } подаются с временной задержкой на входные нейроны с весовыми коэффициентам { w ij } -1 , где i (i = 1,2,…, n ) , j j = 1,2…, k ).

Рис. 1. Пример архитектуры сети Элмана

Для обобщения рекуррентных ИНС в статье предлагается добавить задержку сигналов обратной связи скрытого слоя на нескольких тактов. Для этого добавим у слоя динамическую стековую память. Пример архитектуры такой ИНС показан на рис. 2.

Рис. 2. Пример архитектуры рекуррентной ИНС с динамической стековой памятью нескольких предыдущих выходных сигналов скрытого слоя

Выходы скрытого слоя { c 1 , c 2 ,…, c k } подаются на входные нейроны с весовыми коэффициентам { w ij } - t , где i – индекс нейрона, на который подается сигнал (i = 1,2,…, n ) , j – индекс выходного сигнала нейрона скрытого слоя (j = 1,2…, k ) , t – индекс временной задержки (t =1,2… m ). Количество временных задержек будем изменять от 1 до m . Таким образом, сеть Элмана получается при m =1, а многослойный персептрон – при m =0.

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

Рассмотрим процесс трансформации обучающей выборки для решения задачи прогнозирования временного ряда с помощью рекуррентной ИНС с динамической стековой памятью. В качестве примера будем использовать среднемесячные значения плотности потока солнечного излучения на длине волны 10,7 за 2010-2012 года (табл. 1) .

Таблица 1. Данные о плотности потока солнечного излучения на длине волны 10,7 см. за 2010-2012 гг

№ примера Дата Плотность потока излучения 10 -22 [Вт/м 2 ]
1 Январь 2010 834,84
2 Февраль 2010 847,86
3 Март 2010 833,55
4 Апрель 2010 759,67
5 Май 2010 738,71
6 Июнь 2010 725,67
7 Июль 2010 799,03
8 Август 2010 797,10
9 Сентябрь 2010 811,67
10 Октябрь 2010 816,77
11 Ноябрь 2010 824,67
12 Декабрь 2010 843,23
13 Январь 2011 837,42
14 Февраль 2011 945,71
15 Март 2011 1153,87
16 Апрель 2011 1130,67
17 Май 2011 959,68
18 Июнь 2011 959,33
19 Июль 2011 942,58
20 Август 2011 1017,74
21 Сентябрь 2011 1345,00
22 Октябрь 2011 1372,90
23 Ноябрь 2011 1531,67
24 Декабрь 2011 1413,55
25 Январь 2012 1330,00
26 Февраль 2012 1067,93
27 Март 2012 1151,29
28 Апрель 2012 1131,67
29 Май 2012 1215,48
30 Июнь 2012 1204,00

Трансформируем временной ряд методом скользящих окон , как показано в таблице 2.

Таблица 2. Обучающая выборка ИНС для решения задачи прогнозирования, полученная в результате преобразования временного ряда методом окон

№ примера Входы ИНС (x ) Выходы ИНС (y )
x 1 x 2 x 3 y 1
1 834,84 847,86 833,55 759,67
2 847,86 833,55 759,67 738,71
3 833,55 759,67 738,71 725,67

Пусть в рекуррентной ИНС скрытый слой содержит три нейрона, выходной – один нейрон, стек динамической памяти – обратные сигналы скрытого слоя с задержкой на два такта (рис. 3).

Рис. 3. Рекуррентная ИНС с памятью двух предыдущих выходных сигналов скрытого слоя

Так как число нейронов скрытого слоя, имеющих обратную связь с входным слоем, равно трем, то размер входного вектора во время обучения ИНС при запоминании предыдущего выходного сигнала на один шаг назад увеличится на три, при запоминании двух предыдущих выходных сигналов – на шесть. Обозначим входные сигналы обучающей выборки, не изменяющиеся во время трансформации, как {x 1 , x 2 , x 3 }, а сигналы обратной связи – {x 4 , x 5 , x 6 , x 7 , x 8 , x 9 }. В таблице 3 приведена трансформированная обучающая выборка.

Таблица 3. Добавление в обучающую выборку рекуррентной ИНС выходных сигналов скрытого слоя

№ п/п Входы ИНС (x ) Выходы ИНС (y )
x 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 y 1
1 834,84 847,86 833,55 0 0 0 0 0 0 759,67
2 847,86 833,55 759,67 c 1 -1 c 2 -1 c 3 -1 0 0 0 738,71
3 833,55 759,67 738,71 c 1 -1 c 2 -1 c 3 -1 c 1 - 2 c 2 - 2 c 3 - 2 725,67

На входы {x 4 , x 5 , x 6 } подаются выходные сигналы скрытого слоя с задержкой на один такт {с 1 -1 , c 2 -1 , c 3 -1 }, на входы {x 7 , x 8 , x 9 } – выходные сигналы скрытого слоя с задержкой на два такта {с 1 -2 , c 2 -2 , c 3 -2 }.

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

Объектно-ориентированная модель рекуррентной ИНС с динамической стековой памятью представлена на диаграмме классов (рис. 4).

Рис. 4. Диаграмма основных классов, реализующих рекуррентную ИНС с динамической стековой памятью

В отличие от класса Layer , который является контейнером для нейронов многослойного персептрона, класс LayerMemory cодержит память stackOut , реализованную в виде стека предыдущих сигналов слоя. Размер стека задается с помощью свойства stackSize . На схеме (рис. 5) память слоя изображена в виде стека выходных сигналов слоя {y -1 , y -2 , …, y - n }, где n – размер стека. Каждая ячейка стека y - i состоит из массива выходов нейронов слоя {y 1, y 2, …, y n }. Стек организован так, что после переполнения памяти последняя ячейка y - n удаляется, вся очередь сдвигается на одну позицию, так что y - i = y -( i -1) .

Рис. 5. Реализация слоя с памятью (LayerMemory ) для рекуррентных ИНС с динамической стековой памятью

Проведем прогноз среднемесячной плотности солнечной активности на длине волны 10,7 см на первые шесть месяцев 2012 года на основе данных за 2010-2011 года из табл. 1. Для этого построим и обучим рекуррентную ИНС с динамической стековой памятью (рис.3) с помощью нейроэмулятора NeuroNADS . Первые 24 примера временного ряда возьмем для обучающей выборки, а оставшиеся шесть примеров – для тестовой выборки.

Обучение проведем гибридным алгоритмом . Параметры алгоритма: шаг обучения – 0,3, максимальное количество особей в поколении – 10, коэффициент мутации – 0,1. Критерии остановки обучения: среднеквадратическая ошибка – 0,001, количество эпох – 1000.

Один из лучших результатов обучения ИНС представлен на рис. 6 и на рис. 7. Показатели ошибок прогнозирования временного ряда представлены в табл. 4.

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

Рис. 6. Результаты опроса рекуррентной ИНС с динамической стековой памятью на обучающей и тестовой выборках (по оси абсцисс – номер примера, по оси ординат – значение временного ряда)

Рис. 7. График изменения функции среднеквадратической ошибки рекуррентной ИНС с динамической стековой памятью во время обучения (по оси абсцисс – количество эпох, по оси ординат – значение ошибки)

Таблица 4. Показатели ошибок прогнозирования временного ряда

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

Исследование выполнено при финансовой поддержке РФФИ в рамках научного проекта № 14-01-00579 а.

Список литературы:

  1. Бодянский Е.В., Руденко О.Г. Искусственные нейронные сети: архитектуры, обучение, применения. – Харьков: ТЕЛЕТЕХ, 2004. – 369 с.
  2. Осовский С. Нейронные сети для обработки информации / Пер. с польского И.Д. Рудинского. – М.: Финансы и статистика, 2002. – 344 с.
  3. Информационно-аналитическая система [Электронный ресурс]: данные о солнечной и геомагнитной активности – Режим доступа: http://moveinfo.ru/data/sun/select (доступ свободный) – Загл. с экрана. – Яз. рус.
  4. Круг П.Г. Нейронные сети и нейрокомпьютеры. М.: Издательство МЭИ, 2002 г. – 176 с.
  5. Нейроэмулятор NeuroNADS [Электронный ресурс]: веб-сервис - Режим доступа: http://www.service.. с экрана. – Яз. рус.
  6. Белявский Г.И., Пучков Е.В., Лила В.Б. Алгоритм и программная реализация гибридного метода обучения искусственных нейронных сетей // Программные продукты и системы. Тверь, 2012. №4. С. 96 - 100.

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

Архитектура рекуррентных сетей

Существуют различные варианты архитектур рекуррентных ней­ронных сетей.

Сеть Джордана: В 1986 г. Джордан (Jordan) предложил рекур­рентную сеть (рис. 6), в которой выходы нейронных элементов по­следнего слоя соединены посредством специальных входных нейронов с нейронами промежуточного слоя. Такие входные нейронные эле­менты называются контекстными нейронами (context units). Они рас­пределяют выходные данные нейронной сети на нейронные элементы промежуточного слоя.

Рис. 6 Архитектура рекуррентной ней­ронной сети с обратными связями от нейро­нов выходного слоя

Число контекстных нейронов равняется числу выходных ней­ронных элементов рекуррентной сети. В качестве выходного слоя та­ких сетей используются нейронные элементы с линейной функцией активации. Тогда выходное значение j -го нейронного элемента последнего слоя определяется по формуле

где v ij - весовой коэффи­циент между i -м нейроном промежуточного и j -м ней­роном выходного слоев; P i (t )- выходное значение i -го нейрона промежуточ­ного слоя; t j - пороговое значение j -го нейрона вы­ходного слоя. Взвешенная сумма i -гo нейронного элемента промежуточного слоя определяется следующим образом:

где w ij - весовой коэффициент между j -м нейроном входного и i -м нейроном промежуточного слоев; р - число нейронов выходного слоя; w ki - весовой коэффициент между k -м контекстным нейроном и i -м нейроном промежуточного слоя; T - пороговое значение i -го нейрона промежуточного слоя; n - размерность входно­го вектора.



Тогда выходное значение i -го нейрона скрытого слоя

В качестве функции не­линейного преобразования F обычно используется гипер­болический тангенс или сигмоидная функция.

Для обучения рекуррентных нейронных сетей применяется алго­ритм обратного распространения ошибки.

Алгоритм обучения рекуррентной нейронной сети в общем слу­чае состоит из следующих шагов:

1. В начальный момент времени t = 1 все контекстные нейроны устанавливаются в нулевое состояние - выходные значения прирав­ниваются нулю.

2. Входной образ подается на сеть и происходит прямое распро­странение его в нейронной сети.

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

4. Устанавливается t = t +1 и осуществляется переход к шагу 2. Обучение рекуррентной сети производится до тех пор, пока сум­марная среднеквадратичная ошибка сети не станет меньше заданной.

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

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

Рекуррентные сети направлены на исправление этого недостатка: они содержат циклы, которые позволяют сохранять информацию.

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

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

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

И, естественно, они используются. За последние несколько лет был достигнут значительный успех в применении рекуррентных нейронных сетей для распознавания речи, моделирования языка, перевода, распознавания изображений и других интересных вещей. Оставим размышления о способах применения рекуррентных сетей для Андрея Карпатого в его блоге: The Unreasonable Effectiveness of Recurrent Neural Networks .

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

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

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

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

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

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

Теоретически рекуррентные нейронные сети в состоянии обрабатывать такие долгосрочные зависимости (а человек может тщательно выбирать параметры для сети). Однако, на практике рекуррентные нейронные сети не в состоянии обучиться в таких задачах. Проблема была изучена специалистами Хохрайтером (1991) [Германия] и Бенджио и др.(1994) , которые определили фундаментальные причины сложности этой задачи.

Однако, LSTM сети не имеют такой проблемы.

LSTM сети

Долгая краткосрочная память (Long short-term memory), обычно называемая LSTM-сетями - это особый вид рекуррентных нейронных сетей, способных к запоминанию долговременных зависимостей. Они были введены Сеппом Хохрайтером и Юргеном Шмидхубером в 1997 году и были использованы и развиты многими исследователями в своих работах. Эти сети работают в широком спектре задач и довольно часто используются.

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

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

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

Повторяющиеся модули в LSTM-сети, содержащие 4 слоя

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

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

Базовая идея LSTM-сетей

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

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

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

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

Выход сигмоиды - это число от 0 до 1, обозначающее какая часть каждого элемента вектора будет пропущена далее. Значение 0 можно понимать, как «ничего не пропускать», в то время как значение 1 - «пропустить полностью»

LSTM имеют три таких элемента для защиты и контроля состояния ячейки.

Пошаговый анализ работы LSTM-сети

Первый шаг в LSTM сети - это решение, какую информацию необходимо выбросить из состояния ячейки. Решение формируется сигмовидным слоем называемым входным вентилем. Он обозначен, как \(h_{t-1}\) и \(x_{t}\) и имеют числовой выход со значением между 0 и 1 для каждой ячейки состояния \(C_{t-1}\). 1 обозначает «полностью сохранить», 0 - «полностью избавиться».

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

Следующим шагом необходимо определить, какая информация будет храниться в состоянии ячейки. Этот этап состоит из двух частей. Первая: входной вентиль должен определить какие значения будут обновляться, а tanh слой создает вектор новых кандидатов на значения \(\tilde C_t\), которые могут быть добавлены в состояние. На следующем шаге мы комбинируем два созданных вектора для обновления состояния.

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

Для реализации этого умножаем прошлое состояние на \(f_{t}\) для «забывания» данных признанных ненужными на прошлом шаге. Затем добавляется \(i_t * \tilde C_t\). Это новые значения значений, выбранные ранее для запоминания.

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

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

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

Вариации LSTM-сетей

Выше мы рассмотрели классические LSTM-сети, однако существует множество их вариаций. На самом деле, фактически в каждом исследовании, с использованием LSTM-сетей используется не совсем классическая модель. Различия, как правило, незначительны, но стоит отметить основные.

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

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

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

Чуть более серьезное изменение LSTM-сетей - Рекуррентный модуль с затворами (Gated Recurrent Unit) или GRU, введенные Cho, и др. (2014) . Этот подход комбинирует вентили «забывания» и входные вентили в единый вентиль обновления. Кроме того объединяется состояние и скрытое состояние ячейки и содержит некоторые другие менее значительные изменения. Полученная модель является более простой, чем классическая LSTM модель и становится все более популярной.

Это лишь некоторые вариации LSTM-модели. Существует множество других, таких как глубокие вентильные рекуррентные нейронные сети (Depth Gated RNNs) Yao и др. (2015) . Кроме того предлагаются принципиально иные подходы, такие как часовые нейронные сети (Clockwork RNNs) предложенные Koutnik и др. (2014) .

Какой из этих вариантов лучше? Имеются ли различия? Greff и др (2015) делая неплохое сравнение популярных вариантов, приходят к выводу о том, что они примерно одинаковы. Jozefowicz, и др. (2015) протестировав более 10 тысяч архитектур рекуррентных нейронных сетей, говорят о том, что некоторые из них работали лучше чем LSTM в специализированных задачах.

Заключение

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

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

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

N+1 совместно с МФТИ продолжает знакомить читателя с наиболее яркими аспектами современных исследований в области искусственного интеллекта. В мы писали об общих принципах машинного обучения и конкретно о методе обратного распространения ошибки для обучения нейросетей. Сегодня наш собеседник - Валентин Малых, младший научный сотрудник Лаборатории нейронных систем и глубокого обучения. Вместе с ним мы поговорим о необычном классе этих систем - рекуррентных нейросетях, их особенностях и перспективах, как на поприще всевозможных развлечений в стиле DeepDream, так и в «полезных» областях. Поехали.

Что такое рекуррентные нейросети (РНС) и чем они отличаются от обычных?

Давайте сначала вспомним, что такое «обычные» нейросети, и тогда сразу станет понятно, чем они отличаются от реккурентных. Представим себе самую простую нейросеть - перцептрон. Он представляет собой один слой нейронов, каждый из которых принимает кусочек входных данных (один или несколько битов, действительных чисел, пикселей и т.п.), модифицирует его с учетом собственного веса и передает дальше. В однослойном перцептроне выдача всех нейронов объединяется тем или иным образом, и нейросеть дает ответ, но возможности такой архитектуры сильно ограниченны. Если вы хотите получить более продвинутый функционал, можно пойти несколькими путями, например, увеличить количество слоев и добавить операцию свертки, которая бы «расслаивала» входящие данные на кусочки разных масштабов. В этом случае у вас получатся сверточные нейросети для глубинного обучения, которые преуспели в обработке изображений и распознавании котиков. Однако что у примитивного перцептрона, что у сверточной нейросети есть общее ограничение: и входные и выходные данные имеют фиксированный, заранее обозначенный размер, например, картинка 100×100 пикселей или последовательность из 256 бит. Нейросеть с математической точки зрения ведет себя как обычная функция, хоть и очень сложно устроенная: у нее есть заранее обозначенное число аргументов, а также обозначенный формат, в котором она выдает ответ. Простой пример - функция x 2 , она принимает один аргумент и выдает одно значение.

Вышеперечисленные особенности не представляет больших трудностей, если речь идет о тех же картинках или заранее определенных последовательностях символов. Но что, если вы хотите использовать нейросеть для обработки текста или музыки? В общем случае - любой условно бесконечной последовательности, в которой важно не только содержание, но и порядок, в котором следует информация. Вот для этих задач и были придуманы рекуррентные нейросети. Их противоположности, которые мы называли «обычными», имеют более строгое название - нейросети прямого распространения (feed-forward neural networks), так как в них информация передается только вперед по сети, от слоя к слою. В рекуррентных нейросетях нейроны обмениваются информацией между собой: например, вдобавок к новому кусочку входящих данных нейрон также получает некоторую информацию о предыдущем состоянии сети. Таким образом в сети реализуется «память», что принципиально меняет характер ее работы и позволяет анализировать любые последовательности данных, в которых важно, в каком порядке идут значения - от звукозаписей до котировок акций.

Схема однойслойной рекуррентной нейронной сети: на каждом цикле работы внутренний слой нейронов получает набор входных данных Х и информацию о предыдущем состоянии внутреннего слоя А, на основании чего генерирует ответ h.

Наличие памяти у рекуррентных нейросетей позволяет несколько расширить нашу аналогию с x 2 . Если нейросети прямого распространения мы назвали «простой» функцией, то рекуррентные нейросети можно почти с чистой совестью назвать программой. В самом деле, память рекуррентных нейросетей (хотя и не полноценная, но об этом позже) делает их Тьюринг-полными: при правильном задании весов нейросеть может успешно эмулировать работу компьютерных программ.

Немного углубимся в историю: когда были придуманы РНС, для каких задач и в чем, как тогда казалось, должно было заключаться их преимущество перед обычным перцептроном?

Вероятно, первой РНС была сеть Хопфилда (впервые упомянута в 1974 году, окончательно оформилась в 1982-м), которая реализовывала на практике ячейку ассоциативной памяти. От современных РНС она отличается тем, что работает с последовательностями фиксированного размера. В простейшем случае сеть Хопфилда имеет один слой внутренних нейронов, связанных между собой, а каждая связь характеризуется определенным весом, задающим ее значимость. С такой сетью ассоциируется некий эквивалент физической «энергии», который зависит от всех весов в системе. Сеть можно обучить при помощи градиентного спуска по энергии, когда минимум соответствует состоянию, в котором сеть «запомнила» определенный шаблон, например 10101 . Теперь, если ей на вход подать искаженный, зашумленный или неполный шаблон, скажем, 10000 , она «вспомнит» и восстановит его аналогично тому, как работает ассоциативная память у человека. Эта аналогия достаточно отдаленна, поэтому не стоит воспринимать ее чересчур серьезно. Тем не менее, сети Хопфилда успешно справлялись со своей задачей и обходили по возможностям существовавшие тогда перцептроны. Интересно, что оригинальная публикация Джона Хопфилда в Proceedings of the National Academy of Sciences вышла в разделе «Биофизика».


Проблема долгосрочной памяти в простых РНС: чем больше циклов прошло с момента получения той или иной информации, тем больше вероятность, что значимость этих данных не будет играть большой роли на новом цикле работы.

Christopher Olah / colah.github.io

Следующим шагом в эволюции РНС была «простая рекуррентная сеть» Джеффа Элмана, описанная в 1990 году. В ней автор подробно затронул вопрос о том, как можно (и можно ли вообще) обучить нейросеть распознавать временные последовательности. Например, если есть входящие данные 1100 и 0110 , можно ли их считать одним и тем же набором, сдвинутым во времени? Конечно, можно, но как обучить этому нейросеть? Обычный перцептрон легко запомнит эту закономерность для любых примеров, которые ему предложат, но каждый раз это будет задачей сравнения двух разных сигналов, а не задачей об эволюции или сдвиге одного и того же сигнала. Решение Элмана, основанное на предыдущих наработках в этой области, основывалось на том, что в простую нейросеть добавлялся еще один - «контекстный» - слой, в который просто копировалось состояние внутреннего слоя нейронов на каждом цикле работы сети. При этом связь между контекстным и внутренним слоями можно было обучать. Такая архитектура позволяла сравнительно легко воспроизводить временные ряды, а также обрабатывать последовательности произвольной длины, что резко отличало простую РНС Элмана от предыдущих концепций. Более того, эта сеть смогла распознать и даже классифицировать существительные и глаголы в предложении, основываясь только на порядке слов, что было настоящим прорывом для своего времени и вызвало огромный интерес как лингвистов, так и специалистов по исследованию сознания.

За простой РНС Элмана последовали все новые разработки, а в 1997 году Хохрейтер и Шмидхубер опубликовали статью «Long Short-term memory » («долгосрочная краткосрочная память», также существует множество других вариаций перевода), заложившую основу для большинства современных РНС. В своей работе авторы описывали модификацию, решавшую проблему долгосрочной памяти простых РНС: их нейроны хорошо «помнят» недавно полученную информацию, но не имеют возможности надолго сохранить в памяти что-то, что обработали много циклов назад, какой бы важной та информация ни была. В LSTM-сетях внутренние нейроны «оборудованы» сложной системой так называемых ворот (gates), а также концепцией клеточного состояния (cell state), которая и представляет собой некий вид долгосрочной памяти. Ворота же определяют, какая информация попадет в клеточное состояние, какая сотрется из него, и какая повлияет на результат, который выдаст РНС на данном шаге. Подробно разбирать LSTM мы не будем, однако отметим, что именно эти вариации РНС широко используется сейчас, например, для машинного перевода Google.


Принцип работы РНС типа LSTM: нейроны внутренних слоев могут считывать и изменять состояние ячейки (cell state), которое сочетает в себе функции краткосрочной и долгосрочной памяти.

Christopher Olah / colah.github.io

Все прекрасно звучит на словах, но что все-таки РНС умеют делать? Вот дали им текст почитать или музыку послушать - а дальше что?

Одна из главных областей применения РНС на сегодняшний день - работа с языковыми моделями, в частности - анализ контекста и общей связи слов в тексте. Для РНС структура языка - это долгосрочная информация, которую надо запомнить. К ней относятся грамматика, а также стилистические особенности того корпуса текстов, на которых производится обучение. Фактически РНС запоминает, в каком порядке обычно следуют слова, и может дописать предложение, получив некоторую затравку. Если эта затравка случайная, может получиться совершенно бессмысленный текст, стилистически напоминающий шаблон, на котором училась РНС. Если же исходный текст был осмысленным, РНС поможет его стилизовать, однако в последнем случае одной РНС будет мало, так как результат должен представлять собой «смесь» случайного, но стилизованного текста от РНС и осмысленной, но «неокрашенной» исходной части. Эта задача уже настолько напоминает популярные ныне для обработки фотографий в стиле Моне и Ван Гога, что невольно напрашивается аналогия.

Действительно, задача переноса стиля с одного изображения на другой решается при помощи нейросетей и операции свертки, которая разбивает изображение на несколько масштабов и позволяет нейросетям анализировать их независимо друг от друга, а впоследствии и перемешивать между собой. Аналогичные операции и с музыкой (также с помощью сверточных нейросетей): в этом случае мелодия является содержанием, а аранжировка - стилем. И вот с написанием музыки РНС как раз успешно справляется . Поскольку обе задачи - и написание, и смешивание мелодии с произвольным стилем - уже успешно решены при помощи нейросетей, совместить эти решения остается делом техники.

Наконец, давайте разберемся, почему музыку РНС худо-бедно пишут, а с полноценными текстами Толстого и Достоевского возникают проблемы? Дело в том, что в инструментальной музыке, как бы по-варварски это ни звучало, нет смысла в том же значении, в каком он есть в большинстве текстов. То есть музыка может нравиться или не нравиться, но если в ней нет слов - она не несет информационной нагрузки (конечно, если это не секретный код). Именно с приданием своим произведениям смысла и наблюдаются проблемы у РНС: они могут превосходно выучить грамматику языка и запомнить, как должен выглядеть текст в определенном стиле, но создать и донести какую-то идею или информацию РНС (пока) не могут.


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

Daniel Johnson / hexahedria.com

Особый случай в этом вопросе - это автоматическое написание программного кода. Действительно, поскольку язык программирования по определению представляет собой язык , РНС может его выучить. На практике оказывается, что программы, написанные РНС, вполне успешно компилируются и запускаются, однако они не делают ничего полезного, если им заранее не обозначить задачу . А причина этого та же, что и в случае литературных текстов: для РНС язык программирования - не более чем стилизация, в которую они, к сожалению, не могут вложить никакого смысла.

«Генерация бреда» это забавно, но бессмысленно, а для каких настоящих задач применяются РНС?

Разумеется, РНС, помимо развлекательных, должны преследовать и более прагматичные цели. Из их дизайна автоматически следует, что главные области их применения должны быть требовательны к контексту и/или временной зависимости в данных, что по сути одно и то же. Поэтому РНС используются, к примеру, для анализа изображений. Казалось бы, эта область обычно воспринимается в контексте сверточных нейросетей, однако и для РНС здесь находятся задачи: их архитектура позволяет быстрее распознавать детали, основываясь на контексте и окружении. Аналогичным образом РНС работают в сферах анализа и генерации текстов. Из более необычных задач можно вспомнить попытки использовать ранние РНС для классификации углеродных спектров ядерного магнитного резонанса различных производных бензола, а из современных - анализ появления негативных отзывов о товарах.

А каковы успехи РНС в машинном переводе? В Google Translate ведь именно они используются?

На текущий момент в Google для машинного перевода используются РНС типа LSTM, что позволило добиться наибольшей точности по сравнению с существующими аналогами, однако, по словам самих авторов, машинному переводу еще очень далеко до уровня человека. Сложности, с которыми сталкиваются нейросети в задачах перевода, обусловлены сразу несколькими факторами: во-первых, в любой задаче существует неизбежный размен между качеством и скоростью. На данный момент человек очень сильно опережает искусственный интеллект по этому показателю. Поскольку машинный перевод чаще всего используется в онлайн-сервисах, разработчики вынуждены жертвовать точностью в угоду быстродействию. В недавней публикации Google на эту тему разработчики подробно описывают многие решения, которые позволили оптимизировать текущую версию Google Translate, однако проблема до сих пор остается. Например, редкие слова, или сленг, или нарочитое искажение слова (например, для более яркого заголовка) может сбить с толку даже переводчика-человека, которому придется потратить время, чтобы подобрать наиболее адекватный аналог в другом языке. Машину же такая ситуация поставит в полный тупик, и переводчик будет вынужден «выбросить» сложное слово и оставить его без перевода. В итоге проблема машинного перевода не настолько обусловлена архитектурой (РНС успешно справляются с рутинными задачами в этой области), насколько сложностью и многообразием языка. Радует то, что эта проблема имеет более технический характер, чем написание осмысленных текстов, где, вероятно, требуется кардинально новый подход.


Принцип работы машинного переводчика Google Translate, основанного на комбинации несколько рекуррентных нейросетей.

research.googleblog.com / Google

А более необычные способы применения РНС есть? Вот нейронная машина Тьюринга, например, в чем тут идея?

Нейронная машина Тьюринга (Neural Turing Machine), предложенная два года назад коллективом из Google DeepMind, отличается от других РНС тем, что последние на самом деле не хранят информацию в явном виде - она кодируется в весах нейронов и связей, даже в продвинутых вариациях вроде LSTM. В нейронной машине Тьюринга разработчики придерживались более понятной идеи «ленты памяти», как в классической машине Тьюринга: в ней информация в явном виде записывается «на ленту» и может быть считана в случае необходимости. При этом отслеживание того, какая информация нужна, ложится на особую нейросеть-контроллер. В целом можно отметить, что идея НМТ действительно завораживает своей простотой и доступностью для понимания. С другой стороны, в силу технических ограничений современного аппаратного обеспечения применить НМТ на практике не представляется возможным, потому что обучение такой сети становится чрезвычайно долгим. В этом смысле РНС являются промежуточным звеном между более простыми нейросетями и НМТ, так как хранят некий «слепок» информации, который при этом не смертельно ограничивает их быстродействие.

А что такое концепция внимания применительно к РНС? Что нового она позволяет делать?


Концепция внимания (attention) - это способ «подсказать» сети, на что следует потратить больше внимания при обработке данных. Другими словами, внимание в рекуррентной нейронной сети - это способ увеличить важность одних данных по сравнению с другими. Поскольку человек не может выдавать подсказки каждый раз (это нивелировало бы всю пользу от РНС), сеть должна научиться подсказывать себе сама. Вообще, концепция внимания является очень сильным инструментом в работе с РНС, так как позволяет быстрее и качественнее подсказать сети, на какие данные стоит обращать внимание, а на какие - нет. Также этот подход может в перспективе решить проблему быстродействия в системах с большим объемом памяти. Чтобы лучше понять, как это работает, надо рассмотреть две модели внимания: «мягкую» (soft) и «жесткую» (hard). В первом случае сеть все равно обратится ко всем данным, к которым имеет доступ, но значимость (то есть вес) этих данных будет разной. Это делает РНС более точной, но не более быстрой. Во втором случае из всех существующих данных сеть обратится лишь к некоторым (у остальных будут нулевые веса), что решает сразу две проблемы. Минусом «жесткой» концепции внимания является тот факт, что эта модель перестает быть непрерывной, а значит - дифференцируемой, что резко усложняет задачу ее обучения. Тем не менее, существуют решения, позволяющие исправить этот недостаток. Поскольку концепция внимания активно развивается в последние пару лет, нам остается ждать в ближайшее время новостей с этого поля.

Под конец можно привести пример системы, использующей концепцию внимания: это Dynamic Memory Networks - разновидность, предложенная исследовательским подразделением Facebook. В ней разработчики описывают «модуль эпизодической памяти» (episodic memory module), который на основании памяти о событиях, заданных в виде входных данных, а также вопроса об этих событиях, создает «эпизоды», которые в итоге помогают сети найти правильный ответ на вопрос. Такая архитектура была опробована на bAbI, крупной базе сгенерированных заданий на простой логический вывод (например, дается цепочка из трех фактов, нужно выдать правильный ответ: «Мэри дома. Она вышла во двор. Где Мэри? Во дворе».), и показала результаты, превосходящие классические архитектуры вроде LSTM.

Что еще происходит в мире рекуррентных нейросетей прямо сейчас?

По словам Андрея Карпатого (Andrej Karpathy) - специалиста по нейросетям и автора превосходного блога , «концепция внимания - это самое интересное из недавних архитектурных решений в мире нейросетей». Однако не только на внимании акцентируются исследования в области РНС. Если постараться кратко сформулировать основной тренд, то им сейчас стало сочетание различных архитектур и применение наработок из других областей для улучшения РНС. Из примеров можно назвать уже упомянутые нейросети от Google, в которых используют методы, взятые из работ по обучению с подкреплением, нейронные машины Тьюринга, алгоритмы оптимизации вроде Batch Normalization и многое другое, - все это вместе заслуживает отдельной статьи. В целом отметим, что хотя РНС не привлекли столь же широкого внимания, как любимцы публики - сверточные нейросети, это объясняется лишь тем, что объекты и задачи, с которыми работают РНС, не так бросаются в глаза, как DeepDream или Prisma. Это как в социальных сетях - если пост публикуют без картинки, ажиотажа вокруг него будет меньше.

Поэтому всегда публикуйтесь с картинкой.


Тарас Молотилин