Обсуждение:Долгая краткосрочная память

Материал из MachineLearning.

(Различия между версиями)
Перейти к: навигация, поиск

Aleksei Klesov (Обсуждение | вклад)
(Новая: {{well|Статья написана с использованием LLM '''DeepSeek-V3''' и проверена участником А. Клёсов...)
К следующему изменению →

Версия 15:47, 11 июля 2026

Статья написана с использованием LLM DeepSeek-V3 и проверена участником А. Клёсов 18:40, 11 июля 2026 (MSD)


Содержание


Долгая краткосрочная память (англ. Long Short-Term Memory, LSTM) — особая архитектура рекуррентных нейронных сетей (RNN), предложенная в 1997 году Зеппом Хохрайтером и Юргеном Шмидхубером[1]. Архитектура вводит специализированные блоки памяти, позволяющие модели эффективно обучаться на последовательностях с протяжёнными временны́ми зависимостями, преодолевая фундаментальные ограничения классических RNN, связанные с исчезновением и взрывом градиента[1][1]. Благодаря способности сохранять информацию на протяжении тысяч временны́х шагов LSTM стали основой для многих прорывных достижений в обработке естественного языка (NLP), распознавании речи, машинном переводе и анализе временных рядов[1][1].

Историческая справка

Проблема долгосрочных зависимостей

К середине 1990-х годов стало очевидно, что стандартные рекуррентные сети, обучаемые с помощью обратного распространения ошибки во времени (Backpropagation Through Time, BPTT), неспособны удерживать информацию на временны́х интервалах, превышающих 10–20 шагов[1]. В 1991 году Хохрайтер в своей дипломной работе[1] детально проанализировал это явление, показав, что градиенты функции потерь по параметрам сети при распространении назад во времени экспоненциально затухают (или, в некоторых случаях, неограниченно возрастают) из-за многократного умножения на матрицу весов рекуррентных связей[1][1]. Эта проблема, известная как исчезающий градиент, делает обучение классических RNN практически невозможным для задач, требующих учёта событий, разделённых большими временны́ми промежутками.

Создание LSTM (1997)

Хохрайтер и Шмидхубер предложили радикальное решение: ввести в архитектуру сети специализированные ячейки памяти (memory cells) с саморекуррентной связью, вес которой зафиксирован равным единице[1]. Этот механизм, названный Constant Error Carousel (CEC, карусель постоянной ошибки), обеспечивает прохождение градиента через ячейку без затухания, позволяя сети удерживать информацию на протяжении сотен и тысяч шагов[1][1]. Доступ к CEC регулируется двумя мультипликативными вентилями — входным (input gate) и выходным (output gate), которые обучаются открывать или закрывать доступ к потоку ошибок, что позволяет сети динамически решать, какую информацию сохранять, а какую — игнорировать[1].

Первоначальная версия LSTM, однако, имела ограничение: ячейка памяти не могла сбрасывать своё состояние, что делало её непригодной для обработки непрерывных потоков данных без явной сегментации на эпизоды[1].

Вентиль забывания и последующие усовершенствования (1999–2000)

В 1999 году Феликс Герс (Felix Gers) ввёл в архитектуру LSTM третий вентиль — вентиль забывания (forget gate, также называемый keep gate), который позволил ячейке обучаться сбрасывать своё состояние в нужные моменты времени[1][1]. Это нововведение не только решило проблему неограниченного роста состояния в непрерывных потоках, но и дало сети возможность «забывать» устаревшую информацию, освобождая внутренние ресурсы[1]. В том же году Герс и Шмидхубер предложили модификацию с глазковыми соединениями (peephole connections) — прямыми связями от состояния ячейки к вентилям, что позволяет вентилям «видеть» текущее состояние ячейки и принимать более информированные решения[1][1]. Современная каноническая форма LSTM включает в себя все три вентиля (забывания, входа, выхода) и, во многих реализациях, глазковые соединения[1].

Архитектура и математический аппарат

Общее устройство ячейки LSTM

Базовым строительным блоком LSTM-сети является ячейка LSTM (LSTM cell). В каждый момент времени t ячейка получает на вход вектор x_t \in \mathbb{R}^d (текущий элемент последовательности) и скрытое состояние h_{t-1} \in \mathbb{R}^n с предыдущего шага. Внутри ячейки поддерживается вектор состояния ячейки c_{t-1} \in \mathbb{R}^n (cell state) — «долговременная память», которая может сохранять информацию на протяжении многих шагов. Выходом ячейки является обновлённое скрытое состояние h_t, которое передаётся на следующий шаг и (в зависимости от архитектуры) используется для формирования предсказания[1][1].

Ключевая инновация LSTM — три вентиля (gates), каждый из которых представляет собой слой с сигмоидальной функцией активации \sigma(x) = 1/(1+e^{-x}). Сигмоида выдаёт значения в интервале (0, 1), которые интерпретируются как степень «открытости» вентиля (0 — полностью закрыт, 1 — полностью открыт). Вентили управляют потоками информации внутри ячейки: вентиль забывания определяет, какую часть предыдущего состояния ячейки следует сохранить; вентиль входа решает, какую часть новой информации (кандидата на обновление) следует записать в ячейку; вентиль выхода управляет тем, какая часть состояния ячейки будет передана на выход в виде скрытого состояния[1].

Математическая формулировка

Пусть W_{fx}, W_{fh}, W_{ix}, W_{ih}, W_{ox}, W_{oh}, W_{cx}, W_{ch} — матрицы весов (размерности n \times d для входных связей и n \times n для рекуррентных), а b_f, b_i, b_o, b_c \in \mathbb{R}^n — векторы смещений. Тогда вычисления внутри ячейки LSTM на шаге t описываются следующими уравнениями[1]:

 \begin{aligned} f_t &= \sigma(W_{fx} x_t + W_{fh} h_{t-1} + b_f), \\ i_t &= \sigma(W_{ix} x_t + W_{ih} h_{t-1} + b_i), \\ \tilde{c}_t &= \tanh(W_{cx} x_t + W_{ch} h_{t-1} + b_c), \\ c_t &= f_t \odot c_{t-1} + i_t \odot \tilde{c}_t, \\ o_t &= \sigma(W_{ox} x_t + W_{oh} h_{t-1} + b_o), \\ h_t &= o_t \odot \tanh(c_t), \end{aligned} где \odotпокомпонентное умножение (поэлементное произведение векторов); \tanhгиперболический тангенс, используемый для приведения значений к интервалу (-1, 1)[1]. Начальные состояния h_0 и c_0 обычно инициализируются нулевыми векторами.

Интерпретация:

f_t — вентиль забывания: определяет, какую долю предыдущего состояния c_{t-1} следует «забыть» (умножить на 0) или сохранить (умножить на 1).

i_t — вентиль входа: определяет, какую часть нового кандидата \tilde{c}_t следует записать в состояние ячейки.

\tilde{c}_t — вектор кандидата на обновление: новые значения, которые могут быть добавлены к состоянию.

c_t — обновлённое состояние ячейки: взвешенная сумма старого состояния (через вентиль забывания) и новой информации (через вентиль входа).

o_t — вентиль выхода: определяет, какая часть состояния c_t (после применения \tanh) будет передана как скрытое состояние h_t.

В случае использования глазковых соединений (peephole connections)[1] уравнения модифицируются: к аргументам сигмоид для вентилей добавляются слагаемые, зависящие от состояния ячейки c_{t-1} (для вентилей забывания и входа) или c_t (для вентиля выхода)[1].

Обучение и распространение ошибки

Обучение LSTM, как и других RNN, осуществляется с помощью алгоритма Обратное распространение ошибки во времени (Backpropagation Through Time, BPTT). Однако ключевое отличие LSTM от классических RNN заключается в том, как градиент распространяется через ячейку памяти. В стандартной RNN градиент при обратном проходе умножается на матрицу весов рекуррентных связей на каждом шаге, что приводит к экспоненциальному затуханию (или росту) при длинных последовательностях[1].

В LSTM механизм Constant Error Carousel (CEC) — саморекуррентная связь ячейки с весом, равным единице — обеспечивает прохождение градиента через ячейку без изменений, если вентиль забывания полностью открыт[1][1]. Действительно, из уравнения обновления состояния c_t = f_t \odot c_{t-1} + i_t \odot \tilde{c}t следует, что в скалярном случае главный путь распространения градиента описывается производной \partial c_t / \partial c{t-1} = f_t (это равенство является математическим упрощением, поскольку в общем случае, например при использовании глазковых соединений, f_t и i_t также зависят от c_{t-1}, однако указанная производная описывает основной канал протекания градиента). Если f_t \approx 1, градиент сохраняется практически без затухания на протяжении многих шагов[1]. Вентили, обучаясь, могут динамически регулировать эту производную, открывая или закрывая доступ к потоку ошибок, что даёт сети возможность выбирать, какую информацию сохранять для долгосрочного обучения[1].

Важно отметить, что, хотя CEC решает проблему исчезающего градиента для состояния ячейки, градиенты, проходящие через вентили и другие части сети, по-прежнему могут затухать. Однако на практике LSTM демонстрирует значительно лучшую способность к обучению долгосрочным зависимостям по сравнению с классическими RNN[1][1].

Модификации и альтернативы

Глазковые соединения (Peephole Connections)

В 2000 году Герс и Шмидхубер предложили модификацию LSTM, в которой вентили получают дополнительный вход от состояния ячейки[1]. Это позволяет вентилям «видеть» текущее состояние ячейки и принимать более точные решения. Например, вентиль выхода, зная состояние ячейки, может лучше определить, какую информацию следует выдавать на выход. Эксперименты показали, что глазковые соединения улучшают способность сети различать тонкие временны́е паттерны[1][1].

Управляемый рекуррентный нейрон (GRU)

В 2014 году Чо и соавторы предложили управляемый рекуррентный нейрон (Gated Recurrent Unit, GRU)[1] как более простую альтернативу LSTM. GRU объединяет вентиль забывания и вентиль входа в один «вентиль обновления» (update gate) и, кроме того, объединяет состояние ячейки и скрытое состояние[1][1]. В результате GRU имеет меньше параметров, чем LSTM, что делает его вычислительно более эффективным и менее склонным к переобучению на малых объёмах данных[1]. На многих задачах GRU демонстрирует производительность, сравнимую с LSTM[1][1], однако LSTM сохраняет преимущество в задачах, требующих очень долгой памяти[1].

Другие варианты

Существуют и другие модификации LSTM, такие как Phased LSTM, вводящая дополнительный временной вентиль для работы с событиями, происходящими нерегулярно[1], или Bidirectional LSTM (двунаправленная LSTM), обрабатывающая последовательность как в прямом, так и в обратном направлении для учёта контекста с обеих сторон[1].

LSTM и архитектура Трансформер

С 2017 года, после появления архитектуры Трансформер[1], LSTM постепенно утратила статус доминирующего подхода в NLP. Трансформеры, основанные на механизме внимания (attention), позволяют обрабатывать всю последовательность параллельно, что даёт огромное преимущество в эффективности использования GPU и TPU по сравнению с рекуррентными сетями, которые по своей природе являются последовательными[1]. LSTM вынуждена обрабатывать элементы последовательности один за другим, что ограничивает степень распараллеливания[1]. Хотя существуют оптимизированные библиотеки, такие как cuDNN[1], ускоряющие вычисления LSTM на GPU за счёт эффективных реализаций матричных операций (GEMM)[1], фундаментальная последовательная природа остаётся узким местом.

Тем не менее, LSTM сохраняет актуальность в ряде областей:

Задачи с малыми объёмами данных, где трансформеры склонны к переобучению.

Приложения, где важна интерпретируемость и управляемость (например, в финансовых прогнозах).

Мобильные и встраиваемые системы с ограниченными вычислительными ресурсами, где LSTM требует меньше памяти и вычислений, чем трансформеры[1].

Кроме того, многие современные гибридные подходы комбинируют LSTM с механизмами внимания, используя LSTM для локальной обработки последовательности, а внимание — для глобального контекста[1].

Вычислительная специфика

Рекуррентная природа LSTM накладывает серьёзные ограничения на распараллеливание вычислений. В отличие от трансформеров, где все позиции последовательности обрабатываются одновременно, LSTM требует последовательного прохода по временны́м шагам: вычисление h_t и c_t на шаге t зависит от h_{t-1} и c_{t-1}, полученных на предыдущем шаге. Это означает, что ускорение на GPU достигается в основном за счёт параллельной обработки внутри каждого шага (матричные умножения) и обработки нескольких последовательностей в батче, но не за счёт распараллеливания по времени[1].

Библиотека cuDNN от NVIDIA предлагает высокооптимизированные реализации LSTM, которые используют эффективные блочные вычисления GEMM и специальные техники для минимизации накладных расходов на передачу данных между ядрами GPU[1]. В 2016 году в cuDNN 5 были представлены оптимизации для LSTM и GRU, позволившие значительно ускорить обучение и инференс[1]. Однако, как отмечают исследователи, даже с этими оптимизациями использование GPU для LSTM часто оказывается менее эффективным, чем для трансформеров, из-за малого количества одновременно выполняемых потоковых мультипроцессоров (SM) при обработке коротких последовательностей[1].

См. также

Рекуррентная нейронная сеть

Исчезновение и взрыв градиента

Управляемый рекуррентный нейрон

Трансформер

Внимание

Примечания

Литература

Hochreiter S., Schmidhuber J. Long Short-Term Memory // Neural Computation. — 1997. — Т. 9. — № 8. — С. 1735–1780.

Bengio Y., Simard P., Frasconi P. Learning long-term dependencies with gradient descent is difficult // IEEE Transactions on Neural Networks. — 1994. — Т. 5. — № 2. — С. 157–166.

Gers F. A., Schmidhuber J., Cummins F. Learning to Forget: Continual Prediction with LSTM // Neural Computation. — 2000. — Т. 12. — № 10. — С. 2451–2471.

Gers F. A., Schmidhuber J. Recurrent Nets that Time and Count // Proceedings of the IEEE-INNS-ENNS International Joint Conference on Neural Networks (IJCNN 2000). — 2000. — Т. 3. — С. 189–194.

Lipton Z. C., Berkowitz J., Elkan C. A Critical Review of Recurrent Neural Networks for Sequence Learning // arXiv preprint arXiv:1506.00019. — 2015.

Cho K., van Merriënboer B., Gulcehre C., et al. Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation // Proceedings of the 2014 Conference on Empirical Methods in Natural Language Processing (EMNLP). — 2014. — С. 1724–1734.

Chung J., Gulcehre C., Cho K., Bengio Y. Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling // arXiv preprint arXiv:1412.3555. — 2014.

Vaswani A., Shazeer N., Parmar N., et al. Attention Is All You Need // Advances in Neural Information Processing Systems (NIPS 2017). — 2017. — С. 5998–6008.

Neil D., Pfeiffer M., Liu S. C. Phased LSTM: Accelerating Recurrent Network Training for Long or Event-based Sequences // Advances in Neural Information Processing Systems (NIPS 2016). — 2016.

NVIDIA Optimizing Recurrent Neural Networks in cuDNN 5 // NVIDIA Developer Blog. — 2016.