LSTM

алгоритм

Это 13-й день моего участия в августовском испытании обновлений. Ознакомьтесь с подробностями мероприятия: Испытание августовского обновления

1. Сеть LSTM

Сети долговременной кратковременной памяти (Long Short-Term Memory Networks), которые во многих местах переводятся в сети долговременной кратковременной памяти, дают людям ощущение двусмысленности, думая, что сеть может какое-то время запоминать длинный контент и короткий контент на время, но на самом деле правильный перевод должен быть долговременной кратковременной сетевой памятью. Суть его в том, чтобы уметь запоминать информацию в течение длительного периода времени.

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

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

Не пугайтесь этой структуры. Когда я впервые изучил LSTM, я искал множество блогов в Интернете, но мало что понял. Один из них был потому, что меня пугала эта структура, а другой — потому что многие блоги были плохо написаны, так что потребовалось много времени, чтобы заполнить эту дыру. Во-первых, позвольте мне объяснить символы, используемые в нем.

На диаграмме структуры сети каждая линия передает вектор, поступающий от одного узла к другому. Желтая матрица представляет слой нейронной сети, розовый кружок представляет поточечные операции, такие как умножение векторов, сложение и т. д., объединенная линия представляет собой комбинацию векторов, переносимых по двум линиям (например, одинht1h_{t-1}, другойxtx_t, то суммарный выход равен[ht1,xt][h_{t-1},x_t]); отдельная строка означает копирование вектора, переданного в строке, и передача его в два места

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

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

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

Каждый LSTM имеет три такихдверьструктура для реализации управляющей информации (соответственно, ворота забывания, входные ворота, выходные ворота, выходные ворота)

3. Разберитесь с LSTM шаг за шагом

3.1 Забытые ворота

Первым шагом LSTM являетсяРешите, какую информацию отбрасывать из состояния ячейки, это решение принимаетforget gate layerРеализован сигмовидный нейронный слой. Его входht1h_{t-1}иxtx_t, выход представляет собой вектор со значениями от 0 до 1 (длина вектора иCt1C_{t-1}то же), указывая, что пустьCt1C_{t-1}Доля каждой части проходящей информации, 0 означает, что никакая информация не пропускается, 1 означает, что пропускается вся информация.

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

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

Следующий шагРешите, сколько новой информации добавить в состояние ячейки. Достижение этого включает в себя два шага: во-первых,input gate layerСигмовидный слой решает, какую информацию необходимо обновить. Другаяtanhtanhслой создает новый вектор-кандидатC~t\tilde{C}_t. Наконец, мы объединяем эти две части, чтобы обновить состояние ячейки.

В нашем примере языковой модели мы хотим добавить новую информацию о поле субъекта в состояние ячейки, заменив старую информацию о состоянии. С помощью приведенной выше структуры мы можем обновить состояние ячейки, то есть поставитьCt1C_{t-1}обновить доCtC_t. Из схемы структуры должно быть понятно, сначала ставим старое состояниеCt1C_{t-1}иftf_tУмножьте, забудьте некоторую информацию, которую вы не хотите сохранять, и добавьтеit*Ct~i_t*\tilde{C_{t}}. Эта часть информации представляет собой новый контент, который мы собираемся добавить.

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

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

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

Рекомендуемое чтение:Understanding LSTM Networks