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

Рекуррентные сети позволяют нейронам соединяться с предыдущими слоями нейронов или с нейронами того же слоя. Эта характеристика делает эти нейронные сети особенными, поскольку концепция повторения приносит с собой концепцию памяти в сети. Фактически, в RNN выходной сигнал нейрона может влиять на себя на последовательном во времени этапе или может влиять на нейроны предыдущих слоев, которые, в свою очередь, могут влиять на поведение исходного нейрона, тем самым замыкая цикл. Конечно, существует несколько способов реализации RNN. На протяжении многих лет было предложено и изучено множество различных типов RNN, среди которых наиболее известными являются LSTM (долговременная краткосрочная память) и GRU (закрытые рекуррентные единицы), которые будут обсуждаться позже.

Когда следует использовать RNN?

Давайте возьмем простой пример для иллюстрации. Если бы я анализировал фотографию, на которой я хотел наблюдать некоторые интересующие объекты, мне нужно было бы предоставить нейронной сети информацию, статичную с течением времени, а именно пиксели фотографии. Этот сценарий легко реализовать с помощью сети прямой связи. Например, хорошо обученная сверточная нейронная сеть (CNN), входной слой которой будет состоять из такого количества нейронов, сколько пикселей на фотографии, умноженного на 3 (для изображений RGB).

А что, если бы мы имели дело не с изображением, а с видео? Если бы мы по-прежнему хотели просто распознавать объекты, ничего не изменилось бы, но если бы мы хотели идентифицировать и классифицировать поведение, все было бы совершенно по-другому.

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

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

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

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

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

На изображении выше X_0 представляет собой первое слово фразы. S_0 — это состояние ячейки в момент t=0, а S_1 — это состояние ячейки в момент t=1, а tanh (гиперболический тангенс) — это функция активации.

Короче говоря, в ячейке RNN в каждый момент времени t ячейка будет получать не только входные данные X(t), но и свои собственные выходные данные за момент до S(t-1). Ретроактивность результатов позволит сети основывать свои решения на своей прошлой истории. Очевидно, что при таком подходе важно зафиксировать максимальное количество используемых итераций. В противном случае сеть зациклится.

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

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

Попробуем немного формализовать концепцию, проиллюстрированную выше. Ячейка RNN является частью рекуррентной сети, которая сохраняет внутреннее состояние h(t) в каждый момент времени. Он состоит из фиксированного числа нейронов и может считаться своего рода слоем сети. В нашей сети в каждый момент результат будет:

где h_t зависит от входа X_t и предыдущего состояния h_(t-1).

Продолжение развертывания сети означало бы априорное определение количества временных шагов, на которых будет проводиться анализ. Таким образом, RNN, развернутая за 10 шагов, эквивалентна глубокой нейронной сети прямого распространения (DNN) с 10 слоями.

Для нейрона с двумя входами функция вывода выглядит примерно так:

где:

и:

где сигмоида — это функция активации, которую мы называем фи и b=0.

Применяя те же рассуждения к RNN, мы имеем:

где w_x и w_h — веса, b — смещение, а phi — функция активации.

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

Заключение

В заключение отметим, что RNN являются чрезвычайно ценным активом, который часто используется в задачах обработки естественного языка (NLP). Особые характеристики «памяти» рекуррентных нейронных сетей делают их удивительно креативными.

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