Почему РНС?

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

На более личном уровне, если вы смотрите на яркий свет в течение, скажем, 10 секунд, а затем внезапно закроете глаза, вы увидите остатки света в своей зрительной коре. Это пример биологической рекуррентной нейронной сети, действующей в человеческом мозгу. Точные принципы работы (прямое / обратное распространение) могут отличаться, но общий эффект тот же, сенсорный ввод передается от одного распространения к другому. То есть все мы, люди, осознаем мы это или нет, испытываем и используем RNN ежедневно! Таким образом, мы можем оценить и признать фундаментальную значимость RNN в области искусственного интеллекта.

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

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

Сетевая архитектура

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

В развернутом представлении мы видим 3 «ячейки» RNN. Каждая ячейка имеет 2 входа и 2 выхода, представленных стрелками. Любая стрелка, где голова обращена к ячейке, является входом, а любая стрелка, где голова обращена в сторону от ячейки, является выходом. Вертикальные стрелки обозначают внешние входные данные (например, входные данные) и внешние выходы (например, прогнозы). Горизонтальные стрелки обозначают внутренние входы (например, предыдущее состояние ячейки) и внутренние выходы (например, текущее состояние ячейки). На изображении 3 ячейки, однако у вас может быть больше или меньше ячеек RNN в зависимости от размера данных, которые вы вводите в RNN, и конфигурации RNN.

Итак, как эта структура RNN полезна при моделировании последовательностей данных? Каждая точка данных проходит через ячейку последовательно во многих итерациях. Состояние ячейки, которое создается на каждой итерации, обновляется и сохраняется на протяжении итераций. Это означает, что когда точка данных отправляется в ячейку, на состояние ячейки в то время влияли все предыдущие точки данных и в том порядке, в котором они были отправлены. Таким образом, на каждой итерации учитывается вся последовательность данных. Теперь, как далеко в последовательности данных ячейка может моделировать шаблоны, зависит от структуры как ячейки, так и сети. Как вы увидите ниже, LSTM представляют собой разновидность базовой ячейки RNN, которая может лучше моделировать долгосрочные закономерности в данных.

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

Это высокоуровневое изображение RNN. Давайте углубимся в разборку, давайте разберем ячейку.

Сотовый

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

Ячейка RNN получает в качестве входных данных 2 матрицы, Xt (входные данные) и Ct-1 (состояние ячейки). Эти входные данные умножаются на некоторые веса (Wc и Wx) и складываются со смещением (bc). Затем мы применяем функцию активации, обычно это одна из tanh, сигмовидной или выпрямленной линейной единицы (ReLU). Матрица, созданная после активации, представляет собой новое состояние ячейки, которое затем будет отправлено в ячейку RNN в следующей итерации. Чтобы получить выходные данные от RNN, мы выполним softmax для состояния выходной ячейки. Softmax эффективно преобразует выходную матрицу в матрицу вероятностей. Для обучения сети используется вариант алгоритма обратного распространения, обратное распространение во времени, чтобы скорректировать и направить матрицы весов и смещений, чтобы RNN вела себя по назначению.

Теперь это базовая версия ячейки RNN. Существуют и другие типы ячеек, такие как Gated Recurrent Unit (GRU) и вышеупомянутый LSTM, каждая из которых имеет определенные преимущества и недостатки. Мы разобьем ячейку LSTM, поскольку это одна из наиболее часто используемых ячеек RNN.

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

В базовой ячейке RNN долгосрочные шаблоны также не распознаются, потому что ячейка не рассматривает, что обновлять в пределах матриц весов и смещения, она просто обновляет все значения в матрицах на основе текущего полученного ввода. С другой стороны, в LSTM 3 шлюза позволяют ячейке точно пересмотреть то, что она хочет обновить, в результате сохранения долгосрочных шаблонов. Это достигается за счет наличия 2 отдельных ворот, ворот для забывания и ворот для обновления. Шлюз забывания определяет, какая часть ввода не имеет отношения к долгосрочному шаблону данных и не нуждается в обновлении. В шлюзе обновления определяется, что является критическим для обновления состояния ячейки Ct в течение длительного времени. Только после того, как ячейка решит, что следует забыть / обновить, ячейка обновляет веса и матрицы на основе текущего ввода, используя выходной вентиль. Эти дополнительные ворота позволяют LSTM, как следует из названия, запоминать долгосрочные и краткосрочные шаблоны в данных.

Что дальше?

Итак, на этом мы завершаем разборку RNN, с помощью которой мы можем увидеть рабочее поведение как на уровне сети, так и на уровне ячеек. Будет интересно увидеть, как эти сети применяются в более продвинутых системах. Возьмем, к примеру, концепцию многоуровневых RNN, которые обобщают поведение моделирования длинно-коротких зависимостей LSTM еще дальше до такой степени, что они сгруппированы вместе в их собственное подполе глубокого обучения, называемое Модели внимания. Если задуматься, обнаружение долгосрочных зависимостей в данных действительно требует внимания. Алгоритм должен задать вопрос, на какую часть данных я должен обращать внимание в краткосрочной перспективе, а на какую - в долгосрочной? Многослойные RNN - действительно многообещающий метод достижения этой цели. Будет интересно посмотреть, как теория RNN будет меняться / развиваться с течением времени и в какой форме она будет в конечном итоге применяться.