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

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

Почему РНН?

Рассмотрим предложение, содержащее последовательность слов Самолет очень быстр. В нем пять слов. Пусть X i1, X i2, X i3, X i4, X i5 - векторы, представляющие эти слова. Что произойдет, если мы обучим их с помощью Многослойного персептрона (MLP)?

На рисунке показаны обучающие слова с использованием простой сети MLP. Обычно каждый вход в сеть имеет вектор определенной размерности. Пусть каждое слово представлено вектором размерности 10k. У нас здесь 5 слов. Таким образом, наш общий ввод становится размером 50k. В указанной выше сети мы по-прежнему сохраняем информацию о последовательности. Но есть много ограничений для реализации этой идеи. Предположим, у нас есть другое предложение вроде «Этот самолет имеет некоторые ограничения при посадке, но приземлился благополучно». В этом предложении 10 слов, а размер ввода становится 10x10k = 100k. Точно так же у вас есть широкий диапазон предложений с переменным количеством слов. В приведенной выше модели, однако, сеть способна обрабатывать измерение размером 50 тыс., Поскольку модель обучается с помощью предложения из 5 слов. Любые тестовые предложения с дополнительным подсчетом слов могут не дать желаемых результатов при тестировании настройки.

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

Базовая структура рекуррентной нейронной сети

Это сети с петлями в них, позволяющими информации сохраняться. На диаграмме фрагмент нейронной сети A смотрит (предыдущее значение) на некоторый вход X t и выводит значение H t. Цикл позволит передавать информацию от одного шага сети к следующему.

Здесь X0, X1, X2… Xt представляет вход, а h0, h1, h2… ht представляет выход в момент времени t = t0, t1, t2… tt.

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

LSTM - решение долгосрочных зависимостей

Иногда нам просто нужно просмотреть свежую информацию, чтобы выполнить текущую задачу. Например, рассмотрим языковую модель, которая пытается предсказать последнее слово в фразе «облака в небе». Здесь легко угадать следующее слово как небо на основе предыдущих слов. Но рассмотрите предложение «Я вырос во Франции, я свободно говорю по-французски». Здесь нелегко предсказать, что язык напрямую французский. Это также зависит от предыдущего ввода. В таких предложениях вполне возможно, что разрыв между релевантной информацией и тем местом, где она необходима, станет очень большим. Теоретически RNN абсолютно способны обрабатывать такие «долгосрочные зависимости».

Человек мог тщательно подбирать по ним параметры для решения игрушечных задач такой формы. К сожалению, на практике рекуррентная нейронная сеть не может их изучить. Эта проблема называется проблемой исчезающего градиента. Нейронная сеть обновляет вес, используя алгоритм градиентного спуска. Градиенты становятся меньше, когда сеть опускается на нижние уровни. Градиенты будут оставаться постоянными, что означает, что нет места для улучшения. Модель учится на изменении градиента. Это изменение влияет на вывод сети. Однако, если разница в градиентах очень мала, сеть ничего не узнает, и поэтому никакой разницы в выводе. Следовательно, сеть, сталкивающаяся с проблемой исчезающего градиента, не может сходиться к хорошему решению.

Сети с долговременной краткосрочной памятью

Сети с долговременной краткосрочной памятью (LSTM) - это особый вид рекуррентной нейронной сети, способной изучать долгосрочные зависимости. Они были введены Hochreiter & Schmidhuber в 1997 году. Запоминание информации на более длительные периоды времени является их поведением по умолчанию. Долговременная кратковременная память (LSTM) состоит из ячейки памяти, входного элемента, выходного элемента и элемента забывания. Ячейка памяти отвечает за запоминание предыдущего состояния, в то время как ворота отвечают за управление объемом памяти, которая должна быть выставлена.

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

Забудьте о воротах

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

Затвор имеет два входа X t и h t-1. h t-1 - это результат предыдущей ячейки, а x t - это вход на этом конкретном временном шаге. Заданные входные данные умножаются на матрицы весов и добавляется смещение. После этого к этому значению применяется сигмовидная функция (функция активации).

Входной шлюз

Процесс добавления новой информации происходит во входном шлюзе. Здесь комбинация x t и h t-1 передается через сигмоидальные и tanh-функции (функции активации) и добавляется. Создание вектора, содержащего все возможные значения, которые могут быть добавлены (как воспринимается из h t-1 и x t) к состоянию ячейки. Это делается с помощью функции tanh. Этим шагом мы гарантируем, что к состоянию ячейки добавляется только та информация, которая важна и не является избыточной.

Выходной шлюз

Вектор создается после применения функции tanh к состоянию ячейки. Затем создается фильтр, использующий значения h t-1 и x t, чтобы он мог регулировать значения, которые должны быть выведены из вектора, созданного выше. Этот фильтр снова использует сигмовидную функцию. Затем они оба умножаются, чтобы сформировать результат состояния этой ячейки.

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

Ссылка: https://colah.github.io/posts/2015-08-Understanding-LSTMs/

Первоначально опубликовано на https://www.infolks.info 14 июля 2019 г.