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

Рекуррентная нейронная сеть

Рекуррентные нейронные сети способны моделировать данные последовательности. Но что такое данные последовательности? Допустим, мы делаем снимок шара, движущегося во времени.

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

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

Текст — это другое, мы можем разбить текст на последовательность слов или символов.

Таким образом, RNN хорошо предсказывают данные последовательности. Но как? Ответ: последовательная память. Теперь я прошу вас сделать кое-что. Пожалуйста, попробуйте сказать алфавит.

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

Давайте посмотрим на традиционную нейронную сеть, также известную как нейронная сеть с прямой связью.

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

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

Но мы могли заметить странное распределение количества информации в скрытых состояниях. Эта проблема называется кратковременной памятью. Кратковременная память вызвана проблемой исчезающего градиента. Причина этой проблемы в том, что у RNN есть проблемы с сохранением информации с предыдущих шагов. Кратковременная память и исчезающий градиент обусловлены природой обратного распространения. Итак, когда мы обучаем нейронную сеть, она выполняет 3 основных шага. Во-первых, он делает прямой проход и делает прогноз. Во-вторых, он определяет функцию потерь. Результатом функции потерь является значение ошибки. И, наконец, он использует это значение ошибки для обратного распространения, которое вычисляет градиенты для каждого узла в сети. Градиент — это значение, используемое для настройки весов сети для обучения. Чем больше градиент, тем точнее обучение. И в этом суть. Если корректировки слоев перед ним небольшие, то корректировки текущего слоя будут еще меньше.

Долгосрочная память

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

Так как же работает LSTM? Давайте рассмотрим рекуррентную нейронную сеть. Сначала входные слова преобразуются в машиночитаемые векторы. Затем RNN начинает обрабатывать слова как последовательность векторов один за другим. При обработке векторов он передает предыдущее скрытое состояние в следующее скрытое состояние. Мы можем видеть скрытое состояние как память нейронной сети. Он содержит информацию из предыдущих скрытых состояний. Таким образом, рекуррентная нейронная сеть получает входные данные и предыдущее скрытое состояние и объединяется в вектор. Этот вектор содержит информацию о фактических входных данных и предыдущих входных данных. Вектор проходит через функцию активации tanh и на выходе приходит в новое скрытое состояние. Функция активации tanh помогает регулировать значения. Он сжимает значения так, чтобы они всегда были между -1 и 1. Таким образом, RNN имеет мало операций, но работает довольно хорошо и использует меньше вычислительных ресурсов, чем LSTM, из-за вентилей.

LSTM похож на рекуррентную нейронную сеть. Различия заключаются в операциях внутри ячеек. Эти операции позволяют сохранить или забыть информацию. Основное определение LSTM — это состояние ячейки и ее различные ворота. Состояние ячейки действует как магистраль, по которой относительная информация передается по всей цепочке последовательностей. Это память сети. Таким образом, он может нести соответствующую информацию без эффектов кратковременной памяти. Полученная информация добавляется или удаляется в состояние ячейки через вентили. Ворота — это разные нейронные сети, которые решают, какую информацию уместно сохранить или забыть во время обучения. Гейтс содержит сигмовидные функции активации. Сигмоид похож на функцию активации tanh. Вместо того, чтобы сжимать значения между -1 и 1, он сжимает значения между 0 и 1. Так легче обновить или забыть информацию. Таким образом эта сеть может узнать, какая информация не важна раньше, поэтому ее можно забыть, а какие данные важно сохранить. Эти трое ворот: забывание, вход, выход.

Забыть ворота

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

Входные ворота

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

Состояние ячейки

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

Выходные ворота

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

Суммировать

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

Источники

Этот пост написан с помощью следующих статей:

http://karpathy.github.io/2015/05/21/rnn-эффективность/

https://colah.github.io/posts/2015-08-Понимание-LSTMs/