Охота на электроовец. Большая книга искусственного интеллекта
Шрифт:
В ячейке таблицы знак «x» стоит тогда и только тогда, когда нейроны, тип которых указан в заголовке столбца, получают входы от нейронов, тип которых указан в первой ячейке строки. Плановые нейроны, являясь рецептивными нейронами сети, получают входы только извне сети, поэтому первый столбец таблицы пуст. Каждый из нейронов состояния получает входы от выходных нейронов, а также от опять же нейронов состояния и так далее.
Если внимательно взглянуть на диаграмму сети, представленную Джорданом, можно отметить один интересный нюанс — наличие связей, соединяющих одни нейроны состояния с другими. Если подумать, то такая структура соединений вполне ожидаема, ведь нейроны состояния в некотором роде являются следующим слоем для самих себя, поэтому структура их связей с собой же повторяет, например, структуру связей между нейронами скрытого и выходного слоёв.
1490
Jordan M. J. (1986). Serial order: a parallel distributed processing approach. ICS Report 8604 // http://cseweb.ucsd.edu/~gary/258/jordan-tr.pdf
Не менее, чем вопрос о топологии рекуррентных сетей, интересен вопрос: каким образом такие сети могут быть обучены? Трюки, позволяющие применять метод обратного распространения ошибки к рекуррентным сетям, изобретались разными исследователями неоднократно. Наверное, самый популярный из них получил название «метод обратного распространения ошибки сквозь время» [backpropagation through time]. Идея заключается в том, чтобы развернуть рекуррентную сеть вдоль временной шкалы, дублируя её для каждого момента времени и заменяя рекуррентные связи на прямые, соединяющие сеть, относящуюся к моменту времени t, с копией сети, относящейся к моменту времени t + 1. Однако применение этого метода на практике обнажает ахиллесову пяту метода обратного распространения ошибки — «проблему исчезающего (или затухающего) градиента» [vanishing gradient problem]. Поскольку производные сигмоидальных функций на краях достаточно малы, абсолютный размер ошибки (а значит, и величин коррекции весов сети) быстро уменьшается по мере удаления слоя, для которого производится расчёт, от выходного слоя сети. В принципе, эта проблема характерна не только для сигмоидальных функций, поскольку в процессе обратного распространения ошибки градиент для каждого i– го слоя рассчитывается на базе градиента для i + 1-го слоя, отдельные компоненты градиента могут легко стать слишком малыми величинами. Таким образом, острота проблемы растёт по мере увеличения количества слоёв обучаемой сети. В случае развёрнутой на множество шагов во времени рекуррентной сети, как и в случае других сверхглубоких архитектур, мы неизбежно будем сталкиваться с ситуацией, когда точности выбранного для хранения весов типа данных перестанет хватать для хранения сверхмалых компонент градиента. И даже если мы сможем преодолеть эту проблему, скажем за счёт использования специальных типов, скорость обучения такой сети будет, скорее всего, неудовлетворительной, ведь синаптические веса в передних слоях сети будут корректироваться крайне медленно. Вообще, градиенты весов нейронных сетей штука чрезвычайно капризная — при некоторых условиях они могут не только исчезать, но и, напротив, «взрываться» [exploding gradient problem]. Взрывающиеся или затухающие градиенты могут привести к стагнации или, напротив, слишком быстрому изменению синаптических весов и тем самым сделать обучение нейронной сети нестабильным. Поэтому архитекторы нейронных сетей нередко вынуждены применять для решения подобных проблем особую «уличную магию», например «обрезку градиента» [gradient clipping] [1491] , уже упоминавшиеся нами «перепрыгивающие связи» и так далее.
1491
Pascanu R., Mikolov T., Bengio Y. (2012). On the difficulty of training recurrent neural networks // https://arxiv.org/abs/1211.5063
Из-за проблемы исчезающего градиента на границе 1980–1990-х гг. исследователи могли позволить себе рекуррентные сети, способные различать лишь сравнительно короткие зависимости в обрабатываемых последовательностях [1492] , [1493] . Было трудно поверить в то, что когда-нибудь появятся сети, способные улавливать закономерности в событиях, разделённых десятками или даже сотнями шагов. Однако через некоторое время появилась новая нейросетевая архитектура, способная существенно снизить остроту этой проблемы. О ней мы и поговорим в следующем разделе.
1492
Hochreiter S. (1991). Untersuchungen zu dynamischen neuronalen Netzen. Diploma thesis, Institut f. Informatik, Technische Univ. Munich // http://people.idsia.ch/~juergen/SeppHochreiter1991ThesisAdvisorSchmidhuber.pdf
1493
Hochreiter S., Bengio Y., Frasconi P., Schmidhuber J. (2001). Gradient flow in recurrent nets: the difficulty of learning long-term dependencies / Kremer S. C., Kolen J. F. (2001). A Field Guide to Dynamical Recurrent Neural Networks. John Wiley & Sons // https://books.google.ru/books?id=NWOcMVA64aAC
5.2.5.3 Сети с долгой краткосрочной памятью (LSTM) и другие модели
Решительный шаг вперёд в области рекуррентных нейронных сетей удалось сделать в 1997 г., когда Юрген Шмидхубер и Зепп Хохрайтер предложили [1494] принципиально новую архитектуру, получившую весьма оригинальное название — «долгая краткосрочная память» (Long short-term memory, LSTM).
Сталкиваясь с памятью людей, можно заметить, что люди помнят только важные события, а многое старое и ненужное забывается. Можно представить, что было бы, если бы человек запоминал абсолютно всё. Например, такая ситуация описана в рассказе «Фунес, чудо памяти» (Funes el memorioso) [1495] , принадлежащем перу аргентинского писателя Хорхе Луиса Борхеса. Чтобы убить время, главный герой рассказа восстанавливает в своей памяти переживания целого дня, на что у него уходит также целый день. Фунес изобретает собственную систему счисления, где каждое число имеет своё название, например число 7030 получает имя «Максимо Перес», а 7040 — имя «поезд». Лирический герой автора пытается объяснить Фунесу, что такая система противоречит самой идее счёта, но Фунес не понимает его или не хочет понимать.
1494
Hochreiter S., Schmidhuber J. (1997). Long short-term memory / Neural Computation journal, 1997, Vol. 9, No. 8, pp. 1735—1780 // https://doi.org/10.1162/neco.1997.9.8.1735
1495
Borges J. L. (1988). Funes el memorioso. Umbriel Libros // https://books.google.ru/books?id=hCYxuwEACAAJ
Действительно, способность к обобщению, к абстракции основывается на отвлечении от конкретных деталей, на их забвении. Избавившись от неважных деталей, мы можем находить аналогии, и именно они позволяют нам сложить 7030 и 7040, в то время как трудно представить себе операцию сложения «Максимо Переса» и «поезда». Поэтому возникает вполне резонный вопрос: нельзя ли реализовать в нейронных сетях такой механизм забывания, который позволял бы сети запоминать важные признаки последовательности, игнорируя не влияющие ни на что мелочи? Именно эта идея лежит в основе «долгой краткосрочной памяти» Шмидхубера и Хохрайтера.
Основой LSTM-сети являются так называемые LSTM-блоки (LSTM units). Такой блок представляет собой рекуррентный элемент сети, способный запоминать значения как на короткие, так и на длинные промежутки времени. Это достигается благодаря тому, что LSTM-блок не использует функцию активации внутри своих рекуррентных компонентов, благодаря чему хранимое значение не размывается во времени и при использовании метода обратного распространения ошибки во времени градиент не исчезает.
Обычно LSTM-блоки содержат три вентиля [gate], предназначенных для управления потоками информации на входе, выходе и внутри блока. Эти вентили называются соответственно «входным» [input gate], «выходным» [output gate] и «вентилем забывания» [forget gate].
Основной функцией, выполняемой LSTM-блоком, является отслеживание зависимостей между элементами поступающей на вход последовательности. Входной вентиль определяет меру, в которой новые значения поступают в ячейку памяти [cell], вентиль забывания — меру, в которой значения сохраняются в ячейке от шага к шагу, а выходной вентиль отвечает за меру, в которой значения в ячейке используются для вычисления выходного значения. Обученный блок должен понимать, что именно и в какой мере стоит замечать, запоминать и использовать для ответа на каждом из шагов.
LSTM-блок может содержать несколько ячеек памяти, управляемых одними и теми же вентилями. К сожалению, в отношении терминологии в данном случае существует некоторая путаница [1496] , но мы будем придерживаться именно этих наименований — LSTM-блок для обозначения совокупности ячеек памяти и управляющих вентилей и LSTM-ячейка для обозначения одного скалярного компонента памяти LSTM-блока.
1496
user124589 (2016). Understanding LSTM units vs. cells / StackExchange. CrossValidated, Oct 23 '16 // https://stats.stackexchange.com/questions/241985/understanding-lstm-units-vs-cells