LSTM_深度學習_股價預測
LSTM,是目前RNN(Recurrent Neural Network)中最常使用的模型。RNN主要是要解決時間序列的問題,一般的DNN,在inpute資料通常是沒有時間性的資料。而RNN透過將Hidden layer的output存在Memory裡,當下次input資料進去時,會同時考慮上一次存在Memory的值進行計算。
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。
- Input Gate: 當將feature輸入時,input gate會去控制是否將這次的值輸入
- Memory Cell: 將計算出的值儲存起來,以利下個階段拿出來使用
- Output Gate: 控制是否將這次計算出來的值output
- Forget Gate: 是否將Memory清掉(format),有點restart的概念。
其中,“是否”這件事情,是可以透過神經網路進行學習。
接下來我們可以更近一步去看數學表示方式:
當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
所以在整個時間流程下Xt 到 Xt+1,在上面流程可以清楚了解整個LSTM運作過程
LSTM Model type
LSTM有許多種變化,如下圖:
One to One 、 One to many 、 Many to one 或者 Many to many
以下以較常使用的做說明
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
- 將資料整理成參考前五天資料,並預測下一天股價 (Many to one)
- Model參數
主要使用兩層lstm以及兩層dense進行預測
接下來我們可針對loss diagram,進行修正,看是否得到理想的training結果
Ref有完整的code,大家可以參考看看。
以下為一些training tips
- Training Tips:
- 在training RNN時很容易 loss會一直跳動,是因為RNN的Error surface問題,因此若自己刻RNN的話,可加入clipping。
- train RNN時,可使用sigmoid function 做為activation function,會比Relu結果更好。
- 若lstm有overfit的狀況下,可嘗試使用GRU。GRU為簡化版的lstm,並只保留兩個gate且兩個gate會連動(input gate和forget gate)
Ref: