Рассмотрение

В предыдущем посте мы вкратце говорили о RNN и обсуждали сохраняемость и повторяемость. Мы также рассмотрели проблему исчезающих / увеличивающихся градиентов и поняли, как работают двунаправленные RNN. Чтобы решить проблему исчезающих градиентов, исследователи развили уже существующую идею и улучшили фиксацию долгосрочных зависимостей, представив сети LSTM. В следующем разделе мы глубоко погрузимся в LSTM и поймем, как это привело к разработке GRU или Gated Recurrent Units.

LSTM

Исчезающая чувствительность ванильных RNNS доказана математически и включает два основных фактора: 1. Инициализация веса. 2. Обратное распространение.

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

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

Оригинальность информации может быть сохранена, и это было предложено в знаменательной статье Hocreiter and Schmidhuber (1997). Они спросили: Как мы можем добиться постоянного потока ошибок через единый блок с одним подключением к самому себе [то есть, единый фрагмент изолированной информации]?

Ответ очень прост - избежать морфинга информации: изменения состояния LSTM явно записываются посредством явного сложения или вычитания, так что каждый элемент состояния остается постоянным без внешнего вмешательства: «активация модуля должна быть остаются постоянными, что обеспечивается использованием функции идентичности ». Хокрайтер и Шмидхубер заметили, что простое добавление или вычитание информации в каждом состоянии может сохранить состояние изолированным, но в то же время сложение и вычитание могут уравновешиваться или, что еще хуже, они могут усложнять состояния с сохранением только части информации, которую трудно понять. восстанавливаться.

Хохрайтер и Шмидхубер распознали эту проблему, разделив ее на несколько подзадач, которые они назвали «конфликт входного веса», «конфликт выходного веса», «проблема злоупотребления» и «дрейф внутреннего состояния». Архитектура LSTM была тщательно разработана для решения этих проблем, начиная с идеи избирательности.

Согласно литературе LSTM, есть 3 вещи, которые LSTM должен выборочно решать: «что писать, что читать и что забывать». Самый фундаментальный и математический способ поддержания избирательности - это ворота, мы называем их воротами чтения, записи и забывания. Наши три логических элемента на временном шаге t обозначаются i(t), входной вентиль (для записи), o(t), выходной вентиль (для чтения) и f(t), вентиль забывания (для запоминания!).

Вот математические определения ворот (обратите внимание на сходство):

Уравнения, управляющие LSTM.

Определив все ворота, мы теперь разрабатываем прототип LSTM, определяя требуемое поведение. Чтобы написать состояние кандидата s (t), мы следуем простому практическому правилу.

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

Уравнения, управляющие LSTM.

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

Ячейка LSTM.

Теоретически этот прототип должен работать, но оказалось, что это не так. Это происходит потому, что даже после хорошо продуманных инициализаций и вентилей записи и забывания координация между этими вентилями на ранней стадии обучения становится сложной и очень часто становится большой и хаотичной на этапе записи. Для получения более подробной информации обратитесь к проблеме дрейфа внутреннего состояния, а эмпирическую демонстрацию этого можно найти в Greff et al. (2015) , который охватывает 8 вариантов LSTM.

Решение вышеупомянутой проблемы - ограничить состояние, чтобы предотвратить его хаотическое или взрывное развитие. Существует 3 варианта LSTM, в которых используется это решение: 1. Нормализованный LSTM, GRU и псевдо LSTM. В этом посте мы сосредоточимся в основном на ГРУ, но не стесняйтесь углубляться в другие варианты.

ГРУ

Мы накладываем жесткие ограничения на состояние, явно привязывая ворота записи и забывания. Другими словами, вместо выборочной записи и выборочного забывания мы определяем забывание как 1 минус шлюз записи. Так что все, что не написано, забывается. В терминологии GRU шлюз забывания переименован в шлюз обновления или z (t) и, по сути, означает «не обновлять». Таким образом, поэлементное обновление предыдущего состояния сообщит, что не следует обновлять, а 1 - z (t) фактически обновляет состояние, действуя как новый шлюз записи.

Уравнения, управляющие ГРУ.

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

Ячейка ГРУ.

Обратите внимание на разницу между чтением и записью: если мы решим не читать из блока, это не может повлиять ни на один элемент нашего состояния, а наше решение чтения влияет на все состояние. Если мы решим не писать в модуль, это повлияет только на этот единственный элемент нашего состояния. Это не означает, что влияние выборочного чтения более значимо, чем влияние выборочной записи: чтения суммируются и подавляются нелинейностью, тогда как записи являются абсолютными, так что влияние решения о чтении является широким, но неглубоким, и влияние решения о записи невелико, но глубоко.

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

Базовая ячейка LSTM

Как мы обсуждали выше, чтение происходит после записи, потому что ячейка записывает ввод в память, а затем читает вывод во время вычисления с последующим применением забудьте ворота и обнови ячейку. Здесь мы использовали термин «память», который играет важную роль в построении базовой ячейки LSTM. Базовая ячейка LSTM требует небольшого изменения по сравнению с нашим прототипом, теперь мы введем 2 априорных значения в ячейку, а именно, предыдущее состояние s(t) теперь переименовано в c(t) и теневое / скрытое состояние h(t). Скрытое состояние - это не что иное, как закрытое предыдущее состояние, и, кроме того, предыдущее также течет в ячейке. Результатом этого является обновленное текущее состояние вместе со скрытым состоянием, которое является стробированным текущим состоянием.

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

Основные уравнения LSTM обновлены с учетом представления ячеек памяти.

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

Базовая ячейка LSTM, доступная в библиотеках глубокого обучения.

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

Управляющие уравнения LSTM с глазками.

Заключение

LSTM и его варианты решали фундаментальные (морфинг информации) и технические (исчезающие градиенты) проблемы, связанные с RNN, и, таким образом, завоевали популярность. Идеология, связанная с LSTM и его вариантами, также позволила исследователям реализовать аналогичный мыслительный процесс избирательности при чтении и записи информации. Эта идеология проложила путь для Остаточных сетей или ResNet в сочетании с очень глубокой (до 100 слоев) архитектурой. Эта сеть выиграла конкурс ImageNet 2015.

Содержание этого поста может сбивать с толку из-за визуального описания, и благодаря deepsystems.ai вы можете посмотреть видео для лучшего понимания. Их видео и цитируемый текст этой публикации вдохновлены сообщением в блоге R2RT: Письменные воспоминания: понимание, создание и расширение LSTM.

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

Спасибо за чтение, надеюсь, помогло