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

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

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

Например,

  1. Цена на фондовом рынке — это последовательный тип данных, потому что цена любой данной акции на завтрашнем рынке в значительной степени зависит от ее сегодняшней цены. Таким образом, для прогнозирования цены акций на завтра можно использовать RNN. Нам просто нужно передать сети последовательные данные, затем она поддерживает контекст данных и, таким образом, изучает шаблоны в данных.
  2. Мы также можем использовать RNN для анализа настроений. Скажем, например, вы просматриваете свой каталог товаров на сайте социальной сети и видите много комментариев, связанных с конкретным вашим продуктом. Вместо того, чтобы самостоятельно читать десятки и десятки комментариев и вручную вычислять, были ли они в основном положительными, вы можете позволить RNN сделать это за вас. Действительно, RNN может исследовать тональность ключевых слов в этих обзорах. Помните, однако, что последовательность слов или предложений, а также контекст, в котором они используются, также очень важны. Подавая предложение в RNN, он принимает все это во внимание и определяет, являются ли настроения внутри него положительными или отрицательными.
  3. RNN также можно использовать для предсказания следующего слова в предложении. Я уверен, что все мы видели, как наш мобильный телефон предлагает слова, когда мы набираем электронное письмо или текст. Это тип языкового моделирования в RNN, когда модель извлекла уроки из большого текстового корпуса и теперь может предсказывать следующее слово в предложении. Как вы можете видеть, думая последовательно, предлагаемое слово очень зависит от ранее набранных слов и контекста этого сообщения. При необходимости быстрого перевода определенных слов на другой язык сегодня очень многие люди пользуются сервисом перевода Google-переводчика. Мы вводим последовательность слов на английском языке, и он выводит последовательность слов на французском языке, как показано здесь. Этот тип перевода текста является еще одним примером того, как можно использовать RNN.

Последовательная проблема

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

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

Почему мы не можем использовать нейронные сети с прямой связью для анализа последовательных данных?

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

Это простая задача для традиционных нейронных сетей с прямой связью. Используя наш набор данных, мы сначала вводим точку данных во входной слой.

Затем данные передаются на скрытый слой или слои, где применяются веса и смещения.

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

Однако важно отметить, что модель не запоминает только что проанализированные данные. Все, что он делает, это принимает ввод за вводом и создает индивидуальные классификации на каждый день.

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

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

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

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

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

Долгая кратковременная память, или сокращенно LSTM.

Введение:

Рекуррентная нейронная сеть — отличный инструмент для моделирования последовательных данных, но есть несколько проблем, которые необходимо решить, чтобы использовать модель в больших масштабах.

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

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

LSTM поддерживает сильный градиент на многих временных шагах. Это означает, что вы можете обучать LSTM относительно длинными последовательностями.

Блок LSTM в рекуррентных нейронных сетях состоит из четырех основных элементов. «Ячейка памяти» и три логистических «ворота». «Ячейка памяти» отвечает за хранение данных. Ворота записи, чтения и забывания определяют поток данных внутри LSTM.

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

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

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

Теперь давайте посмотрим на поток данных в рекуррентных сетях LSTM.

Итак, давайте посмотрим, как данные передаются по сети.

На первом временном шаге первый элемент последовательности передается в сеть.

Модуль LSTM использует случайное инициализированное скрытое состояние и вывод для создания нового скрытого состояния, а также вывода первого шага. Затем LSTM отправляет свои выходные данные и скрытое состояние в сеть на следующем временном шаге. И процесс продолжается в течение следующих временных шагов.

Итак, как вы можете видеть, модуль LSTM хранит две части информации по мере ее распространения во времени.

Во-первых, скрытое состояние, которое на самом деле является памятью, которую LSTM накапливает, используя свои вентили во времени, а во-вторых, выходные данные предыдущего временного шага.

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

Итак, относится ли это также к LSTM? Что если мы хотим иметь RNN со сложенным LSTM,

например, двухслойный LSTM? В этом случае выходные данные первого слоя будут поступать на входные данные второго слоя. Затем второй LSTM смешивает его со своим внутренним состоянием для получения вывода. Стекирование LSTM позволяет усложнить модель.

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

давайте посмотрим, что происходит в процессе обучения.

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

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

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

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

Заворачивать

Как мы видели, это основа рекуррентной нейронной сети (RNN) и сети с долговременной кратковременной памятью (LSTM).