LSTM(Long Short Term Memory)とは



機械学習

分類(classification)

ニューラルネットワーク(NN)

クラスタリング

強化学習

敵対的生成ネットワーク

公開日:2021/8/29

 ・In English
前提知識
 ・RNN
 ・python


■LSTMとは

LSTMとRNNはどちらも時系列で意味のあるデータに対して、現在のデータから将来の値を推測するニューラルネットワークですが、 LSTMはRNNよりも長い時系列データに対する予測が可能です。RNNとLSTMの比較は以下。



■LSTMの概要

LSTMの中身の概要について説明します。LSTMには過去の情報を記憶するセルCtというものが存在し、このセルと出力ゲート(output gate)によって出力が決まります。 またセルは、忘却ゲート層(forget gate layer)、入力ゲート(input gate layer)によって決まり、忘却ゲートによって過去の値をどれくらい消去するかを決定できます。



<忘却ゲート>
忘却ゲートはシグモイド関数となっており、1になるほど過去の記憶を保持して、0になるほど過去の記憶を消去します。従って、現在の値に強く相関を持たせたい場合は保持、 過去の値との関連性が薄い場合は消去する様に学習されます。



<入力ゲート>
入力ゲートでセルの値を更新します。忘却ゲートはセルの値を減衰させただけなので、現在の値は反映されていません。一見複雑な式ですが、以下の様な加重移動平均の式をイメージすれば分かりやすいと思います。



<出力ゲート>
セルCと出力ゲート値を掛け合わせて最終的な出力を決定します。



■LSTMのpythonによる実装

以下の様なバネの減衰振動を表したデータから将来の動きを予測します。LSTMは長期の予測が可能であるとのことなので、予測する期間を長めに設定します。



<必要なファイル、環境>

 ・python : 3.9.5 , pytorch:1.8.1
 ・テストデータ、訓練データ:lstm_data.zip
 ・プログラムファイル:lstm.zip

<シミュレーション結果> pytorchのLSTMの関数はこちらを使用。
結果は以下のとおり。中間層のノードを128個、エポック数は50,000回です。同じデータに対して、RNNによる結果も併せて載せております。 今回の場合おいてLSTMの予測精度は、tanhを使用したRNNよりも僅かに良く、reluを使用したRNNよりも悪い結果となりました。 中間層の数などを変えたらLSTMのほうが良い結果が出る可能性がありますが、必ずしもLSTMが優れているという訳ではないのかもしれません。



<補足>
上記プログラムにおいて、以下の通り変更すればRNNを動かすことができます。

self.rnn = nn.RNN(in_size, hidden_size, batch_first=True)










サブチャンネルあります。⇒ 何かのお役に立てればと

関連記事一覧



機械学習

分類(classification)

ニューラルネットワーク(NN)

クラスタリング

強化学習

敵対的生成ネットワーク