RNN循環(huán)神經(jīng)網(wǎng)絡(luò) 、LSTM長短期記憶網(wǎng)絡(luò)實現(xiàn)時間序列長期利率預測|附代碼數(shù)據(jù)
全文鏈接:http://tecdat.cn/?p=25133
2017 年年中,R 推出了 Keras 包?_,_這是一個在 Tensorflow 之上運行的綜合庫,具有 CPU 和 GPU 功能
本文將演示如何在 R 中使用 LSTM 實現(xiàn)時間序列預測。
簡單的介紹
時間序列涉及按時間順序收集的數(shù)據(jù)。我用 xt∈R 表示單變量數(shù)據(jù),其中 t∈T 是觀察數(shù)據(jù)時的時間索引。時間 t 在 T=Z 的情況下可以是離散的,或者在 T=R 的情況下是連續(xù)的。為簡化分析,我們將僅考慮離散時間序列。
長短期記憶 (LSTM) 網(wǎng)絡(luò)是一種特殊的循環(huán)神經(jīng)網(wǎng)絡(luò) (RNN),能夠?qū)W習長期依賴關(guān)系。在常規(guī)的 RNN 中,小權(quán)重通過幾個時間步一遍又一遍地相乘,并且梯度逐漸減小到零——這種情況稱為梯度消失問題。
LSTM 網(wǎng)絡(luò)通常由通過層連接的內(nèi)存塊(稱為單元)組成。單元中的信息同時包含在單元狀態(tài) Ct 和隱藏狀態(tài) ht 中,并由稱為門的機制通過?sigmoid?和?tanh?激活函數(shù)進行調(diào)節(jié)。
sigmoid 函數(shù)/層輸出 0 到 1 之間的數(shù)字,其中 0 表示?沒有通過?, 1 表示?全部通過。因此,LSTM 能夠有條件地從單元狀態(tài)中添加或刪除信息。
一般來說,門將前一時間步 ht-1 和當前輸入 xt 的隱藏狀態(tài)作為輸入,并將它們逐點乘以權(quán)重矩陣 W,并將偏差 b 添加到乘積中。
三個主要門:
遺忘門:
這決定了哪些信息將從單元狀態(tài)中刪除。
輸出是一個介于 0 和 1 之間的數(shù)字,0 表示?全部刪除?,1 表示?全部記住

更新門:
在這一步中,??tahn?激活層創(chuàng)建一個潛在候選向量,如下所示:

sigmoid 層創(chuàng)建一個更新過濾器,如下所示:

接下來,舊單元狀態(tài) Ct-1 更新如下:

輸出門:
在這一步中,sigmoid 層過濾將要輸出的單元狀態(tài)。

然后將單元狀態(tài) Ct 通過?tanh?函數(shù)將值標準化到范圍 [-1, 1]。
最后,標準化后的單元格狀態(tài)乘以過濾后的輸出,得到隱藏狀態(tài) ht 并傳遞給下一個單元格:
加載必要的庫和數(shù)據(jù)集
#?加載必要的包library(keras)
或者安裝如下:
#?然后按如下方式安裝 TensorFlow :install_keras()
我們將使用可用的長期利率數(shù)據(jù)?,這是從 2007 年 1 月到 2018 年 3 月的月度數(shù)據(jù)。

前五個觀察樣本
