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

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

(Различия между версиями)
Перейти к: навигация, поиск
(Новая: {{well|Статья написана с использованием LLM '''DeepSeek-V3''' и проверена участником А. Клёсов...)
(Полностью удалено содержимое страницы)
Строка 1: Строка 1:
-
{{well|Статья написана с использованием LLM '''DeepSeek-V3''' и проверена участником [[Участник:Aleksei Klesov|А. Клёсов]] 18:40, 11 июля 2026 (MSD)}}
 
-
{{TOCright}}
 
-
 
-
 
-
'''Долгая краткосрочная память''' (англ. ''Long Short-Term Memory, LSTM'') — особая архитектура [[Рекуррентная нейронная сеть|рекуррентных нейронных сетей]] (RNN), предложенная в 1997 году [[Хохрайтер, Зепп|Зеппом Хохрайтером]] и [[Шмидхубер, Юрген|Юргеном Шмидхубером]]<ref name="Hochreiter1997">Hochreiter, Schmidhuber, 1997</ref>. Архитектура вводит специализированные блоки памяти, позволяющие модели эффективно обучаться на последовательностях с протяжёнными временны́ми зависимостями, преодолевая фундаментальные ограничения классических RNN, связанные с [[Исчезновение и взрыв градиента|исчезновением и взрывом градиента]]<ref name="Bengio1994">Bengio, Simard, Frasconi, 1994</ref><ref name="Hochreiter1997" />. Благодаря способности сохранять информацию на протяжении тысяч временны́х шагов LSTM стали основой для многих прорывных достижений в [[Обработка естественного языка|обработке естественного языка]] (NLP), [[Распознавание речи|распознавании речи]], [[Машинный перевод|машинном переводе]] и [[Анализ временных рядов|анализе временных рядов]]<ref name="Hochreiter1997" /><ref name="Lipton2015">Lipton, Berkowitz, Elkan, 2015</ref>.
 
-
 
-
== Историческая справка ==
 
-
 
-
=== Проблема долгосрочных зависимостей ===
 
-
 
-
К середине 1990-х годов стало очевидно, что стандартные рекуррентные сети, обучаемые с помощью [[Обратное распространение ошибки во времени|обратного распространения ошибки во времени]] (Backpropagation Through Time, BPTT), неспособны удерживать информацию на временны́х интервалах, превышающих 10–20 шагов<ref name="Bengio1994" />. В 1991 году Хохрайтер в своей дипломной работе<ref name="Hochreiter1991">Hochreiter, 1991</ref> детально проанализировал это явление, показав, что градиенты функции потерь по параметрам сети при распространении назад во времени экспоненциально затухают (или, в некоторых случаях, неограниченно возрастают) из-за многократного умножения на матрицу весов рекуррентных связей<ref name="Bengio1994" /><ref name="Hochreiter1997" />. Эта проблема, известная как ''исчезающий градиент'', делает обучение классических RNN практически невозможным для задач, требующих учёта событий, разделённых большими временны́ми промежутками.
 
-
 
-
=== Создание LSTM (1997) ===
 
-
 
-
Хохрайтер и Шмидхубер предложили радикальное решение: ввести в архитектуру сети специализированные ''ячейки памяти'' (memory cells) с саморекуррентной связью, вес которой зафиксирован равным единице<ref name="Hochreiter1997" />. Этот механизм, названный ''Constant Error Carousel'' (CEC, карусель постоянной ошибки), обеспечивает прохождение градиента через ячейку без затухания, позволяя сети удерживать информацию на протяжении сотен и тысяч шагов<ref name="Hochreiter1997" /><ref name="Lipton2015" />. Доступ к CEC регулируется двумя мультипликативными вентилями — ''входным'' (input gate) и ''выходным'' (output gate), которые обучаются открывать или закрывать доступ к потоку ошибок, что позволяет сети динамически решать, какую информацию сохранять, а какую — игнорировать<ref name="Hochreiter1997" />.
 
-
 
-
Первоначальная версия LSTM, однако, имела ограничение: ячейка памяти не могла сбрасывать своё состояние, что делало её непригодной для обработки непрерывных потоков данных без явной сегментации на эпизоды<ref name="Gers2000a">Gers, Schmidhuber, Cummins, 2000</ref>.
 
-
 
-
=== Вентиль забывания и последующие усовершенствования (1999–2000) ===
 
-
 
-
В 1999 году Феликс Герс (Felix Gers) ввёл в архитектуру LSTM третий вентиль — ''вентиль забывания'' (forget gate, также называемый ''keep gate''), который позволил ячейке обучаться сбрасывать своё состояние в нужные моменты времени<ref name="Gers2000a" /><ref name="Lipton2015" />. Это нововведение не только решило проблему неограниченного роста состояния в непрерывных потоках, но и дало сети возможность «забывать» устаревшую информацию, освобождая внутренние ресурсы<ref name="Gers2000a" />. В том же году Герс и Шмидхубер предложили модификацию с ''глазковыми соединениями'' (peephole connections) — прямыми связями от состояния ячейки к вентилям, что позволяет вентилям «видеть» текущее состояние ячейки и принимать более информированные решения<ref name="Gers2000b">Gers, Schmidhuber, 2000</ref><ref name="Lipton2015" />. Современная каноническая форма LSTM включает в себя все три вентиля (забывания, входа, выхода) и, во многих реализациях, глазковые соединения<ref name="Lipton2015" />.
 
-
 
-
== Архитектура и математический аппарат ==
 
-
 
-
=== Общее устройство ячейки LSTM ===
 
-
 
-
Базовым строительным блоком LSTM-сети является '''ячейка LSTM''' (LSTM cell). В каждый момент времени <tex>t</tex> ячейка получает на вход вектор <tex>x_t \in \mathbb{R}^d</tex> (текущий элемент последовательности) и скрытое состояние <tex>h_{t-1} \in \mathbb{R}^n</tex> с предыдущего шага. Внутри ячейки поддерживается вектор '''состояния ячейки''' <tex>c_{t-1} \in \mathbb{R}^n</tex> (cell state) — «долговременная память», которая может сохранять информацию на протяжении многих шагов. Выходом ячейки является обновлённое скрытое состояние <tex>h_t</tex>, которое передаётся на следующий шаг и (в зависимости от архитектуры) используется для формирования предсказания<ref name="Hochreiter1997" /><ref name="Lipton2015" />.
 
-
 
-
Ключевая инновация LSTM — три '''вентиля''' (gates), каждый из которых представляет собой слой с [[Сигмоида (функция)|сигмоидальной]] функцией активации <tex>\sigma(x) = 1/(1+e^{-x})</tex>. Сигмоида выдаёт значения в интервале <tex>(0, 1)</tex>, которые интерпретируются как степень «открытости» вентиля (0 — полностью закрыт, 1 — полностью открыт). Вентили управляют потоками информации внутри ячейки: вентиль забывания определяет, какую часть предыдущего состояния ячейки следует сохранить; вентиль входа решает, какую часть новой информации (кандидата на обновление) следует записать в ячейку; вентиль выхода управляет тем, какая часть состояния ячейки будет передана на выход в виде скрытого состояния<ref name="Lipton2015" />.
 
-
 
-
=== Математическая формулировка ===
 
-
 
-
Пусть <tex>W_{fx}, W_{fh}, W_{ix}, W_{ih}, W_{ox}, W_{oh}, W_{cx}, W_{ch}</tex> — матрицы весов (размерности <tex>n \times d</tex> для входных связей и <tex>n \times n</tex> для рекуррентных), а <tex>b_f, b_i, b_o, b_c \in \mathbb{R}^n</tex> — векторы смещений. Тогда вычисления внутри ячейки LSTM на шаге <tex>t</tex> описываются следующими уравнениями<ref name="Lipton2015" />:
 
-
 
-
<tex> \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} </tex>
 
-
где <tex>\odot</tex> — [[Произведение Адамара|покомпонентное умножение]] (поэлементное произведение векторов); <tex>\tanh</tex> — [[Гиперболический тангенс|гиперболический тангенс]], используемый для приведения значений к интервалу <tex>(-1, 1)</tex><ref name="Lipton2015" />. Начальные состояния <tex>h_0</tex> и <tex>c_0</tex> обычно инициализируются нулевыми векторами.
 
-
 
-
'''Интерпретация''':
 
-
 
-
<tex>f_t</tex> — вентиль забывания: определяет, какую долю предыдущего состояния <tex>c_{t-1}</tex> следует «забыть» (умножить на 0) или сохранить (умножить на 1).
 
-
 
-
<tex>i_t</tex> — вентиль входа: определяет, какую часть нового кандидата <tex>\tilde{c}_t</tex> следует записать в состояние ячейки.
 
-
 
-
<tex>\tilde{c}_t</tex> — вектор кандидата на обновление: новые значения, которые могут быть добавлены к состоянию.
 
-
 
-
<tex>c_t</tex> — обновлённое состояние ячейки: взвешенная сумма старого состояния (через вентиль забывания) и новой информации (через вентиль входа).
 
-
 
-
<tex>o_t</tex> — вентиль выхода: определяет, какая часть состояния <tex>c_t</tex> (после применения <tex>\tanh</tex>) будет передана как скрытое состояние <tex>h_t</tex>.
 
-
 
-
В случае использования глазковых соединений (peephole connections)<ref name="Gers2000b" /> уравнения модифицируются: к аргументам сигмоид для вентилей добавляются слагаемые, зависящие от состояния ячейки <tex>c_{t-1}</tex> (для вентилей забывания и входа) или <tex>c_t</tex> (для вентиля выхода)<ref name="Lipton2015" />.
 
-
 
-
== Обучение и распространение ошибки ==
 
-
 
-
Обучение LSTM, как и других RNN, осуществляется с помощью алгоритма '''[[Обратное распространение ошибки во времени]]''' (Backpropagation Through Time, BPTT). Однако ключевое отличие LSTM от классических RNN заключается в том, как градиент распространяется через ячейку памяти. В стандартной RNN градиент при обратном проходе умножается на матрицу весов рекуррентных связей на каждом шаге, что приводит к экспоненциальному затуханию (или росту) при длинных последовательностях<ref name="Bengio1994" />.
 
-
 
-
В LSTM механизм '''Constant Error Carousel (CEC)''' — саморекуррентная связь ячейки с весом, равным единице — обеспечивает прохождение градиента через ячейку без изменений, если вентиль забывания полностью открыт<ref name="Hochreiter1997" /><ref name="Lipton2015" />. Действительно, из уравнения обновления состояния <tex>c_t = f_t \odot c_{t-1} + i_t \odot \tilde{c}t</tex> следует, что в скалярном случае главный путь распространения градиента описывается производной <tex>\partial c_t / \partial c{t-1} = f_t</tex> (это равенство является математическим упрощением, поскольку в общем случае, например при использовании глазковых соединений, <tex>f_t</tex> и <tex>i_t</tex> также зависят от <tex>c_{t-1}</tex>, однако указанная производная описывает основной канал протекания градиента). Если <tex>f_t \approx 1</tex>, градиент сохраняется практически без затухания на протяжении многих шагов<ref name="Lipton2015" />. Вентили, обучаясь, могут динамически регулировать эту производную, открывая или закрывая доступ к потоку ошибок, что даёт сети возможность выбирать, какую информацию сохранять для долгосрочного обучения<ref name="Hochreiter1997" />.
 
-
 
-
Важно отметить, что, хотя CEC решает проблему ''исчезающего'' градиента для состояния ячейки, градиенты, проходящие через вентили и другие части сети, по-прежнему могут затухать. Однако на практике LSTM демонстрирует значительно лучшую способность к обучению долгосрочным зависимостям по сравнению с классическими RNN<ref name="Hochreiter1997" /><ref name="Chung2014">Chung, Gulcehre, Cho, Bengio, 2014</ref>.
 
-
 
-
== Модификации и альтернативы ==
 
-
 
-
=== Глазковые соединения (Peephole Connections) ===
 
-
 
-
В 2000 году Герс и Шмидхубер предложили модификацию LSTM, в которой вентили получают дополнительный вход от состояния ячейки<ref name="Gers2000b" />. Это позволяет вентилям «видеть» текущее состояние ячейки и принимать более точные решения. Например, вентиль выхода, зная состояние ячейки, может лучше определить, какую информацию следует выдавать на выход. Эксперименты показали, что глазковые соединения улучшают способность сети различать тонкие временны́е паттерны<ref name="Gers2000b" /><ref name="Lipton2015" />.
 
-
 
-
=== Управляемый рекуррентный нейрон (GRU) ===
 
-
 
-
В 2014 году Чо и соавторы предложили '''[[Управляемый рекуррентный нейрон|управляемый рекуррентный нейрон]]''' (Gated Recurrent Unit, GRU)<ref name="Cho2014">Cho, van Merriënboer, Gulcehre, et al., 2014</ref> как более простую альтернативу LSTM. GRU объединяет вентиль забывания и вентиль входа в один «вентиль обновления» (update gate) и, кроме того, объединяет состояние ячейки и скрытое состояние<ref name="Cho2014" /><ref name="Lipton2015" />. В результате GRU имеет меньше параметров, чем LSTM, что делает его вычислительно более эффективным и менее склонным к переобучению на малых объёмах данных<ref name="Chung2014" />. На многих задачах GRU демонстрирует производительность, сравнимую с LSTM<ref name="Chung2014" /><ref name="Lipton2015" />, однако LSTM сохраняет преимущество в задачах, требующих очень долгой памяти<ref name="Chung2014" />.
 
-
 
-
=== Другие варианты ===
 
-
 
-
Существуют и другие модификации LSTM, такие как [[Phased LSTM]], вводящая дополнительный временной вентиль для работы с событиями, происходящими нерегулярно<ref name="Neil2016">Neil, Pfeiffer, Liu, 2016</ref>, или [[Bidirectional LSTM]] (двунаправленная LSTM), обрабатывающая последовательность как в прямом, так и в обратном направлении для учёта контекста с обеих сторон<ref name="Lipton2015" />.
 
-
 
-
== LSTM и архитектура Трансформер ==
 
-
 
-
С 2017 года, после появления архитектуры [[Трансформер|Трансформер]]<ref name="Vaswani2017">Vaswani, Shazeer, Parmar, et al., 2017</ref>, LSTM постепенно утратила статус доминирующего подхода в NLP. Трансформеры, основанные на механизме [[Внимание (машинное обучение)|внимания]] (attention), позволяют обрабатывать всю последовательность параллельно, что даёт огромное преимущество в эффективности использования [[Графический процессор|GPU]] и [[Тензорный процессор|TPU]] по сравнению с рекуррентными сетями, которые по своей природе являются последовательными<ref name="Vaswani2017" />. LSTM вынуждена обрабатывать элементы последовательности один за другим, что ограничивает степень распараллеливания<ref name="Lipton2015" />. Хотя существуют оптимизированные библиотеки, такие как [[cuDNN]]<ref name="cudnn_blog">NVIDIA, 2016</ref>, ускоряющие вычисления LSTM на GPU за счёт эффективных реализаций матричных операций (GEMM)<ref name="cudnn_blog" />, фундаментальная последовательная природа остаётся узким местом.
 
-
 
-
Тем не менее, LSTM сохраняет актуальность в ряде областей:
 
-
 
-
Задачи с малыми объёмами данных, где трансформеры склонны к переобучению.
 
-
 
-
Приложения, где важна интерпретируемость и управляемость (например, в финансовых прогнозах).
 
-
 
-
Мобильные и встраиваемые системы с ограниченными вычислительными ресурсами, где LSTM требует меньше памяти и вычислений, чем трансформеры<ref name="Lipton2015" />.
 
-
 
-
Кроме того, многие современные гибридные подходы комбинируют LSTM с механизмами внимания, используя LSTM для локальной обработки последовательности, а внимание — для глобального контекста<ref name="Lipton2015" />.
 
-
 
-
== Вычислительная специфика ==
 
-
 
-
Рекуррентная природа LSTM накладывает серьёзные ограничения на распараллеливание вычислений. В отличие от трансформеров, где все позиции последовательности обрабатываются одновременно, LSTM требует последовательного прохода по временны́м шагам: вычисление <tex>h_t</tex> и <tex>c_t</tex> на шаге <tex>t</tex> зависит от <tex>h_{t-1}</tex> и <tex>c_{t-1}</tex>, полученных на предыдущем шаге. Это означает, что ускорение на GPU достигается в основном за счёт параллельной обработки внутри каждого шага (матричные умножения) и обработки нескольких последовательностей в батче, но не за счёт распараллеливания по времени<ref name="cudnn_blog" />.
 
-
 
-
Библиотека [[cuDNN]] от NVIDIA предлагает высокооптимизированные реализации LSTM, которые используют эффективные [[Блочная матрица|блочные]] вычисления GEMM и специальные техники для минимизации накладных расходов на передачу данных между ядрами GPU<ref name="cudnn_blog" />. В 2016 году в cuDNN 5 были представлены оптимизации для LSTM и GRU, позволившие значительно ускорить обучение и инференс<ref name="cudnn_blog" />. Однако, как отмечают исследователи, даже с этими оптимизациями использование GPU для LSTM часто оказывается менее эффективным, чем для трансформеров, из-за малого количества одновременно выполняемых потоковых мультипроцессоров (SM) при обработке коротких последовательностей<ref name="cudnn_blog" />.
 
-
 
-
== См. также ==
 
-
 
-
[[Рекуррентная нейронная сеть]]
 
-
 
-
[[Исчезновение и взрыв градиента]]
 
-
 
-
[[Управляемый рекуррентный нейрон]]
 
-
 
-
[[Трансформер]]
 
-
 
-
[[Внимание]]
 
-
 
-
== Примечания ==
 
-
 
-
<references />
 
-
== Литература ==
 
-
 
-
{{статья |автор=Hochreiter S., Schmidhuber J. |заглавие=Long Short-Term Memory |издание=Neural Computation |год=1997 |том=9 |номер=8 |страницы=1735–1780 |ссылка= |ref=Hochreiter1997}}
 
-
 
-
{{статья |автор=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 |ссылка= |ref=Bengio1994}}
 
-
 
-
{{статья |автор=Gers F. A., Schmidhuber J., Cummins F. |заглавие=Learning to Forget: Continual Prediction with LSTM |издание=Neural Computation |год=2000 |том=12 |номер=10 |страницы=2451–2471 |ссылка= |ref=Gers2000a}}
 
-
 
-
{{статья |автор=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 |ссылка= |ref=Gers2000b}}
 
-
 
-
{{статья |автор=Lipton Z. C., Berkowitz J., Elkan C. |заглавие=A Critical Review of Recurrent Neural Networks for Sequence Learning |издание=arXiv preprint arXiv:1506.00019 |год=2015 |страницы= |ссылка= |ref=Lipton2015}}
 
-
 
-
{{статья |автор=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 |ссылка= |ref=Cho2014}}
 
-
 
-
{{статья |автор=Chung J., Gulcehre C., Cho K., Bengio Y. |заглавие=Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling |издание=arXiv preprint arXiv:1412.3555 |год=2014 |страницы= |ссылка= |ref=Chung2014}}
 
-
 
-
{{статья |автор=Vaswani A., Shazeer N., Parmar N., et al. |заглавие=Attention Is All You Need |издание=Advances in Neural Information Processing Systems (NIPS 2017) |год=2017 |страницы=5998–6008 |ссылка= |ref=Vaswani2017}}
 
-
 
-
{{статья |автор=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 |страницы= |ссылка= |ref=Neil2016}}
 
-
 
-
{{статья |автор=NVIDIA |заглавие=Optimizing Recurrent Neural Networks in cuDNN 5 |издание=NVIDIA Developer Blog |год=2016 |страницы= |ссылка=https://developer.nvidia.com/blog/optimizing-recurrent-neural-networks-in-cudnn-5/ |ref=cudnn_blog}}
 

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