(Перевод) Понимание сетей LSTM (Понимание сетей LSTM от colah)

искусственный интеллект

@Перевод: хуанъюнъе

Оригинальная ссылка:Understanding LSTM Networks

предисловие: На самом деле, я использовал LSTM раньше, и я использовал его непосредственно на платформе глубокого обучения keras, но я до сих пор не знаю подробной сетевой структуры LSTM, и я беспокоюсь об этом! Сегодня я прочитал этот пост в блоге, рекомендованный документацией tensorflow, Прочитав это, я понял, что в принципе нет проблем с пониманием структуры LSTM. Этот пост в блоге так хорошо написан! ! ! Для того, чтобы помочь всем понять, и поскольку я боюсь, что смогу быстро вспомнить эти забытые в будущем слова, я планирую написать перевод исходного текста. Прежде всего, я заявляю, что из-за моего ограниченного уровня, если есть плохой перевод или неправильное понимание, пожалуйста, укажите! Кроме того, этот перевод не совпадает с оригиналом.слово за словоСоответственно, для облегчения понимания могут быть сделаны некоторые корректировки и модификации. )

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

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

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

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

Рис. 1. Структура сети RNN.

В приведенной выше сетевой структуре для части прямоугольного блока A, введя $ x_t (вектор признаков в момент времени t), он выведет результат (вектор признаков в момент времени t), он выведет результат (вектор признаков в момент времени t), он выведет результат (вектор признаков в момент времени t), он выведет Результат h_t$ (состояние или вывод в момент времени t). Рекуррентная структура в сети позволяет передавать состояние одного момента в следующий момент. (Примечание переводчика: поскольку состояние текущего момента будет использоваться как часть ввода в следующий момент)

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

Рис 2. RNN расширяют структуру сети

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

И они действительно хорошо работают! В последние несколько лет люди использовали RNN для решения невероятных задач.РазнообразиеЗадачи: распознавание речи, языковые модели, перевод, изображения (добавление) субтитров и т.д. Об удивительном успехе RNN в этих областях можно прочитать в блоге Андрея Карпати:The Unreasonable Effectiveness of Recurrent Neural Networks.

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

2. Проблемы с длительной зависимостью

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

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

рис 2. Краткосрочные зависимости

Однако бывают ситуации, когда требуется больше контекстной информации. Например, если мы хотим предсказать «Я вырос во Франции… (здесь опущено 10 000 слов)… Я говорю?» Предсказанное слово должно быть французским, но мы должны передать упомянутую выше информацию в течение длительного времени. время сделать этот правильный прогноз, обычным RNN это сделать сложно.

По мере увеличения разрыва между прогнозом и связанной информацией RNN становится трудно сопоставлять их.

рис 3. Долгосрочные зависимости

Теоретически RNN действительно могут связывать такие долгосрочные зависимости («долговременные зависимости») и решать такие проблемы, выбирая соответствующие параметры. Но, к сожалению, на практике RNN не могут решить эту проблему.Hochreiter (1991) [German]иBengio, et al. (1994)Было проведено углубленное исследование этой проблемы, и было обнаружено, что RNN действительно трудно решить эту проблему.

Но, к счастью, LSTM могут помочь нам решить эту проблему.

3. Сеть LSTM

Сети с долговременной кратковременной памятью, часто называемые «LSTM», представляют собой особый тип RNN. Предложенный Hochreiter & Schmidhuber (1997), он очень популярен и с тех пор был улучшен и скорректирован многими людьми. LSTM широко используются для решения всевозможных проблем, и они добились отличных результатов.

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

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

рис 4. Внутренняя структура обычных RNN

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

рис 5. Внутренняя структура LSTM

Не беспокойтесь, пусть вас не пугает эта структура, в соответствии с которой мы будем разбирать и понимать ее шаг за шагом (вы поймете, если будете терпеливо смотреть). Теперь давайте определим используемые символы:

рис 6. Описание символа

На диаграмме структуры сети каждой линии передается вектор, выводимый одним узлом и вводимый другим узлом. Розовый кружок представляет поточечные операции, такие как сложение векторов; желтый прямоугольник представляет слой нейронной сети (то есть множество нейронных узлов); объединенная линия представляет собой комбинацию векторов, переносимых по двум линиям (например, пояс h t −1 ht−1 h_{t-1} h t−1 ​ , другой с x t xt x_t x t , то комбинированный вывод равен $[h_{t-1}, x_t] $); Отдельная строка означает копирование вектора, переданного в строке, и передачу его в два места.

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

Наиболее важной частью LSTM является состояние ячейки (весь зеленый прямоугольник — это ячейка) и горизонтальная линия над структурной диаграммой.

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

рис 7. Структура конвейерной ленты

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

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

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

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

3.2 Пошаговое понимание LSTM

(Ладно, наконец настал самый волнующий момент)

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

