Давайте попробуем понять, как за этим работают сети LSTM.

Рекуррентные нейронные сети (RNN)

Люди не начинают свое мышление с нуля каждую секунду. Пока вы читаете книгу, вы понимаете каждое слово на основе своего понимания.

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

RNN решает эту проблему, потому что это сети с петлями, что позволяет им сохраняться.

На приведенной выше диаграмме часть нейронной сети A просматривает некоторые входные данные xt и выводит значение ht. Цикл позволяет передавать информацию от одного шага сети к другому.

Применение RNN для решения различных задач: распознавание речи, языковое моделирование, перевод, субтитры к изображениям и т. д.

LSTM – это особый вид RNN, который работает для многих задач намного лучше, чем стандартная версия.

LSTM-сети

Сети с долговременной кратковременной памятью — это особый вид RNN, способный изучать долгосрочные зависимости. Они были введены Хохрайтером и Шмидхубером (1997), усовершенствованы и популяризированы многими людьми, они чрезвычайно хорошо работают в самых разных задачах и в настоящее время широко используются.

Все рекуррентные нейронные сети имеют вид цепочки повторяющихся модулей нейронных сетей.

Стандартный RNN будет иметь один слой tanh (гиперболический тангенс). tanh — функция активации в нейронных сетях.

LSTM будет иметь четыре слоя

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

Основная идея LSTM

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

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

Прохождение LSTM

Первый шаг в нашем LSTM — решить, какую информацию мы собираемся выбросить из состояния ячейки. Это решение принимается сигмовидным слоем, называемым «слоем ворот забывания». Он смотрит на ht-1 и xt и выводит число от 00 до 11 для каждого числа в состоянии ячейки Ct-1. 11 означает «полностью сохранить это», а 00 — «полностью избавиться от этого».

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

Следующий шаг — решить, какую новую информацию мы собираемся хранить в состоянии ячейки. Это состоит из двух частей. Во-первых, сигмовидный слой, называемый «слоем входных ворот», решает, какие значения мы будем обновлять. Затем слой tanh создает вектор новых значений-кандидатов C̃t, которые можно добавить к состоянию. На следующем шаге мы объединим эти два, чтобы создать обновление состояния.

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

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

Умножаем старое состояние на ft, забывая то, что решили забыть ранее. Затем добавляем его∗C̃t. Это новые значения-кандидаты, масштабированные по тому, насколько мы решили обновить каждое значение состояния.

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

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

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

Спасибо

Если вам понравилось читать этот пост, пожалуйста, поделитесь и порекомендуйте его, чтобы другие могли его найти 💚💚💚💚💚💚 !!!!

Вы можете подписаться на меня на Medium для получения свежих статей. Также свяжитесь со мной в LinkedIn.

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