LSTM_深度學習_股價預測

JT
Data Scientists Playground
6 min readMay 10, 2018

LSTM,是目前RNN(Recurrent Neural Network)中最常使用的模型。RNN主要是要解決時間序列的問題,一般的DNN,在inpute資料通常是沒有時間性的資料。而RNN透過將Hidden layer的output存在Memory裡,當下次input資料進去時,會同時考慮上一次存在Memory的值進行計算。

RNN

Simple RNN

從一個簡單的RNN在學習股價上,我們可以將Pt-1的資料input,並對Pt股價進行學習,而M1即是將hidden output存起來,並當我們要train Pt,並針對Pt+1進行修正時,會將M1 拿出來作考慮,並相加成為Pt+1的output。

LSTM

LSTM(Long short-term memory),主要由四個Component組成: Input Gate、Output Gate、Memory Cell以及Forget Gate。

LSTM
  • Input Gate: 當將feature輸入時,input gate會去控制是否將這次的值輸入
  • Memory Cell: 將計算出的值儲存起來,以利下個階段拿出來使用
  • Output Gate: 控制是否將這次計算出來的值output
  • Forget Gate: 是否將Memory清掉(format),有點restart的概念。

其中,“是否”這件事情,是可以透過神經網路進行學習。

接下來我們可以更近一步去看數學表示方式:

LSTM 數學 (from 李宏毅老師投影片)

當input資料進去可表示為g(z),而input gate則使用f(Zi),一般來說Activation function f會使用sigmoid function,因爲要表示開啟門的機率。因此會把兩個值相乘 g(z)f(Zi),就可以得出在input gate開啟的機率下,input的值。接著,Memory cell,就會紀錄當下input值加上前一次input值並乘上forget gate的機率,看是否要遺忘前一次紀錄 [c’ = g(z)f(Zi) + cf(Zf)]。

LSTM Overview

LSTM flow

所以在整個時間流程下Xt 到 Xt+1,在上面流程可以清楚了解整個LSTM運作過程

LSTM Model type

LSTM有許多種變化,如下圖:

One to One 、 One to many 、 Many to one 或者 Many to many

LSTM Different type (Ref)

以下以較常使用的做說明

Many to one

Input: sequence vector (Ex: 一週股價)
Output: Only one vector (Ex: 下週一股價)

使用情境:
1. 股價預測:用當週五天股價預測下週一股價
2. 情感分析:利用一句話預測為正面請感還是負面情感

Many to Many

Input: sequence vector (Ex: 一週股價)
Output: sequence vector (Ex: 下週股價)

使用情境:
1. 股價預測:用當週五天股價預測下週五天股價
2. 翻譯:給定一句話,進行翻譯,並回覆另一句翻譯完的文字

範例: LSTM使用0050股票資料進行預測

標的:0050
資料使用範圍:2017/01 ~ 2018/04

資料使用

主要會使用收盤價以及交易量進行預測

接下來將介紹一些主要function:

  • 針對資料進行Normalize
normalize
  • 將資料整理成參考前五天資料,並預測下一天股價 (Many to one)
preprocess
  • Model參數

主要使用兩層lstm以及兩層dense進行預測

lstm model
Model summary

接下來我們可針對loss diagram,進行修正,看是否得到理想的training結果

loss plot

Ref有完整的code,大家可以參考看看。

以下為一些training tips

  • Training Tips:
  1. 在training RNN時很容易 loss會一直跳動,是因為RNN的Error surface問題,因此若自己刻RNN的話,可加入clipping。
  2. train RNN時,可使用sigmoid function 做為activation function,會比Relu結果更好。
  3. 若lstm有overfit的狀況下,可嘗試使用GRU。GRU為簡化版的lstm,並只保留兩個gate且兩個gate會連動(input gate和forget gate)

Ref:

--

--