LSTM(Long Short-Term Memory)

1 LSTM の概要

LSTM(Long Shrot-Term Memory) [Hochreiter and Schmidhuber, 1997] は,再帰型ニューラルネットワーク(RNN: Recurrent Neural Network)の1種である.過去の情報を長期に記憶しておく記憶セル(memory cell)の仕組みにより,RNNの「長期記憶消失」の課題を解決した.

LSTMはRNNの隠れ状態の代わりに,記憶セルブロックを再帰する構造である.記憶セル内では「線形層 + 活性化関数」の出力値を重み付け係数として利用することで,他経路の値の調整度を学習するゲート機構(gating mechanism)を利用する.

LSTMの基本アイデアは「忘れることの学習(Learning to forget)」である.RNN再帰を繰り返していくなかで,長期間経過して不要になってきた記憶を,少しずつ消去していく(= 忘れる)モデルを,ゲート機構により実現している.LSTMの記憶セルは,その内部記憶の状態ベクトルであるセル$\bm{c}_t$に,系列データの「長期記憶」の記憶・忘却度合いを学習できる機構となっている.

2 LSTM の構成

LSTMのブロック構造(記憶セル)
図1 LSTMのブロック構造(記憶セル).黄色のブロックは活性化層による操作を表し,丸型のピンク色ブロックは「要素ごとの演算」を表す.concatは「ベクトル同士の結合」を示す.

LSTM (Long-Short Term Memory) [Hochreiter and Schmidhuber, 1997] は,ゲート機構 (gate mechanism)をRNNに追加することで,記憶の長期伝達を可能にした改良版RNNである(図1).ゲート機構は,それぞれサブニューラルネットとなっており,それぞれの重みとバイアスを学習することで,ゲート入力に対する調整重み値を予測する.名前の通り,ゲートとなって,入っていく量を調整するのが各ゲートの役割である.

LSTMは,記憶セルと呼ばれるブロック構造(図1)を,基本繰り返し単位として用い,RNNのように毎ステップ$t$における回帰を行う.LSTMでは,RNNの短期的な記憶 $\bm{h}_t$に加えて,「短期情報を長く保持するための状態変数」$\bm{c}_t$を,記憶セルの内部メモリとして使用する.この長期記憶である$\bm{c}_t$に,次のステップでも保持したいそれ以前の短期記憶$\bm{h}_t$を,重み付けして記憶する仕組みになっている.また,RNNと同様に$\bm{c}_t$,$\bm{h}_t$の受け渡しをステップ間で行い,毎ステップ$t$では同じ学習済み記憶セルを用いる.

記憶セルでは,3つのゲート機構を利用することで,$\bm{c}_t$へ学習する.3つのゲートのうち,LSTMの中心的な役割を果たすのは,忘却ゲートである.忘却ゲートを用いて「$\bm{c}_t$に対して,現在の入力ベクトル$\bm{t}$と短期記憶$\bm{h}_t$を入力として,各ステップでどのくらい短期記憶を忘れて,どのくらい新たに短期記憶を保持すべきか」を制御することにある.残りの2ゲート(入力ゲート出力ゲート)は,それぞれその際前の新規入力の調整と,その後の出力の調整を担当する.

次節ではそのゲートを用いた「LSTMブロック内の連携の仕組み」について述べていきたい.

3. ゲート間の連携

LSTMの3つのゲート構造
図2 LSTMにおける3つのゲート構造

LSTMのセルブロック内では,3つのゲート(忘却ゲート,入力ゲート,出力ゲート)が,図2のような入出力関係のもとで配置されている[Hochreiter and Schmidhuber, 1997] [Gers et al., 2000]. 3ゲートが,(記憶)セルの「忘れる度合い/ 無視する度合い/保持する度合い」を調整するための係数を出力することにより,セルの情報を保護することができる.このゲート機構間の連携機構により,LSTMでは記憶の長期伝達が可能となっている.

