Долгая краткосрочная память

10.10.2022


Длинная цепь элементов краткосрочной памяти (англ. Long short-term memory; LSTM) — разновидность архитектуры рекуррентных нейронных сетей, предложенная в 1997 году Зеппом Хохрайтером и Юргеном Шмидхубером. Как и большинство рекуррентных нейронных сетей, LSTM-сеть является универсальной в том смысле, что при достаточном числе элементов сети она может выполнить любое вычисление, на которое способен обычный компьютер, для чего необходима соответствующая матрица весов, которая может рассматриваться как программа. В отличие от традиционных рекуррентных нейронных сетей, LSTM-сеть хорошо приспособлена к обучению на задачах классификации, обработки и прогнозирования временных рядов в случаях, когда важные события разделены временными лагами с неопределённой продолжительностью и границами. Относительная невосприимчивость к длительности временных разрывов даёт LSTM преимущество по отношению к альтернативным рекуррентным нейронным сетям, скрытым марковским моделям и другим методам обучения для последовательностей в различных сферах применения. Из множества достижений LSTM-сетей можно выделить наилучшие результаты в распознавании несегментированного слитного рукописного текста, и победу в 2009 году на соревнованиях по распознаванию рукописного текста (ICDAR). LSTM-сети также используются в задачах распознавания речи, например LSTM-сеть была основным компонентом сети, которая в 2013 году достигла рекордного порога ошибки в 17,7 % в задаче распознавания фонем на классическом корпусе естественной речи TIMIT. По состоянию на 2016 год ведущие технологические компании, включая Google, Apple, Microsoft и Baidu, используют LSTM-сети в качестве фундаментального компонента новых продуктов.

Архитектура

LSTM-сеть — это искусственная нейронная сеть, содержащая LSTM-модули вместо или в дополнение к другим сетевым модулям. LSTM-модуль — это рекуррентный модуль сети, способный запоминать значения как на короткие, так и на длинные промежутки времени. Ключом к данной возможности является то, что LSTM-модуль не использует функцию активации внутри своих рекуррентных компонентов. Таким образом, хранимое значение не размывается во времени, и градиент или штраф не исчезает при использовании метода обратного распространения ошибки во времени (англ. Backpropagation through time) при обучении искусственной нейронной сети.

LSTM-модули часто группируются в «блоки», содержащие различные LSTM-модули. Подобное устройство характерно для «глубоких» многослойных нейронных сетей и способствует выполнению параллельных вычислений с применением соответствующего оборудования. В формулах ниже каждая переменная, записанная строчным курсивом, обозначает вектор размерности равной числу LSTM-модулей в блоке.

LSTM-блоки содержат три или четыре «вентиля», которые используются для контроля потоков информации на входах и на выходах памяти данных блоков. Эти вентили реализованы в виде логистической функции для вычисления значения в диапазоне [0; 1]. Умножение на это значение используется для частичного допуска или запрещения потока информации внутрь и наружу памяти. Например, «входной вентиль» контролирует меру вхождения нового значения в память, а «вентиль забывания» контролирует меру сохранения значения в памяти. «Выходной вентиль» контролирует меру того, в какой степени значение, находящееся в памяти, используется при расчёте выходной функции активации для блока. (В некоторых реализациях входной вентиль и вентиль забывания воплощаются в виде единого вентиля. Идея заключается в том, что старое значение следует забывать тогда, когда появится новое значение, достойное запоминания).

Веса в LSTM-блоке ( W {displaystyle W} и U {displaystyle U} ) используются для задания направления оперирования вентилей. Эти веса определены для значений, которые подаются в блок (включая x t {displaystyle x_{t}} и выход с предыдущего временного шага h t − 1 {displaystyle h_{t-1}} ) для каждого из вентилей. Таким образом, LSTM-блок определяет, как распоряжаться своей памятью как функцией этих значений, и тренировка весов позволяет LSTM-блоку выучить функцию, минимизирующую потери. LSTM-блоки обычно тренируют при помощи метода обратного распространения ошибки во времени.

Традиционная LSTM

Традиционная LSTM с вентилями забывания c 0 = 0 {displaystyle c_{0}=0} и h 0 = 0 {displaystyle h_{0}=0} ( ∘ {displaystyle circ } обозначает произведение Адамара):

f t = σ g ( W f x t + U f h t − 1 + b f ) i t = σ g ( W i x t + U i h t − 1 + b i ) o t = σ g ( W o x t + U o h t − 1 + b o ) c t = f t ∘ c t − 1 + i t ∘ σ c ( W c x t + U c h t − 1 + b c ) h t = o t ∘ σ h ( c t ) {displaystyle {egin{aligned}f_{t}&=sigma _{g}(W_{f}x_{t}+U_{f}h_{t-1}+b_{f})i_{t}&=sigma _{g}(W_{i}x_{t}+U_{i}h_{t-1}+b_{i})o_{t}&=sigma _{g}(W_{o}x_{t}+U_{o}h_{t-1}+b_{o})c_{t}&=f_{t}circ c_{t-1}+i_{t}circ sigma _{c}(W_{c}x_{t}+U_{c}h_{t-1}+b_{c})h_{t}&=o_{t}circ sigma _{h}(c_{t})end{aligned}}}

