sonyps4.ru

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Резюме

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

(Recurrent Neural Networks, RNNs) - популярные модели, используемые в обработке естественного языка (NLP). Во-первых, они оценивают произвольные предложения на основе того, насколько часто они встречались в текстах. Это дает нам меру грамматической и семантической корректности. Такие модели используются в машинном переводе. Во-вторых, языковые модели генерируют новый текст. Обучение модели на поэмах Шекспира позволит генерировать новый текст, похожий на Шекспира.

Что такое рекуррентные нейронные сети?

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

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

  • x_t - вход на временном шаге t. Например x_1 может быть вектором с одним горячим состоянием (one-hot vector), соответствующим второму слову предложения.
  • s_t - это скрытое состояние на шаге t. Это «память» сети. s_t зависит, как функция, от предыдущих состояний и текущего входа x_t: s_t=f(Ux_t+Ws_{t-1}). Функция f обычно нелинейная, например tanh или ReLU . s_{-1}, которое требуется для вычисление первого скрытого состояния, обычно инициализируется нулем (нулевым вектором).
  • o_t - выход на шаге t. Например, если мы хотим предсказать слово в предложении, выход может быть вектором вероятностей в нашем словаре. o_t = softmax(Vs_t)

Несколько заметок:

  • Можно интерпретировать s_t как память сети. s_t содержит информацию о том, что произошло на предыдущих шагах времени. Выход o_t вычисляется исключительно на основе «памяти» s_t. На практике все немного сложнее: s_t не может содержать информацию слишком большого количества предшествующих шагов;
  • В отличие от традиционной глубокой , которая использует разные параметры на каждом слое, RNN имеет одинаковые (U, V, W) на всех этапах. Это отражает тот факт, что мы выполняем одну и ту же задачу на каждом шаге, используя только разные входы. Это значительно уменьшает общее количество параметров, которые нам нужно подобрать;
  • Диаграмма выше имеет выходы на каждом шаге, но, в зависимости от задачи, они могут не понадобиться. Например при определении эмоциональной окраски предложения, целесообразно заботиться только о конечном результате, а не о окраске после каждого слова. Аналогично, нам может не потребоваться ввод данных на каждом шаге. Основной особенностью RNN является скрытое состояние, которое содержит некоторую информацию о последовательности.

Где используют рекуррентные нейросети?

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

Языковое моделирование и генерация текстов

Учитывая последовательность слов, мы хотим предсказать вероятность каждого слова (в словаре). Языковые модели позволяют нам измерить вероятность выбора, что является важным вкладом в машинный перевод (поскольку предложения с большой вероятностью правильны). Побочным эффектом такой способности является возможность генерировать новые тексты путем выбора из выходных вероятностей. Мы можем генерировать и другие вещи , в зависимости от того, что из себя представляют наши данные. В языковом моделировании наш вход обычно представляет последовательность слов (например, закодированных как вектор с одним горячим состоянием (one-hot)), а выход - последовательность предсказанных слов. При обучении , мы подаем на вход следующему слою предыдущий выход o_t=x_{t+1}, поскольку хотим, чтобы результат на шаге t был следующим словом.

Исследования по языковому моделированию и генерации текста:

Машинный перевод

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

RNN для машинного перевода

Распознавание речи

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

Генерация описания изображений

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

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

Приветствую! Частенько я публиковал статьи различного вида, в которых объяснял о сетях прямого распространения. В них я рассказывал о том, как нейронные сети обучаются, о том, как работают нейроны и о практическом применении сетей. Теперь я расскажу о сетях, которые подходят для чат-ботов, сложного прогнозирования, классификации текстов и многого другого.

Архитектура

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

Давайте опишем это математической формулой. Сначала мы посылаем информацию от входного слоя по весам к скрытому: h1 = (x1 * w1) + (x2 * w4); h2 = (x1 * w2) + (x2 * w3)
Теперь посылаем информацию от скрытых нейронов на слой временной задержки и на выход сети: c1 = h1, c2 = h2; выход1 = (h1 * w5) + (h2 * w6)

Всё, мы получили первый ответ. Теперь мы записали данные слой временной задержки и снова начинаем прогонять сигнал, только добавляем сигналы от временной задержки: h1 = (x1 * w1) + (x2 * w4) + (c1 * c_w1) + (c2 * c_w3); и на второй скрытый нейрон h2 = (x1 * w2) + (x2 * w3) + (c1 * c_w2) + (c2 * c_w4). Теперь мы снова отправляем полученные данные на слой задержки и на выход: c1 = h1, c2 = h2; выход1 = (h1 * w5) + (h2 * w6).

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

Пороговая функция. Когда мы имеем результат суммирования и какой-то порог, мы сравниваем их. Если суммарный результат больше порогового, то нейрон выдаст 1, а если нет, то 0.

Гиперболический тангенс преобразует суммарный результат в число от -1 до 1. Для этого используют формулу:
Экспонента — показательная функция.

Логистическая функция преобразует суммарный результат в число от 0 до 1. Для этого используют формулу:

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

Обучение рекуррентных сетей

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

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

1. Отправляем сигнал на нейронную сеть.
2. Вычисляем ошибку (Берём правильный ответ и вычитаем из него ответ нейронной сети)
3. Умножаем ошибку на уклон сигмоиды.
4. Умножаем входные данные на результат из 3 шага.
5. Складываем результаты из 4 пункта(вектора или матрицы)
6. Вычитаем из весов результаты 5 пункта.

Получить ошибку можно таким образом: из правильного ответа вычесть ответ сети.
Уклон сигмоиды получается таким образом: выход * (1 — выход)

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

Глубинные свёрточные обратные графические сети (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) , завершают наш список. Эти сети используют соревновательное обучение для классификации данных без учителя. Сети подаются входные данные, после чего сеть определяет, какие из нейронов максимально совпадают с ними. После этого эти нейроны изменяются для ещё большей точности совпадения, в процессе двигая за собой соседей. Иногда карты Кохонена также не считаются нейронными сетями.

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



Загрузка...