各ステップ$t$では,短期記憶$\bm{h}_{t-1}$と観測ベクトル$\bm{x}_t$を結合したベクトル$[\bm{x}_{t},\bm{h}_{t-1}]$を入力に用いて,3つのゲートが調整係数であるゲート値の予測を行い,セルのgating(忘却,入力,出力)を行う.次の3.1節で,各ゲート機構による短期記憶と長記憶の各更新式について見ていきたい.

3.1 3つのゲート処理

忘却ゲートは,セル状態 $\bm{c}_{t-1}$から,どのくらいの割合だけ情報を廃棄するかを決める$\bm{f}_t$(0~1の値)を出力する:

\begin{equation}
\bm{f}_t = \sigma (\bm{W}_{f}[\bm{x}_{t},\bm{h}_{t-1}]+ \bm{b}_{f})\tag{3.1}
\end{equation}

入力ゲートは,どの新情報をセル(長期記憶)に記憶するかを $\bm{i}_t$として出力する:

\begin{align}
\bm{i}_t &= \sigma ( \bm{W}_{i}[\bm{x}_{t},\bm{h}_{t-1}]+ \bm{b}_{i})\tag{3.2}\\
\tilde{\bm{c}}_t &= \tanh(\bm{W}_{h}[\bm{x}_{t},\bm{h}_{t-1}])\tag{3.3}
\end{align}

また,入力ゲート値の分だけ,セルに貯める新情報として $\tilde{\bm{c}}_t$を作成する ($\tanh$により$\tilde{\bm{c}}_t$は-1から1のあいだの値をとる).

忘却ゲート出力 $\bm{f}_t $と入力ゲート出力 $\bm{i}_t$が予測できたあとに,セルの長期記憶 $\bm{c}_t$を「忘却量 (長期記憶)+入力量(短期記憶の予測値)」の重み付け和として更新する($\circ$はアダマール積で,要素ごとの積):

\begin{equation} \bm{c}_t = \bm{f}_t \circ \bm{c}_{t-1} + \bm{i}_t \circ \tilde{\bm{c}}_t\tag{3.4} \end{equation}

出力ゲートでは,セルから新情報のうち何を出力すべきかの重み係数を決定する.出力ゲートの出力値 $\bm{o}_t$を用いて,次フレームの $\bm{h}_t$の予測を行う:

\begin{align}
\bm{o}_t &= \sigma (\bm{W}_{o}[\bm{x}_{t},\bm{h}_{t-1}]+\bm{b}_{o})\tag{3.6}\\
\bm{h}_t &= \bm{o}_t \circ \tanh(\bm{c}_t)\tag{3.6}
\end{align}

3.2 LSTM のブロック処理の全体像

3.1節は,天下り式にLSTMの各式と,ブロック図(記憶セル)を提示しただけであったので,まだ記憶セルの処理が今ひとつわかりづらいはずである.よって,3.2節では,図1のLSTMのブロック内の処理を,ゲート構造の連携に焦点をあてて整理した図(図3)を用いて俯瞰することにより,記憶セルでの処理の全体像を理解しやすくしたい.

LSTMの3つのゲート機構は,長期記憶を更新する際に,どういうタイミング$t$にどのくらいのバランスで短期記憶と長期記憶をインタクションさせるかを学習するのであった(式 3.4).この機構のおかげで,短期記憶しか保持できないRNNと比べて,LSTMでは,やや長い系列の変化も,「2つの潜在変数(長期記憶 $\bm{c}_t$と短期記憶 $\bm{h}_t$) + 3つのゲート関数」を通じて「記憶の忘れ方と覚え方」を学習できる.

LSTMブロック処理の全体像
図3 LSTMブロック処理の全体像.長期記憶であるセルの内部状態$\bm{c}_t$について,長期記憶をどれくらい忘れるかと,短期記憶を新たにどれくらい覚えるかを,3つのゲートの連携により計算する.

図3は,LSTMを用いた応用の論文でよく出てきた「ゲート3つの関係性が見えやすいように書き直したLSTMブロックの図」である.この図は,中央の一直線にゲートを配置する描き方なので,3つのゲートの実施タイミングと働きを読者が理解しやすいように,各要素が図中に配置されている.

