LSTM — долговременная кратковременная память — это улучшение по сравнению с рекуррентной нейронной сетью для устранения неспособности RNN обучаться при наличии прошлых наблюдений, превышающих 5–10 дискретных временных шагов между соответствующими входными событиями и целевыми сигналами (проблема исчезающего / взрывающегося градиента). LSTM делает это, вводя единицу памяти, называемую «состоянием ячейки». Давайте посмотрим на диаграмму ниже, чтобы понять основные строительные блоки LSTM.

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

«Состояние ячейки» долговременной памяти ведет себя подобно конвейерной ленте в автоматической сортировочной машине, где посылки добавляются и удаляются.

Обратите внимание, что с «состоянием ячейки» происходит только два обновления. Это уменьшает количество выполняемых вычислений. Следовательно, давая стабильность и снижая вероятность взрыва при спуске.

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

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

Входной слой: снова используется логика забывания, которая удаляет любую нежелательную информацию из текущего ввода. У нас также есть модулятор, который поддерживает значения между -1 и 1. Это достигается с помощью функции активации tanh.

Выходной слой. Этот слой принимает текущие входные данные и текущее состояние ячейки, а затем выводит скрытое состояние и выходные данные ячейки. Мы снова используем масштабирование (tanh) для состояния ячейки, чтобы сохранить значения в диапазоне от -1 до 1.

Примечание. Мы также вводим разные смещения на разных уровнях.

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

Если вы заинтересованы в реализации LSTM, вы можете просмотреть этот блог.

Приятного обучения!