Рекуррентные нейронные сети: типы, обучение, примеры и применение. H Рекуррентные нейронные сети

Глубинные свёрточные обратные графические сети (deep convolutional inverse graphics networks, DCIGN) названы слегка некорректно, поскольку они по сути являются вариационными автокодировщиками, кодирующая и декодирующая части которых представлены свёрточной и развёртывающей НС соответственно. Сети такого типа моделируют свойства в виде вероятностей, поэтому их можно научить создавать картинку с собакой и кошкой, даже если сеть видела только картинки, на которых было только одно из животных. Возможно и удаление одного из двух объектов. Также были созданы сети, которые могли менять источник освещения и вращать объект. Сети такого типа обычно обучают методом обратного распространения ошибки.

Генеративные состязательные сети (generative adversarial networks, GAN) - это сети другого вида, они похожи на близнецов. Такие сети состоят из любых двух (обычно из FF и CNN), одна из которых контент генерирует, а другая - оценивает. Сеть-дискриминатор получает обучающие или созданные генератором данные. Степень угадывания дискриминатором источника данных в дальнейшем участвует в формировании ошибки. Таким образом, возникает состязание между генератором и дискриминатором, где первый учится обманывать первого, а второй - раскрывать обман (похоже на ситуацию «банкир-фальшивомонетчик»). Обучать такие сети весьма тяжело, поскольку нужно не только обучить каждую из них, но и настроить баланс.

Рекуррентные нейронные сети (recurrent neural networks, RNN) - это сети типа FFNN, но с особенностью: нейроны получают информацию не только от предыдущего слоя, но и от самих себя предыдущего прохода. Это означает, что порядок, в котором вы подаёте данные и обучаете сеть, становится важным. Большой сложностью сетей RNN является проблема исчезающего (или взрывного) градиента, которая заключается в быстрой потере информации с течением времени. Конечно, это влияет лишь на веса, а не состояния нейронов, но ведь именно в них накапливается информация. Обычно сети такого типа используются для автоматического дополнения информации.

Сети с долгой краткосрочной памятью (long short term memory, LSTM) стараются решить вышеупомянутую проблему потери информации, используя фильтры и явно заданную клетку памяти. У каждого нейрона есть клетка памяти и три фильтра: входной, выходной и забывающий. Целью этих фильтров является защита информации. Входной фильтр определяет, сколько информации из предыдущего слоя будет храниться в клетке. Выходной фильтр определяет, сколько информации получат следующие слои. Ну а забывающий фильтр, каким бы странным не казался, также выполняет полезную функцию: например, если сеть изучает книгу и переходит на новую главу, какие-то символы из старой можно забыть. Такие сети способны научиться создавать сложные структуры, например, писать как Шекспир или сочинять простую музыку, но и ресурсов они потребляют немало.

Управляемые рекуррентные нейроны (gated recurrent units, GRU) - это небольшая вариация предыдущей сети. У них на один фильтр меньше, и связи реализованы иначе. Фильтр обновления определяет, сколько информации останется от прошлого состояния и сколько будет взято из предыдущего слоя. Фильтр сброса работает примерно как забывающий фильтр.

Нейронные машины Тьюринга (neural Turing machines, NTM) можно рассматривать как абстрактную модель LSTM и попытку показать, что на самом деле происходит внутри нейронной сети. Ячейка памяти не помещена в нейрон, а размещена отдельно с целью объединить эффективность обычного хранилища данных и мощь нейронной сети. Собственно, поэтому такие сети и называются машинами Тьюринга - в силу способности читать и записывать данные и менять состояние в зависимости от прочитанного они являются тьюринг-полными.

Двунаправленные RNN, LSTM и GRU (bidirectional recurrent neural networks, bidirectional long / short term memory networks и bidirectional gated recurrent units, BiRNN, BiLSTM и BiGRU) не показаны в таблице, поскольку они ничем не отличаются от своих однонаправленных вариантов. Разница заключается в том, что эти сети используют не только данные из «прошлого», но и из «будущего». Например, обычную сеть типа LSTM обучают угадывать слово «рыба», подавая буквы по одной, а двунаправленную - подавая ещё и следующую букву из последовательности. Такие сети способны, например, не только расширять изображение по краям, но и заполнять дыры внутри.

Глубинные остаточные сети (deep residual networks, DRN) - это очень глубокие сети типа FFNN с дополнительными связями между отделёнными друг от друга слоями. Такие сети можно обучать на шаблонах глубиной аж до 150 слоёв - гораздо больше, чем можно было бы ожидать. Однако, было показано, что эти сети мало чем отличаются от рекуррентных, и их часто сравнивают с сетями LSTM.

Нейронная эхо-сеть (echo state networks, ESN) - это ещё одна разновидность рекуррентных сетей. Её особенностью является отсутствие сформированных слоёв, т.е. связи между нейронами случайны. Соответственно, метод обратного распространения ошибки не срабатывает. Вместо этого нужно подавать входных данные, передавать их по сети и обновлять нейроны, наблюдая за выходными данными.

