Интуитивное объяснение рекуррентной нейронной сети, LSTM и GRU
Рекуррентная нейронная сеть (RNN) - это популярная архитектура нейронной сети, которая широко используется с вариантами использования, состоящими из последовательных или контекстных данных.
Прежде чем мы начнем с самой RNN, давайте сначала разберемся, зачем она нам вообще нужна. Давайте попробуем вспомнить эту сцену.
На это потребовалось время, правда? (Или, может быть, ты вообще не в состоянии общаться)
Теперь представьте, что вы смотрите фильм и находитесь в этой конкретной сцене, вы очень легко сможете соединить точки. Все наши мысли идут в потоке, и, основываясь на предыдущем кадре, мы легко можем связать текущий кадр. Наши мысли имеют настойчивость.
Наши традиционные архитектуры нейронных сетей не могут этого сделать, учитывая определенную последовательность кадров, они не могут предсказать, что происходит в каждой точке фильма.
Чтобы решить эту проблему, мы используем сеть с петлей.
Просто мы возвращаем выходные данные предыдущего временного интервала в следующий временной интервал в сети. Предположим, что выход сети при t = 1 равен h0, при обучении сети при t = 2 мы также будем рассматривать h0, вывод получено из предыдущего момента времени. Если мы развернем сеть, мы получим следующую структуру.
Здесь важно помнить, что последовательные единицы, которые вы показываете, являются одними и теми же единицами в разный момент времени, а не каскадными единицами.
Теперь есть проблемы и с простой реализацией RNN. Они учатся через обратное распространение с течением времени. Это может привести к исчезновению градиента или взрывным проблемам градиента, если мы попросим их извлечь уроки из долгосрочных зависимостей. Проще говоря, они не могут запомнить важную информацию, которая может потребоваться в более поздней отметке времени.
Чтобы преодолеть эти проблемы, мы используем LSTM (долговременную память), особый вид рекуррентной сети, и GRU (Gated Recurrent Unit), который является слегка измененной версией LSTM.
Разбивка LSTM:
Давайте разберем внутреннюю структуру LSTM. Блок LSTM в основном
состоит из состояния ячейки (текущий информационный поток устройства) и трех ворот (считайте, что это особая структура слоев сети) - ворота забыли, входные ворота и выходные ворота. Не волнуйтесь, мы разберем это шаг за шагом.
Состояние ячейки. Мы можем представить себе состояние ячейки как непрерывный поток информации в различные периоды времени. В каждый момент времени мы должны решить, какой объем информации мы будем сохранять или изменять. Помните, зачем нам вообще понадобился LSTM? мы не смогли сохранить важность информации, поступающей из конкретный случай далекого времени. Здесь у нас есть возможность решить, какой информации мы будем уделять больше внимания на каждом этапе.
- Забудьте о воротах: сначала давайте подробнее рассмотрим различные обозначения, которые у нас есть:
C_ (t-1): старое состояние ячейки, c_t: текущее состояние ячейки, h_ (t-1): вывод из предыдущего состояния , h_t = вывод текущего состояния
Забыть ворота решают, сколько информации мы будем использовать из предыдущего состояния ячейки и сколько мы «выбросим». Выходные данные из последнего состояния (h_ (t-1)) объединяются ( не добавлено) с x_t и пропущено через сигмовидный блок. Sigmoid обеспечивает вывод от 0 до 1. Интуитивно 0 означает «Забыть все», а 1 означает «Сохранить все».
2. Входной элемент: входной элемент решает, какую новую информацию мы собираемся добавить к состоянию ячейки. Объединенные x_t и h_ (t-1) отправляются через сигмоидальный блок, который решает, какое значение мы будем обновлять.
Объединенное значение также проходит через слой tanh, который дает выходной сигнал от -1 до +1 и помогает регулировать сеть. Затем мы умножаем выход tanh на выходной сигмоид и складываем с состоянием ячейки. После всех этих операций мы получаем текущее значение состояния нашей ячейки.
3. Выходной вентиль: Выходной вентиль решает, какую информацию мы передадим в сеть в следующий момент времени. Если вы проследите за последней горизонтальной линией, мы сначала соединили x_t и h_ (t-1) отправляется через сигмовидную единицу. Затем мы передаем значение текущего состояния ячейки через функцию tanh (обратите внимание, что это точечная операция tanh, а не слой активации tanh). Наконец, мы умножаем оба вывода и отправляем через следующий экземпляр времени. У вас может возникнуть вопрос, почему мы получаем здесь два h_t?. Ответ заключается в том, что на протяжении всего нашего объяснения мы рассматриваем одну единицу LSTM. На практике мы можем также используйте несколько уровней LSTM, которые каскадированы. Таким образом, один выход идет на следующий уровень сети, а другой - на следующий экземпляр сети (прямая связь со временем).
Распад ГРУ:
G ated R ecurrent U nit - популярный вариант сети LSTM, представленный
Чо и др. (2014) . Основное различие между LSTM и GRU в том, что у GRU только два шлюза (ворота обновления и сброса).
- Шлюз обновления: шлюз обновления - это не что иное, как комбинация шлюза ввода и забвения в одном блоке. Он решает, какую информацию сохранить и какую новую информацию нужно добавить.
- Сбросить шлюз: он решает, какая информация должна быть передана в сеть в следующий момент времени. Он также объединяет текущее состояние ячейки и скрытое состояние и вносит некоторые другие изменения.
GRU имеет меньшее количество вентилей, следовательно, уменьшает количество тензорных операций по сравнению с LSTM, что делает его в вычислительном отношении дешевле и быстрее, чем LSTM. Но сразу сказать, какая реализация лучше, нельзя. Это зависит от решаемой проблемы. На практике мы применяем обе модели к нашему варианту использования и сравниваем, какая из них работает лучше.
Конец примечания:
В этой статье мы обсудили основы текущей сетевой сети »и строительные блоки LSTM и GRU. Основная цель этой статьи - познакомить вас с основами нейронной сети и создать интуитивно понятную основу. Надеюсь, это поможет вам в вашем путешествии. Удачного обучения!
Цитаты:
вы можете перейти по этим ссылкам, чтобы погрузиться глубже