図3の中央の円ががセル状態を表し,セル状態を更新するLSTMの中心機構である.これは図3中下部にもある式(3.4)のように,以下の3つのゲート処理の連携により達成されている:

  • 入力ゲートで調整した入力値の$\bm{i}_t \circ \tilde{\bm{c}_t}$は,長期記憶と短期記憶をどのくらいセルに保持するかの覚える記憶である.
  • 忘却ゲート出力で調整した$\bm{f}_t \circ \tilde{\bm{c}}_{t-1}$は,前ステップまで溜め込んでおいた長期記憶を,どのくらいステップ$t$で保持して,残りを破棄するかを調整する忘れる記憶である.
  • 上記2つを加算した,新たなセル状態$\bm{c}_t$を,出力ゲートで出力値を調整したのち,次のステップ$t-1$に受け渡す.

以上が,3つのゲートを用いたセル状態の忘却・記憶の仕組みである.

ちなみに,図1の描き方によるLTSMブロック図については,2015年に公開されたcolah’s blogの記事「Understanding LSTMs」による美しい図による詳細な説明が有名である.その後は,この記事の図示の方式に習った LSTMの図解がとても多い(このブログでも同じ方式の描き方で著者も作図した).ただし,この2015年当時は詳細なLSTMの説明の需要が高かったものの,今となってはLSTMは当時ほどハードルが高い技術ではなく,標準知識や標準APIとなっている.従って,このcolah’s blogの記事のレベルほどに内容をつぶさに知る必要があるかは微妙なところである.そもそも2018年以降は(NLPだと特に) LSTMよりTransformerをよく使う時代になっている.

3.3 LSTM の難点

RNNを改善して,より長い系列の変化も学習できるようになったLSTMは,3次AIブームの中で注目を集め,NLPを中心にたくさん応用されることになった.

しかし,NLPや音声認識に機械翻訳などで応用される中で,以下のような難点もあった:

  • ゲート機構を導入したことでブロック内分岐を多く導入した結果,逆伝播時に大量のパスを微分値が通ることになってしまった.
  • 学習が遅く,安定性にも書いている.
  • RNN全般に言えることだが,CNNなど他のディープモデルと異なり,転移学習ができない.

これらの課題を克服するために,アテンション機構,seq2seq with attention や Transformerが登場していくこととなる.

4 LSTM の応用

言語テキストや音声系列に対してLSTMを学習することで,(一世代前の技術を使うよりも簡単に)系列認識や系列生成の研究が行えるようになった.

AlexNetの登場でコンピュータビジョン業界がCNNの研究中心に移行した始めた頃,第3次AIブームに突入したことも手伝って,LSTMの積極的な各種応用が,ビジョン以外の「可変系列データ」である対象として行われた.(現在はLSTMの代わりにTransformerを使用した応用が中心的となっている

たとえば,音声認識(4.1),テキスト生成(4.2)や画像キャプション生成,古くからのNLP処理のLSTM版などが提案された.

5 まとめ

この記事ではLSTMについてその仕組みについて紹介した.逆に応用については4節で少し触れた程度である.

LSTMは3つのゲート機構を用いることにより,短期記憶を途中で忘却しないように保持する仕組みを持つことで,系列長が長いシーケンスデータセットにおける長期的な変化も学習できるようになった.

かつてはNLP分野を中心に,LSTMとその簡略版のGRUを系列モデリング部分に用いることが多かった.しかし,CNNの発展やTransformerの登場に伴い,音声認識やTTS(text-to-speech)にコンピュータビジョンなどでも各種系列データではTransformerの使用が中心的になっており,それらの画像,テキスト,音などの高次元特徴を用いる主要パターン認識分野全般では,RNN(LSTM,GRU)はあまり使われなくなってきている.(特にNLPはHuggingFaceの登場が大きかった)

References

  • [Hochreiter and Schmidhuber, 1997] S. Hochreiter and J. Schmidhuber. “Long short-term memory.” Neural computation 9.8 (1997): 1735-1780.
  • [Gers et al., 2000] F. A. Gers, J. Schmidhuber, and F. Cummins. Learning to forget: Continual prediction with LSTM. Neural Computation, 2000.

参照外部リンク

参考書籍

関連記事