Метод экстремального обучения (extreme learning machines, ELM) - это, по сути, сеть типа FFNN, но со случайными связями. Они очень похожи на сети LSM и ESN, но используются как FFNN. Так происходит не только потому, что они не рекуррентны, но и потому, что их можно обучать просто методом обратного распространения ошибки.

Метод неустойчивых состояний (liquid state machines, LSM) похож на эхо-сеть, но есть существенное отличие: сигмоидная активация заменена пороговой функцией, а каждый нейрон является накопительной ячейкой памяти. Таким образом, при обновлении нейрона его значение не становится равным сумме соседей, а прибавляется само к себе, и при достижении порога сообщается другим нейронам.

Метод опорных векторов (support vector machines, SVM) находит оптимальные решения задачи оптимизации. Классическая версия способна категоризировать линейно разделяемые данные: например, различать изображения с котом Томом и с котом Гарфилдом. В процессе обучения сеть как бы размещает все данные на 2D-графике и пытается разделить данные прямой линией так, чтобы с каждой стороны были данные только одного класса и чтобы расстояние от данные до линии было максимальным. Используя трюк с ядром, можно классифицировать данные размерности n. Что характерно, этот метод не всегда рассматривается как нейронная сеть.

И наконец, нейронные сети Кохонена (Kohonen networks, KN) , также известные как самоорганизующиеся карты (self organising (feature) maps, SOM, SOFM) , завершают наш список. Эти сети используют соревновательное обучение для классификации данных без учителя. Сети подаются входные данные, после чего сеть определяет, какие из нейронов максимально совпадают с ними. После этого эти нейроны изменяются для ещё большей точности совпадения, в процессе двигая за собой соседей. Иногда карты Кохонена также не считаются нейронными сетями.

Вот и всё! После прочтения наших статей и прилагающихся материалов вы точно будете уверенно разбираться в видах нейронных сетей 🙂

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

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

Перцептроны Розенблатта с обратной связью

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

Однослойные сети с обратной связью

После выхода книги Минского с критикой возможностей элементарного перцептрона в 1969 году работы по изучению искуственных нейронных сетей практически прекратились. Только небольшие группы продолжали исследования в этом направлении. Одна из таких групп в Массачусетском Технологическом институте в 1978 году начала свою работу. Джон Хопфилд был приглашен в качестве консультанта из отделения биофизики лаборатории Бела. Его идеи так же как и Розенблатта базировались на результатах исследования в нейрофизиологии. Главной заслугой Хопфилда является энергетическая интерпретация работы искуственной нейронной сети. Что же касается самой нейронной сети Хопфилда , то она обладает рядом недостатков из-за которых она не может быть использована практически. Впоследствии Коско развил идеи Хопфилда и разработал модель гетероассоциативной памяти - нейронная сеть Коско . Основным недостатком этих сетей является отсутствие устойчивости, а в случаях когда она достигается сеть становится эквивалентной однослойной нейронной сети из-за чего она не в состоянии решать линейно неразделимые задачи. В итоге емкость таких сетей крайне мала. Несмотря на эти практические недостатки в области распознавания, данная сеть успешно применялась в исследованиях энергетического хаоса, возникновения аттракторов, а так же с этого времени о искуственных нейронных сетей стало возможным говорить как о ассоциативной памяти .

Рекуррентные сети с единичной задержкой

См. также

Литература

  • Розенблатт, Ф. Принципы нейродинамики: Перцептроны и теория механизмов мозга = Principles of Neurodynamic: Perceptrons and the Theory of Brain Mechanisms. - М.: Мир, 1965. - 480 с.
  • J. J. Hopfield [PNAS Reprint (Abstract) PNAS Reprint (PDF) Neural networks and physical systems with emergent collective computational abilities.] // Proceedings of National Academy of Sciences . - April 1982. - С. vol. 79 no. 8 pp. 2554-2558.
  • Jordan, M. I. Serial order: A parallel distributed processing approach. // Institute for Cognitive Science Report 8604 . - University of California, San Diego: 1986.
  • Elman, J.L. Finding structure in time. // Cognitive Science . - 1990. - С. 179-211.

Wikimedia Foundation . 2010 .

