RNN循環神經網絡實現預測比特幣價格過程詳解

http://c.biancheng.net/view/1950.htmlhtml

本節將介紹如何利用 RNN 預測將來的比特幣價格。

核心思想是過去觀察到的價格時間序列爲將來價格提供了一個很好的預估器。給定時間間隔的比特幣值經過https://www.coindesk.com/api/的 API 下載,如下是 API 文檔的一部分:

git

經 MIT 受權許可,本節將使用https://github.com/guillaume-chevalier/seq2seq-signal-prediction中的代碼。github

具體實現過程

  1. 克隆下面的 GitHub 存儲庫。這是一個鼓勵用戶嘗試 seq2seq 神經網絡架構的項目:


     
  2. 在上述 GitHub 庫基礎上,考慮使用如下可以下載和標準化比特幣歷史值(美圓或歐元)數據的函數,這些函數在 dataset.py 中定義。訓練集和測試集根據 80/20 規律分開,所以,20% 的測試數據是最新的比特幣值。每一個示例都包含 40 個美圓(USD)數據點,特徵軸/維度上是歐元(EUR)數據。數據根據均值和標準差進行歸一化處理,函數 generate_x_y_data_v4 生成尺寸爲 batch_size 的訓練數據(或測試數據)的隨機樣本:


     
  3. 生成訓練集、驗證集和測試集,並定義一些超參數,例如 batch_size、hidden_dim(RNN 中隱藏神經元的數量)和 layers_stacked_count(堆棧循環單元的數量)。另外,定義一些用於微調優化器性能的參數,例如優化器的學習率、迭代次數、優化器模擬退火的 lr_decay、優化器的動量以及避免過擬合的 L2 正則化。請注意,GitHub 存儲庫默認 batch_size=5和nb_iters=150,但我設置 batch_size=1000和nb_iters=100000,已經得到了更好的結果:


     
  4. 將網絡定義爲由基本 GRU 單元組成的編碼器–解碼器。網絡由 layers_stacked_count=2 個 RNN 組成,使用 TensorBoard 對網絡進行可視化。請注意,hidden_dim=12 是循環單元中隱藏的神經元:


     
  5. 運行 TensorBoard 並可視化由 RNN 編碼器和 RNN 解碼器組成的網絡:


     
  6. 如下是代碼的流程:


    圖 1 TensorBoard中的比特幣價格預測示例( 點此查看高清大圖
     
  7. 定義一個 L2 正則化損失函數,以免過分擬合併具備更好的泛化能力。優化器選擇 RMSprop,其中 learning_rate、decay 和 momentum 的值在第 3 步中已給出:


     
  8. 生成訓練數據並在數據集的 batch_size 示例上運行優化程序,爲批量訓練作好準備。一樣,從數據集的 batch_size 示例生成測試數據,爲測試作好準備。訓練運行迭代次數爲 nb_iters+1,並每訓練 10 次迭代來測試一次結果:


     
  9. 將 n_predictions 測試結果可視化,nb_predictions 取 5,預測值用黃色圓點實際值用藍色×符號表示。請注意,預測從直方圖中的最後一個藍點開始,能夠看出,即便是這個簡單的模型也是至關準確的:


     
    結果以下:


    圖 2 比特幣價格預測示例( 點此查看高清大圖

解讀分析

比特幣價格的預測是使用一個基於 GRU 基本單元的 RNN 組成的編碼器–解碼器。RNN 很是擅長學習序列,事實上即便是隻有兩層和 12 個 GRU 單元的簡單模型,比特幣價格預測也是至關準確的。固然,這個預測代碼並非鼓勵投資比特幣,而只是討論深度學習方法。並且,爲了確認是否存在數據過分擬合的狀況,須要進行更多的實驗。api

相關文章
相關標籤/搜索