Переменные:

  • x t {displaystyle x_{t}} — входной вектор,
  • h t {displaystyle h_{t}} — выходной вектор,
  • c t {displaystyle c_{t}} — вектор состояний,
  • W {displaystyle W} , U {displaystyle U} и b {displaystyle b} — матрицы параметров и вектор,
  • f t {displaystyle f_{t}} , i t {displaystyle i_{t}} и o t {displaystyle o_{t}} — векторы вентилей,
    • f t {displaystyle f_{t}} — вектор вентиля забывания, вес запоминания старой информации,
    • i t {displaystyle i_{t}} — вектор входного вентиля, вес получения новой информации,
    • o t {displaystyle o_{t}} — вектор выходного вентиля, кандидат на выход.

Функции активации:

  • σ g {displaystyle sigma _{g}} : на основе сигмоиды.
  • σ c {displaystyle sigma _{c}} : на основе гиперболического тангенса.
  • σ h {displaystyle sigma _{h}} : на основе гиперболического тангенса, но в работе о глазках (смотровых отверстиях) для LSTM предполагается, что σ h ( x ) = x {displaystyle sigma _{h}(x)=x} .

LSTM с «глазками»

Глазочная LSTM с вентилями забывания h t − 1 {displaystyle h_{t-1}} не используется, c t − 1 {displaystyle c_{t-1}} используется в качестве замены в большинстве мест:

f t = σ g ( W f x t + U f c t − 1 + b f ) i t = σ g ( W i x t + U i c t − 1 + b i ) o t = σ g ( W o x t + U o c t − 1 + b o ) c t = f t ∘ c t − 1 + i t ∘ σ c ( W c x t + b c ) h t = o t ∘ σ h ( c t ) {displaystyle {egin{aligned}f_{t}&=sigma _{g}(W_{f}x_{t}+U_{f}c_{t-1}+b_{f})i_{t}&=sigma _{g}(W_{i}x_{t}+U_{i}c_{t-1}+b_{i})o_{t}&=sigma _{g}(W_{o}x_{t}+U_{o}c_{t-1}+b_{o})c_{t}&=f_{t}circ c_{t-1}+i_{t}circ sigma _{c}(W_{c}x_{t}+b_{c})h_{t}&=o_{t}circ sigma _{h}(c_{t})end{aligned}}}

Свёрточная LSTM

Свёрточная LSTM ( ∗ {displaystyle *} обозначает оператор свёртки):

f t = σ g ( W f ∗ x t + U f ∗ h t − 1 + V f ∘ c t − 1 + b f ) i t = σ g ( W i ∗ x t + U i ∗ h t − 1 + V i ∘ c t − 1 + b i ) o t = σ g ( W o ∗ x t + U o ∗ h t − 1 + V o ∘ c t − 1 + b o ) c t = f t ∘ c t − 1 + i t ∘ σ c ( W c ∗ x t + U c ∗ h t − 1 + b c ) h t = o t ∘ σ h ( c t ) {displaystyle {egin{aligned}f_{t}&=sigma _{g}(W_{f}*x_{t}+U_{f}*h_{t-1}+V_{f}circ c_{t-1}+b_{f})i_{t}&=sigma _{g}(W_{i}*x_{t}+U_{i}*h_{t-1}+V_{i}circ c_{t-1}+b_{i})o_{t}&=sigma _{g}(W_{o}*x_{t}+U_{o}*h_{t-1}+V_{o}circ c_{t-1}+b_{o})c_{t}&=f_{t}circ c_{t-1}+i_{t}circ sigma _{c}(W_{c}*x_{t}+U_{c}*h_{t-1}+b_{c})h_{t}&=o_{t}circ sigma _{h}(c_{t})end{aligned}}}

Тренировка

Для минимизации общей ошибки LSTM на всём множестве тренировочных последовательностей, итеративный градиентный спуск такой как метод обратного распространения ошибки развёрнутый во времени может быть использован для изменения каждого из весов пропорционально его производной в зависимости от величины ошибки. Главной проблемой градиентного спуска для стандартных рекуррентных нейронных сетей является то, что градиенты ошибок уменьшаются с экспоненциальной скоростью по мере увеличения временной задержки между важными событиями, что было выявлено в 1991. С LSTM-блоками, тем не менее, когда величины ошибки распространяются в обратном направлении от выходного слоя, ошибка оказывается заперта в памяти блока. Это называют «каруселью ошибок», которая непрерывно «скармливает» ошибку обратно каждому из вентилей, пока они не будут натренированы отбрасывать значение. Таким образом, регулярное обратное распространение ошибки эффективно для тренировки LSTM-блока для запоминания значений на очень длительные временные промежутки.

LSTM также можно тренировать при помощи комбинации эволюционного алгоритма для весов в скрытых слоях и псевдообратных матриц или метода опорных векторов для весов в выходном слое. В обучении с подкреплением LSTM можно тренировать при помощи непосредственного поиска в пространстве стратегий, эволюционных стратегий или генетических алгоритмов.

Применения

Описаны примеры применения LSTM: в робототехнике, для анализа временных рядов, для распознавания речи, в ритмическом обучении, для генерации музыкальных композиций, в грамматическом обучении (англ. artificial grammar learning), в задачах распознавания рукописного ввода, для распознавания человеческой активности, в задаче выявления гомологичных белков.