Python Colaboratory
時系列のためのディ-プラ-ニング
何とか Colab が使えるところまできました。
ここからは、時系列デ-タを使う機械学習について考えていきます。
時系列とは気温、株価、売上高、電力消費量など一定間隔の計測によって得られるデ-タのことです。
時系列関連のタスクのなかで最も一般的なのが予測です。
ここでは、
リカレント(再帰型)ニュ-ラルネットワ-ク(Recurrent Neural Network : RNN)
を使用して予測をしていきます。
RNN を理解する
RNN とはなんぞや訳がわからないというのが、勉強し始めた時の印象でした。
完璧にわかったかと言われると自信がないのですが、私が理解できたことを書いてみました。
下図に、RNN の単純な構造を書いてみました。
ベクトル X(t) を入力として受取り、ある時刻 (t) にベクトル Y(t) を出力します。
簡単な例を上げて具体的に説明します。
ウィンドウ(シ-ケンス)を3として入力を3個ずつに区切ります。
t0 に x0
t1 に x1
t2 に x2
を入力として受取り ⇒ X(t)
t3 に x3
を出力 ⇒ Y(t)
したとします。
中央の円はネットワ-クの隠れ層(Dense)を表します。
入力重み行列を Win
出力重み行列を Wout
(Wout は活性化関数と呼ばれます)
とします。
そして、ベクトル Z(t) と呼ぶ隠れ層は一つしかないと仮定します。
このとき、
Z(t) = X(t) × Win
Y(t) = Z(t) × Wout
となりますので、
Y(t) = (X(t) × Win) × Wout
となります。
単純化するため
Win, Wout 行列は
のようにします。
とすると
Y(t)
= (x0×a0 + x1×a1 + x2×a2) × Wout
= x0×a0 + x1×a1 + x2×a2
となります。
a0, a1, a2 の値を求めてみましょう。
x0 = 0.5
x1 = 1
x2 = 2
x3 = 3
とします。
3 = 0.5 * a0 + 1 * a1 + 2 * a2
となります。
仮に、Win を Win-z ととし、その内容を
a0 = 0.2
a1 = 0.3
a2 = 0.5
とします。
このとき
Y(t) = 0.5 * a0 + 1 * a1 + 2 * a2
= 0.1 + 0.3 + 1
= 1.4
となります。
本当は 3 になって欲しいのでその微分値(傾き)は
δΔ = 3 / 1.4
= 2.143
各重み Win-z にこの δΔ をかけます。
すると新 an0~an2 は
an0 = a0 * 2.143 = 0.4286
an1 = a1 * 2.143 = 0.6429
an2 = a2 * 2.143 = 1.0715
となりますので、再度これを
Y(t) = x0×an0 + x1×an1 + x2×an2
に代入すると
Y(t) = 0.5 * 0.4286 + 1 * 0.6429 + 2 * 1.0715
= 0.2143 + 0.6429 + 2.143
= 3.000
となり何とか、a0~a2 の解 (an0~an2) を一式見つけることができました。
解が見つかれば、3個のデ-タ列から4番目の値を予測することができます。
この内容をまとめると次のようになります。
データ数が少ない時は簡単に解を見つけることができますが、データが多い時は難しくなります。
でも Keras を使用すると楽に見つけることができます。
引き続き、ここまでのところをまとめます。