Смотреть что такое "Рекуррентные нейронные сети" в других словарях:

    Запрос «Нейронная сеть» перенаправляется сюда. Cм. также другие значения. Схема простой нейросети. Зелёным обозначены входные элементы, жёлтым выходной элемент Искусственные нейронные сети (ИНС) математические модели, а также их программные или… … Википедия

    Запрос «Нейронная сеть» перенаправляется сюда. Cм. также другие значения. Схема простой нейросети. Зелёным обозначены входные элементы, жёлтым выходной элемент Искусственные нейронные сети (ИНС) математические модели, а также их программные или… … Википедия

    Запрос «Нейронная сеть» перенаправляется сюда. Cм. также другие значения. Схема простой нейросети. Зелёным обозначены входные элементы, жёлтым выходной элемент Искусственные нейронные сети (ИНС) математические модели, а также их программные или… … Википедия

    У этого термина существуют и другие значения, см. Нейронная сеть (значения). Схема простой нейросети. Зелёным цветом обозначены входные нейроны, голубым скрытые нейроны, жёлтым выходной нейрон … Википедия

    Для улучшения этой статьи желательно?: Добавить иллюстрации. Рекуррентные нейронные сети (англ. … Википедия

    Нейронная сеть Хопфилда полносвязная нейронная сеть с симметричной матрицей связей. В процессе работы динамика таких сетей сходится (конвергирует) к одному из положений равновесия. Эти положения равновесия являются локальными минимумами… … Википедия

    Эту статью следует викифицировать. Пожалуйста, оформите её согласно правилам оформления статей. Человеческая память ассоциативна, то есть некоторое воспоминание может порождать большую связанную с ним область. Один предмет напоминает нам … Википедия

    Архитектура нейронной сети Коско Нейронная сеть Коско (Двунаправленная ассоциативная память ДАП) нейронная сеть, разработанная Бартом Коско. Это однослойная нейронная сеть с обратными связями, базируется на двух идеях: адаптивной… … Википедия

    Логическая схема перцептрона с тремя выходами Основная статья: Перцептрон Перцептрон является одной из первых моделей искусстве … Википедия

Книги

  • Прикладное машинное обучение с помощью Scikit-Learn и TensorFlow. Концепции, инструменты и техники , Жерон Орельен. Прикладное машинное обучение с помощью Scikit-Learn и TensorFlow. Концепции, инструменты и техники для создания интеллектуальных систем. Полноцветное издание. "Эта книга - замечательное…

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. Это как в социальных сетях - если пост публикуют без картинки, ажиотажа вокруг него будет меньше.

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


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

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

Принцип работы рекуррентной НС (взято )

В данном случае, сеть принимает последовательность "Привет, как дела?" и должна вывести: "Привет, нормально"

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

Я продемонстрирую работу таких сетей на простом примере.

Dataframe = pandas.read_csv("international-airline-passengers.csv", usecols=, engine="python", skipfooter=3) dataset = dataframe.values dataset = dataset.astype("float32") dataframe.head()

International airline passengers: monthly totals in thousands. Jan 49 ? Dec 60
0 112
1 118
2 132
3 129
4 121

Набор данных включает в себя ежемесячные наблюдения за количеством пассажиров аэропорта с января 1949 по декабрь 1960. Всего имеется 144 наблюдения.

Если нарисовать график наблюдений, можно заметить определённую тенденцию:

    Он цикличный, потому что наплывы пассажиров бывают в летний сезон.

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

plt.plot(dataframe)

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

Train_size = int(len(dataset) * 0.67) test_size = len(dataset) - train_size print(len(train), len(test)) (96, 48)

Для тренировки сети используются 96 наблюдений (67%), для проверки точности модели - 48 наблюдений.

Модель будет состоять из двух слоёв. Первый слой содержит всего 4 нейрона. Выходной слой - всего один нейрон, из которого будут "выходить" предсказанные количества пассажиров.

Model = Sequential() model.add(LSTM(4, input_dim=look_back)) model.add(Dense(1)) model.compile(loss="mean_squared_error", optimizer="adam")

Загрузим данные в модель:

Model.fit(trainX, trainY, nb_epoch=5, batch_size=1, verbose=2) Epoch 1/5 0s - loss: 0.0019 Epoch 2/5 0s - loss: 0.0020 Epoch 3/5 0s - loss: 0.0020 Epoch 4/5 0s - loss: 0.0019 Epoch 5/5 0s - loss: 0.0020

Оценим ошибку работы модели:

TrainPredict = model.predict(trainX) testPredict = model.predict(testX) trainScore = math.sqrt(mean_squared_error(trainY, trainPredict[:,0])) print("Train Score: %.2f RMSE" % (trainScore)) testScore = math.sqrt(mean_squared_error(testY, testPredict[:,0])) print("Test Score: %.2f RMSE" % (testScore)) Train Score: 0.04 RMSE Test Score: 0.11 RMSE

На тестовой выборке ошибка составила 0.11. Это значит, что модель в среднем ошибается на 11 тыс. пассажиров. Для того, чтобы понять, много это или нет, давайте визуализируем результат.

Итак, синим обозначен исходный график. Зелёное- это правильные предсказания на обученной выборке. Нас интересует красная чаcть - предсказания модели на тестовой выборке. Мы видим, что модель примерно угадывает годовые циклы и общий тренд.

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

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

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

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

Сеть Джордана: В 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. Обучение рекуррентной сети производится до тех пор, пока сум­марная среднеквадратичная ошибка сети не станет меньше заданной.



Понравилась статья? Поделиться с друзьями: