Привет!

Сегодня мы поговорим о стиле QnA для сетей LSTM. Мотивация для этого опять же, как я часто видел, когда люди читают о LSTM, у них больше вопросов, чем ответов. Итак, здесь я попытаюсь дать суть сетей LSTM в сравнении с FFN (Feed Forward Network или обычная NN).

Итак, приступим.

В. Чем LSTM отличается от ячейки FFN (или ячейки сети прямого распространения, или узла в скрытом слое с FFN)?

›Принципиальное различие между ячейкой LSTM и ячейкой FFN состоит в том, что сама ячейка LSTM представляет собой комбинацию 4 сетей. Да, вы правильно прочитали.

В. Почему у нас 4 сети в одной ячейке?

›Потому что нам нужна память или« информация о предыдущем состоянии ». И один из способов достижения этого - внедренные сети.

В. Что это за 4 сети?

›Мы скоро остановимся на деталях. См. Раздел «Достойные сети

В. Зачем нам нужна «информация о предыдущем состоянии»?

›Потому что мы не хотим терять контекст и считаем, что знание контекста может помочь лучше предсказать / классифицировать цель.

В. Что, если вы ошибаетесь в том смысле, что информация о предыдущем состоянии не требуется?

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

В. Подождите, вы сказали Последовательность. CNN (сверточные нейронные сети) хороши с последовательностями. Я мог бы обойтись без использования CNN и не использовать LSTM?

›Опять же, возможно, в зависимости от вашего приложения. Можно сказать, что между этими двумя работами есть сходство в отличие от FFN. Оба они принимают последовательность (пакет) входных данных. Но на этом сходство заканчивается.

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

В. Хорошо, поэтому вы говорите, что одна ячейка LSTM - это ячейка с 4 сетями, тогда для скрытого уровня в реализации LSTM у меня есть несколько ячеек LSTM?

›Что ж, позвольте мне сказать так. Одна ячейка LSTM эквивалентна скрытому слою в FFN. Опять же, это правда. Подобно тому, что у вас есть количество узлов в скрытом слое, ячейка LSTM принимает количество скрытых узлов в качестве параметра. Это количество узлов в каждом из этих 4 слоев. Что касается наложения, вы можете складывать несколько ячеек LSTM, что будет похоже на наложение скрытых слоев по сравнению с FFN.

Хорошо, давайте попробуем работать с LSTM. Ячейка состоит из следующих компонентов.

  1. Долгосрочная память
  2. Краткосрочная память
  3. Вход / событие

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

Достойные сети!

  1. Сеть Learn.
  2. Забудьте о сети
  3. Сеть "Помни".
  4. Сеть использования.

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

  1. Learn Network: эта сеть объединяет данные о событиях и краткосрочную память, изучает новую информацию о событии и забывает то, что не требуется.
  2. Забудьте о сети: здесь уходит долговременная память и забывается то, что не требуется. Кратковременная память также необходима для определения того, что не требуется.
  3. Remember Network: мы объединяем долгосрочную память и краткосрочную память, чтобы получить обновленную долгосрочную память.
  4. Использовать сеть: как следует из названия, она учитывает все, что мы уже знаем (долговременная память), и все, что мы узнали недавно (краткосрочная память), и объединяет их, чтобы предсказать результат. Результатом становится новая краткосрочная память и предсказание.

Learn Network:

Здесь не о чем беспокоиться.

У нас было 2 операции: объединение и игнорирование для краткосрочной памяти. И мы здесь больше ничего не делаем.

Почему tanh для Combine и sigmoid для Ignore? Потому что это работает! Мне очень жаль. Если у кого-то есть лучшее понимание, поделитесь, пожалуйста. Документы, которые я нашел, содержали эмпирические выводы, а не то, на чем я мог бы получить интуицию.

Забудьте о сети.

Здесь, для долговременной памяти, нам нужно забыть о том, что не требуется. Итак, мы умножаем LTM на коэффициент забывания. Как получить фактор забывания? Еще одна сеть на помощь!

Запомнить сеть

Здесь мы обновляем долговременную память. Как мы делаем это? Совместите долгосрочные (все, что важно) с краткосрочными (обновленными данными о последних событиях).

У Learn Network и Forget Network есть именно то, что нам нужно. Поэтому мы просто добавляем их.

Использовать сеть

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

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

МОМЕНТ ИСТИНЫ!

Собираем все вместе:

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

Вот и все, ребята.

Ваше здоровье. Счастливого обучения

Первоначально опубликовано на сайте ronakbits.tech 23 апреля 2018 г.