Нейроны долгой краткосрочной памяти (long short-term memory, LSTM)
Для борьбы с проблемой исчезающего градиента Зепп Хохрайтер и Юрген Шмидхубер ввели архитектуру долгой краткосрочной памяти (LSTM). Основной ее принцип таков: сеть создается для надежного переноса важной информации на много шагов в будущее. Эти соображения привели к созданию архитектуры, показанной на рис. 7.17.
Рис. 7.17. Архитектура нейрона LSTM на уровне тензоров (стрелки) и операций (сиреневые блоки)
Для простоты обсуждения отойдем от уровня отдельных нейронов и будем говорить о сети как о наборе тензоров и операций над ними.
Как ясно из рисунка, нейрон LSTM состоит из нескольких ключевых компонентов. Один из них — ячейка памяти , тензор, выделенный жирным в центре рисунка. Она содержит важную информацию, которую усвоила со временем, а сеть призвана эффективно сохранять в ней эту полезную информацию на протяжении нескольких шагов. На каждом шаге нейрон LSTM изменяет ячейку памяти, снабжая ее новой информацией в три этапа. Сначала он должен определить, какую часть предшествующей информации следует хранить, при помощи вентиля забвения (рис. 7.18).
Рис. 7.18. Архитектура вентиля забвения нейрона LSTM
Основная идея проста. Тензор состояния памяти с предыдущего шага насыщен информацией, но часть ее может быть устаревшей, и ее следует стереть. Мы выясняем, какие элементы тензора релевантны, а какие уже нет, вычисляя двоичный тензор (состоящий из нулей и единиц), который мы умножаем на предыдущее состояние. Если соответствующее место в двоичном тензоре содержит 1, это значит, что место ячейки памяти по-прежнему значимо и его нужно сохранить. Если же на этом месте 0, оно утратило значимость и его следует забыть.
Мы аппроксимируем этот двоичный тензор, соединив входные данные этого шага и выходные данные нейрона LSTM с предыдущего и наложив на полученный тензор сигмоидный слой (sigmoid). Как вы наверняка помните, последний на выходе дает значение, которое обычно очень близко к 0 или 1 (единственное исключение — если входное значение само близко к 0). Выходные данные сигмоидного слоя — хорошее приближение двоичного тензора, чем можно воспользоваться при построении вентиля забвения. Поняв, какую информацию от прежних состояний следует сохранить, а какую забыть, мы переходим к той, которую нужно добавить в память. Эта часть нейрона LSTM называется вентилем записи , и она показана на рис. 7.19. Она делится на две основные части. Первая определяет, какую информацию мы хотим добавить в состояние. Это вычисляется в слое tanh путем создания промежуточного тензора. Второй компонент определяет, какие части этого тензора мы хотим ввести в новое состояние, а какие выбросить и не записывать. Для этого мы аппроксимируем двоичный вектор из нулей и единиц с помощью той же стратегии (сигмоидного слоя), что и для вентиля забвения. Затем мы умножаем двоичный вектор на промежуточный тензор и добавляем полученный результат, создавая новый вектор состояния для LSTM.
Рис. 7.19. Архитектура вентиля записи в нейроне LSTM
Наконец, на каждом временном шаге нейрон LSTM должен выдавать данные. Можно воспринимать вектор состояния как выходные данные, но нейрон LSTM призван обеспечить большую гибкость, передавая на выход тензор — «интерпретацию» или внешнюю «коммуникацию» того, что содержит вектор состояния. Архитектура выходного вентиля показана на рис. 7.20. Мы используем структуру, почти идентичную реализованной для вентиля записи: слой tanh порождает промежуточный тензор от вектора состояния; сигмоидный слой создает маску двоичного тензора на основе текущего ввода и предыдущего вывода; промежуточный тензор умножается на двоичный тензор, что дает нам конечные выходные данные.
Рис. 7.20. Архитектура выходного вентиля в нейроне LSTM
Почему этот вариант лучше, чем обычный нейрон РНС? Главное здесь то, как информация распространяется по сети, когда мы разворачиваем нейрон LSTM во времени. Развернутая архитектура показана на рис. 7.21.
Читать дальше
Конец ознакомительного отрывка
Купить книгу