# RNNの派生型LSTMについてわかりやすく解説！時系列データをPythonで分析していこう！

> 当サイト【スタビジ】の本記事では、時系列・自然言語処理領域において利用されてきたRNNの派生型モデル「LSTM」について解説していきたいと思います！最終的には時系列シミュレーションデータを発生させてPythonでモデル構築していきます。

- URL: https://toukei-lab.com/lstm
- 公開: 2023.10.24 / 更新: 2025.08.18
- サイト: スタビジ（https://toukei-lab.com）

:::talk{who="umatan"}
当サイト【スタビジ】の本記事では、時系列・自然言語処理領域において利用されてきたRNNの派生型モデル「LSTM」について解説していきたいと思います！最終的には時系列シミュレーションデータを発生させてPythonでモデル構築していきます。
:::

こんにちは！データサイエンティストのウマたん([@statistics1012](https://twitter.com/statistics1012?lang=ja))です！

[ディープラーニング](/deep-learning)の日進月歩の進化により、<mark>数年前と比較して飛躍的に言語処理能力が上がっています。</mark>

今でこそ、OpenAIの[GPTモデル](/gpt)やGoogleの[PaLM](/google-palm)やMetaの[LLaMA](/llama)など様々な言語モデルが登場し数年前まで考えられなかった高精度で言語を扱えるようになっていますが、この進化の過程で様々な研究がされてきました。

これまでの進化の過程を理解することは最新のAIを理解することにも繋がります。

<https://toukei-lab.com/ai-term>

この記事では、そんな進化の過程の中でも有名なLSTMについて解説していきたいと思います。

以下のYoutube動画でも解説していますので合わせてチェックしてみてください！

::youtube{#WhTlqxBjfIA}

<https://toukei-lab.com/relu>

## LSTMとは

LSTMは「**Long short term memory**」の略で、その名の通り長い期間や短い期間の記憶をいい感じに保持してくれる手法で[時系列処理](/%e6%99%82%e7%b3%bb%e5%88%97%e3%83%87%e3%83%bc%e3%82%bf%e5%88%86%e6%9e%90)や[自然言語処理領域](/natural-language-python)で利用されてきた[RNN](/rnn)の派生手法になります。

LSTMは1997年にS. Hochreiter 、 J. Schmidhuberによって提案されました。

LSTMは端的に言うと<mark>RNNが持っていた勾配消失問題を解決した手法</mark>。

では、勾配消失問題とはどんな問題なのでしょうか？

そのためにLSTMの元となるRNNの問題を見ていきましょう！

RNNは以下のように層を連ねて時系列データや自然言語処理の文脈の意図を把握していく構造のため、多層になる傾向があります。

![rnnの概念](/wp-content/uploads/2020/01/rnn.jpg)

そしてこのようなディープラーニング構造のパラメータ最適解を求める上で、<mark>微分を行い勾配を計算して重みを更新していくのですが、この勾配が0に近くなってしまうと更新幅が小さくなり最適解にたどり着かなくなる問題、これが勾配消失問題なのです！</mark>

詳しい説明は省きますが、勾配を計算する上で[誤差逆伝播法](/backpropagation)というアプローチを用いて複数回微分を重ねて行うのですが、この際に勾配がどんどん小さくなり勾配消失問題が起きてしまうのです！

<mark>この問題のせいでディープラーニングを多層にすることが難しく時系列データの長期記憶を保持出来ない状態になっていました。</mark>

<mark>そんな中登場したのが、LSTMなのです！</mark>

:::talk{who="umatan"}
実は[ReLU関数](/relu)という関数を活性化関数として使えば勾配消失問題は起きにくいので、現在はReLU関数を使うという手があるよ！
:::

LSTMでは、長期の記憶と短期の記憶を保持しつつ、いい感じに過去の不要な記憶を忘却しつつ新しい記憶をインプットできるアーキテクチャになっています。

ザッと数式を使わずイメージだけ図にすると以下のような感じになります。

![LSTM](/wp-content/uploads/2023/10/82.jpg)

長期記憶と短期記憶を保持しつつ、長期記憶から不要な記憶を忘却させ新たな記憶をインプットして次に渡していくようなアーキテクチャになっています。

これを実際に数式を使って図で表現しているのが以下です。

![LSTM](/wp-content/uploads/2023/10/LSTM.jpg)

（出典：[LSTM（Long Short-Term Memory）を活用した ダム流入量予測に関する研究](https://www.yachiyo-eng.co.jp/riips/assets/img/common/pdf/R2020001.pdf)）

大まかな構造自体は、ざっくりイメージの図と同様の構造になっていることが分かると思います。

<mark>ちょっとわかりにくいのですが、最初の記憶忘却の部分は</mark>

![LSTM](/wp-content/uploads/2023/10/LSTM2.jpg)

<mark>以下のように特定の関数と長期記憶をかけ合わせる（アダマール積）によって忘却を実現しています。</mark>

$$
\begin{darray}{rcllll}
f_{t} × C_{t-1}
\end{darray}
$$

アダマール積では、行列に対して要素ごとに積を取ります。

## LSTMをPythonで実装してみよう！

ざっくりLSTMの構造が分かったところで、LSTMをPythonで実装していきましょう！

今回はサンプルとして時系列データをシミュレーション発生させて、それをLSTMで予測していくような処理を作っていきます。

コード全体は以下です。

```python
import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense

# データ生成 (サンプルのため、sin関数を用います)
timesteps = 10
data = np.sin(np.linspace(0, 20 * np.pi, 1000))

# 入力データと正解データの作成
X = []
Y = []
for i in range(len(y) - timesteps):
    X.append(data[i:i+timesteps])
    Y.append(data[i+timesteps])

X = np.array(X).reshape(-1, timesteps, 1)
Y = np.array(Y).reshape(-1, 1)

# モデルの定義
model = Sequential()
model.add(LSTM(50, input_shape=(timesteps, 1), return_sequences=True))
model.add(LSTM(50))
model.add(Dense(1))

model.compile(optimizer='adam', loss='mean_squared_error')

# モデルの学習
model.fit(X, Y, epochs=50, batch_size=32)

# 予測
test_input = np.array([np.sin(np.linspace(20*np.pi, 21*np.pi, timesteps))]).reshape(-1, timesteps, 1)
predicted_output = model.predict(test_input)

print("予測結果:", predicted_output)
```

具体的に処理を見ていきましょう！

まず以下の部分でシミュレーションデータを発生させています。データは1000個のSIN関数の系列データでを発生させています。

```python
# データ生成 (サンプルのため、sin関数を用います)
timesteps = 10
data = np.sin(np.linspace(0, 20 * np.pi, 1000))

# 入力データと正解データの作成
X = []
Y = []
for i in range(len(y) - timesteps):
    X.append(data[i:i+timesteps])
    Y.append(data[i+timesteps])

X = np.array(X).reshape(-1, timesteps, 1)
Y = np.array(Y).reshape(-1, 1)
```

それをXというリストに10個ずつのウィンドウでデータを格納し、Yというリストに1個ずつ予測対象を格納しています。

t-10,・・・t-1期のデータをもとにt期を予測する構造になっています。

その後の処理でLSTMのアーキテクチャを用いたディープラーニングモデル構築して学習し予測しています。

```python
# モデルの定義
model = Sequential()
model.add(LSTM(50, input_shape=(timesteps, 1), return_sequences=True))
model.add(LSTM(50))
model.add(Dense(1))

model.compile(optimizer='adam', loss='mean_squared_error')

# モデルの学習
model.fit(X, Y, epochs=50, batch_size=32)

# 予測
test_input = np.array([np.sin(np.linspace(20*np.pi, 21*np.pi, timesteps))]).reshape(-1, timesteps, 1)
predicted_output = model.predict(test_input)

print("予測結果:", predicted_output)
```

予測結果は0.805となりました！非常に簡単に実装できることが分かったと思います！

## LSTM　まとめ

ここまでご覧いただきありがとうございました！

本記事では、LSTMについて簡単に解説してきました！

LSTMの登場によってRNNの問題をいくつか克服したのですが、<mark>自然言語処理の世界において現在では大量のパラメータを持つ事前学習モデルである[大規模言語モデル](/llm)が主流になっています。</mark>

現在は大量のデータ・パラメータと資本力で殴り合う世界になってきてしまっていますが、過去にはこのようなアーキテクチャの改造によるブレークスルーが合ったこと覚えておくとよいでしょう！

さらに色んなディープラーニングの手法を詳しく知りたい方は以下の記事を参考にしてみてください！

:::related
・[RNN](/rnn)\
・[AlexNet](/alexnet)\
・[ResNet](/resnet)\
・[Transformer](/transformer)
:::

LSTMを含む3種のAIモデルによる需要予測についての記事はこちら↓↓

<https://toukei-lab.com/demand-forecast>

また、より詳しくディープラーニングや最近の大規模言語モデルについて知りたい方は当メディアが運営する教育サービス[「スタアカ（スタビジアカデミー）」](https://toukei-lab.com/achademy/)の講座をチェックしてみてください。

:::box
**[スタアカ「大規模言語モデル（LLM）・生成系AIコース」](https://toukei-lab.com/achademy/courses/llm/)\
[スタアカ「08.ディープラーニングコース」](https://toukei-lab.com/achademy/courses/deep-learning/)**
:::

:::box
**AIデータサイエンス特化スクール「スタアカ」**

![スタアカ（スタビジアカデミー）のトップページ](/wp-content/uploads/2026/10/achademy-top.jpg)
:::

<table class="table">
<tbody>
<tr>
<th>【価格】</th>
<td>ライトプラン：1,280円/月（全コースが受講し放題）<br>
プレミアムプラン：129,800円（通常149,800円・買い切り）</td>
</tr>
<tr>
<th>【オススメ度】</th>
<td><span class="stars" role="img" aria-label="5点中5点" data-value="5"></span></td>
</tr>
<tr>
<th>【サポート体制】</th>
<td><span class="stars" role="img" aria-label="5点中4点" data-value="4"></span></td>
</tr>
<tr>
<th>【受講形式】</th>
<td>オンライン形式</td>
</tr>
<tr>
<th>【学習範囲】</th>
<td>統計学・機械学習・ディープラーニングを網羅的に学ぶ<br>
生成AI（LLM・RAG・プロンプトエンジニアリング）を学ぶ<br>
SQLとPythonを組み合わせて実データを使った様々なワークを行う<br>
実践的なビジネスフレームワークを学ぶ<br>
マーケティングの実行プラン策定</td>
</tr>
</tbody>
</table>

データサイエンティストとしての自分の経験をふまえてエッセンスを詰め込んだのがこちらのスタビジアカデミー、略して「[スタアカ](https://toukei-lab.com/achademy/)」！！

月額1,280円のライトプランで、統計学から機械学習・生成AIまで全コースが受講し放題です！

<mark>プレミアムプランでは、24時間以内の質問対応と現役データサイエンティストとの1on1（30分×4回）を実施します！</mark>

カリキュラム自体は、他のスクールと比較して圧倒的に良い自信があるのでぜひ受講してみてください！

他のスクールのカリキュラムはPythonでの機械学習実装だけに焦点が当たっているものが多く、実務に即した内容になっていないものが多いです。

<mark>そんな課題感に対して、実務で使うことの多いSQLや機械学習のビジネス導入プロセスの理解なども合わせて学べるボリューム満点のコース</mark>になっています！

Pythonが初めての人でも学べるようなカリキュラムにしておりますので是非チェックしてみてください！

ウォルマートのデータを使って商品の予測分析をしたり、実務で使うことの多いGoogleプロダクトのBigQueryを使って投球分析をしたり、データサイエンティストに必要なビジネス・マーケティングの基礎を学んでマーケティングプランを作ってもらったりする盛りだくさんの内容になってます！

:::box
**・BigQuery上でSQL、Google Colab上でPythonを使い野球の投球分析**\
**・世界最大手小売企業のウォルマートの実データを用いた需要予測**\
**・ビジネス・マーケティングの基礎を学んで実際の企業を題材にしたマーケティングプランの策定**\
**・生成AIのAPIを使ってチャットボットやAIエージェントを作る**
:::

::button[スタアカの受講はこちら]{href="https://toukei-lab.com/achademy/" note="＼今すぐ試す／"}