Во-первых, это LSTM Решение о том, чтобы эта информация проходила через клетку, принимается через сигмовидный нейронный слой, называемый «слоем ворот забывания». Его ввод $h_{t-1} Сумма сумма сумма и x_t $, выход представляет собой вектор, значение которого находится между 0 и 1 (длина вектора такая же, как состояние ячейки $ C_{t-1} $), что указывает на то, что пусть $ C_{t- 1} $ каждый Доля переданной частичной информации. 0 означает «не пропускать информацию», 1 означает «пропускать всю информацию».

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

Рис 9. Забудьте о воротах

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

Следующий шаг Решите, сколько новой информации добавить в состояние ячейки. Для этого требуется два шага: во-первых, сигмовидный слой, называемый «слоем входных ворот», решает, какую информацию необходимо обновить; слой tanh генерирует вектор, который представляет собой альтернативное содержимое для обновления, C t ˜ Ct~ \tilde{C_t} C t ​ ~ ​ . На следующем шаге мы объединяем две части, чтобы обновить состояние ячейки.

рис 10. Входные ворота

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

рис 11. Обновить состояние ячейки

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

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

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

рис 12. вывод ячейки

4. ГРУ вариант LSTM

Эта часть исходного текста представляет несколько вариантов LSTM и роль этих вариантов. Я не буду больше здесь писать. Желающие могут прочитать исходный текст напрямую.

Далее в основном рассказывается о более известном варианте GRU (Gated Recurrent Unit), который состоит изCho, et al. (2014)предложить. В ГРУ, как показано на рис.13, есть только два шлюза: шлюз сброса и шлюз обновления. При этом в этой структуре происходит слияние состояния ячейки и скрытого состояния. Окончательная модель была проще стандартной структуры LSTM, и с тех пор эта структура стала очень популярной.

рис 13. Структура ГРУ

в, r t rt r_t r t обозначает ворота сброса, z t zt z_t z t обозначает шлюз обновления. ** Сброс ворот решает, следует ли забыть предыдущее состояние.Когда rtrt r_trt​ стремится к 0, предыдущая информация о состоянии ht-1ht-1 h_{t-1}ht-1​ будет забыта, скрытое состояние ht˜ht~ \tilde{h_t}ht​~​ будет сброшено на текущую введенную информацию.Шлюз обновления решает, следует ли обновлять скрытое состояние до нового состояния.$ \tilde{h_t}$(Эффект эквивалентен объединению ворот забывания и входящих ворот в LSTM).

Сравните с LSTM:

  • (1) GRU имеет на один шлюз меньше и меньше состояния ячейки Ct Ct C_t Ct ​ .
  • (2) В LSTM сохранение и введение информации контролируются через ворота забывания и ворота поступления; ГРУ контролирует, сохранять ли информацию исходного скрытого состояния путем сброса ворот, но больше не ограничивает поступление текущей информации.
  • (3) В LSTM, хотя новое состояние ячейки $C_t$ получается, его нельзя вывести напрямую, а нужно отфильтровать: ht =ot ∗t anh(Ct) ht=ot∗tanh(Ct) h_t = o_t * tanh(C_t) ht ​ = ot ​ ∗ tanh(Ct ​); также в ГРУ, хотя в (2) мы также получаем новое скрытое состояние $\tilde{h_t}$, но его нельзя вывести напрямую, а окончательный вывод контролируется обновлением гейта: ht =( 1−zt )∗ht−1 +zt ∗ht ˜ht=(1−zt)∗ht−1+zt∗ht~ h_t = (1-z_t) * h_{t-1} + z_t * \ тильда {h_t} ht ​ = (1 − zt ​ )∗ ht−1 ​ + zt ​ ∗ ht ​ ~ ​ .

постскриптум:Ну на этом объяснение строения общего вида LSTM закончилось, а объяснение различных деформаций LSTM после исходного текста относительно простое.Я не буду его здесь писать.Если вам интересно, вы можете прочитать исходный текст напрямую. Выше я представил ГРУ более подробно в сочетании с оригинальной статьей.Из-за ограниченного личного уровня неизбежно будут допущены ошибки. На самом деле, если у вас хорошее понимание английского языка, лучше прочитать оригинальный текст.Некоторые вещи переведены, и я даже не знаю, как это выразить.Если вы считаете, что что-то не так, пожалуйста, укажите. После перевода я обнаружил, что в Интернете уже есть много переведенных версий, поэтому я сделал некоторые корректировки со ссылкой на эти версии, в основном для ознакомления.[Перевод] Понимание сетей LSTMЭта статья. Если у меня будет время позже, я должен написать TensorFlow для реализации примера LSTM, так что следите за обновлениями, хахаха!

(Пример LSTM действительно написан, добро пожаловать на печать:Введение в TensorFlow (5) Многослойный LSTM Простая для понимания версия)