SEQUENCE / LESSON 16

前の情報を次へ渡すRNN

1個前の状態を次へ渡し、数の並びを読む仕組みを知ろう。

図から学ぶ
前の情報を次へ渡すRNNを表すキャラクターと学習内容のイラスト
TODAY'S GOAL

この回でつかむこと

窓の作り方とRNNの入力形状を説明できる。

ことばの窓
01 / SEE THE IDEA

前の情報を次へ渡すRNNって何だろう?

RNN(Recurrent Neural Network、再帰型ニューラルネットワーク)は、前の時刻から受け取った状態を次の計算へ渡します。連続した数を3日分ずつ一組にし、その次の日の値を予測する練習ができます。

あおい

今日の気温だけで明日を決めるより、昨日も見たいな。

AI先生

その発想が時系列の入口なんだよ。RNNは前の情報を次へ渡すんだ。

はる

入力の形は、件数・時刻数・特徴数の順に確かめます。

窓をずらして次を予測。18・19・20の次は21。窓を1日ずらす。19・20・21の次は22。
図16 窓をずらして次を予測。18・19・20の次は21。窓を1日ずらす。19・20・21の次は22。

あおい 窓を1日ずらすと、次の予測問題ができるんだ!

図を読むと

連続する値を3日分ずつ一組にし、その次の日の値と組にする。 RNN(Recurrent Neural Network、再帰型ニューラルネットワーク)は、前の時刻から受け取った状態を次の計算へ渡します。連続した数を3日分ずつ一組にし、その次の日の値を予測する練習ができます。

小さなコードで確かめるまず結果を予想しよう
import torch
from torch import nn
rnn = nn.RNN(input_size=1,hidden_size=4,batch_first=True)
x = torch.tensor([[[18.],[19.],[20.]]])
out,state = rnn(x)
print(out.shape,state.shape)
実行結果(1,3,4) と (1,1,4)

なぜそうなる? 1件×3時刻の入力に対し、各時刻の状態と最後の状態が得られます。

02 / GO ONE STEP FURTHER

窓をずらす

3日分を入力し、4日目を正解とします。窓を1日ずらすと次の学習例ができます。

values = torch.tensor([18.,19.,20.,21.,22.])
windows = torch.stack([values[i:i+3] for i in range(2)])
answers = values[3:]
print(windows,answers)
実行結果[18,19,20]→21、[19,20,21]→22

ここに注目 未来の値を入力へ先取りせず、次の値だけを答えにします。

03 / YOUR TURN

予想して、理由を話そう

答えを選んで、説明を確かめよう。外れても発見が一つ増えるよ。

[18,19,20]の次を予測する窓で、答えにする値は?

答えを選ぶと理由が表示されます。

04 / TRY ON COLAB

Colabで試してみよう

コードの実行はColaboratoryの実行環境で行います。まずノートブックを保存し、Colabで「ファイル → ノートブックをアップロード」から開いてください。上から順に実行し、最後に値を変えてみましょう。

保存ボタンを押しても画面は切り替わりません。通常はブラウザの「ダウンロード」フォルダに .ipynb が保存されます。見つからない場合はダウンロード履歴を確認してください。Colabの実習は小さな例から始められます。

COFFEE BREAK

身近な技術とつなげてみよう

AI先生

AI先生:昨日のメールの続きは、昨日を知らないと読み取りにくいよね。順番そのものが情報なんだ。

KEY TERMS

この回の重要な用語

本文で出会った言葉を、ここで意味と一緒に振り返ろう。上の「ことばの窓」からも説明を開けるよ。

RNN
Recurrent Neural Network。前の時刻の状態を次へ渡すモデルです。
時系列
時間の順番が意味を持つデータです。
シーケンス
順番のある一続きのデータです。
hidden state
RNNが次の時刻へ渡す内部の状態です。