登錄
微信登錄
打開手機微信,掃描二維碼
掃描成功
請勿刷新本頁面,,按手機提示操作
中科曙光不會以任何理由要求您轉(zhuǎn)賬匯款,,謹防詐騙
您的微信還未注冊
中科曙光不會以任何理由要求您轉(zhuǎn)賬匯款,謹防詐騙
您可以同時關(guān)注中科曙光微信公眾號
使用微信掃一掃即可登錄,! 查閱資料更方便,、 快捷!
您已經(jīng)注冊賬號和
關(guān)注微信公眾號
2025年1月
服務(wù)熱線:400-810-0466
發(fā)布時間: 2017-09-05
文章作者曲星明,,天津大學(xué)大四學(xué)生,來曙光實習兩個月了,。且看小帥鍋如何現(xiàn)學(xué)現(xiàn)用,,使用LSTM預(yù)測美元匯率,。成文時間:2017年08月31日。
中午拿起手機刷微博,,看到這樣一條消息:
什么?。?!為什么突然跌下來這么多……出國黨換美金傷不起啊,,老爸之前換的時候沒告訴我,今天看到消息心疼錢在蒸發(fā),。
要是我們能提前預(yù)知匯率的變動就好了,,這樣就能在匯率低的時候兌換,可以省不少錢,。作為一名天津大學(xué)的工科學(xué)生,,遇到問題,一定要動手去解決問題,,我們要以實事求是的態(tài)度,,用實驗和數(shù)據(jù)說話!
那今天我們就用通俗的語言來說說,,怎么才能預(yù)測匯率,?
目前深度學(xué)習作為機器學(xué)習異常火爆的一個分支,,其中長短時記憶網(wǎng)絡(luò)(Long Short Term Memory Network, LSTM)模型非常適合用于時間序列預(yù)測,。
通俗解釋LSTM,不感興趣的朋友可以自行跳過,。(引用自http://www.dataguru.cn/article-11339-1.html)
人們的每次思考并不都是從零開始的,。比如說你在閱讀這篇文章時,你基于對前面的文字的理解來理解你目前閱讀到的文字,,而不是每讀到一個文字時,,都拋棄掉前面的思考,從頭開始,。你的記憶是有持久性的,。
傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)并不能如此,這似乎是一個主要的缺點,。例如,,假設(shè)你在看一場電影,你想對電影里的每一個場景進行分類,。傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)不能夠基于前面的已分類場景來推斷接下來的場景分類,。
循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN, Recurrent Neural Networks)解決了這個問題。我們只需要知道這種神經(jīng)網(wǎng)絡(luò)帶有環(huán),可將信息持久化,。
LSTM,,全稱為長短時記憶網(wǎng)絡(luò) (Long Short Term Memory networks) ,是一種特殊的RNN,,能夠?qū)W習到長期依賴關(guān)系,。LSTM由Hochreiter & Schmidhuber (1997)提出,許多研究者進行了一系列的工作對其改進并使之發(fā)揚光大,。LSTM在許多問題上效果非常好,,現(xiàn)在被廣泛使用。
那什么是時間序列呢,?又是一堆術(shù)語,,熟悉或者不感興趣的朋友可以自行跳過。
時間序列,,也叫時間數(shù)列,、歷史復(fù)數(shù)或動態(tài)數(shù)列。它是將某種統(tǒng)計指標的數(shù)值,,按時間先后順序排到所形成的數(shù)列,。時間序列預(yù)測法就是通過編制和分析時間序列,根據(jù)時間序列所反映出來的發(fā)展過程,、方向和趨勢,,進行類推或延伸,借以預(yù)測下一段時間或以后若干年內(nèi)可能達到的水平,。其內(nèi)容包括:收集與整理某種社會現(xiàn)象的歷史資料,;對這些資料進行檢查鑒別,排成數(shù)列,;分析時間數(shù)列,,從中尋找該社會現(xiàn)象隨時間變化而變化的規(guī)律,得出一定的模式,;以此模式去預(yù)測該社會現(xiàn)象將來的情況,。
假如我們有2000天的匯率數(shù)據(jù),按照50天劃分為一個時間序列,,每隔10天取一次,,這就有了(2000-50)/10 +1=196個時間序列,我們可以利用這些時間序列去預(yù)測下一個或者多個時間序列,。
接下來讓我們從最基本的事情開始----先讓LSTM學(xué)習預(yù)測一下簡單的余弦函數(shù),。
我們都知道余弦函數(shù)是很規(guī)律的周期函數(shù),應(yīng)該很好學(xué)習,。首先用Matlab產(chǎn)生余弦函數(shù)的1900多個點,,做成CSV,,輸入給LSTM進行學(xué)習,使用前1710個點訓(xùn)練,,讓他預(yù)測一下后190步左右的輸出,。也就是說,我們要通過前90%的波形,,預(yù)測后面10%,現(xiàn)在讓我們來觀察一下結(jié)果,。
漂亮,!因為余弦波很規(guī)律啊,所以訓(xùn)練只用一個epoch就已經(jīng)能看到預(yù)測結(jié)果和實際結(jié)果差的不多了,!
那我們來試試訓(xùn)練50個周期,,看看之后會發(fā)生什么事情!
太神奇了,,LSTM學(xué)的越來越好了,!可以想象,如果訓(xùn)練更長時間,,那么輸出將會和真實值基本沒有差別,!
看到這里大家有沒有很激動呢,是不是感覺自己馬上能走上發(fā)家致富的道路,?(開玩笑別當真)
當然,,實際情況往往不會像我們預(yù)料的怎么簡單,匯率的變化是一個十分不規(guī)律,、毫無周期可言的事情,,但是我們并不能被他嚇到,我們需要進一步實驗,!
我們上網(wǎng)下載2007年8月1日到2017年8月31日美元對人民幣的匯率,。共2638條數(shù)據(jù),其格式如下:
對這些數(shù)據(jù)進行可視化
接下來我們繼續(xù)搞事情,!
我們需要對數(shù)據(jù)做一個微小的改變,,因為余弦波是一個很規(guī)范的重復(fù)模式,但匯率數(shù)據(jù)是不規(guī)范的,。為了應(yīng)對這種情況,,我們需要使訓(xùn)練/測試數(shù)據(jù)的每個n大小的窗口進行標準化。簡單來講標準化的作用就是能提升模型性能,,使結(jié)果更準確一些,。
好了,我們按照9:1的比例劃分訓(xùn)練和測試集,,假設(shè)現(xiàn)在處于2017年5月份:
我們先跑一個epoch看看結(jié)果
emmm……這也差得太多了吧,,不過不要擔心,畢竟我們才剛訓(xùn)練一輪,模型現(xiàn)在應(yīng)該還處于欠擬合狀態(tài),。接下來我們先用少量數(shù)據(jù),,進行一下玄學(xué)調(diào)參,主要是窗口長度,,LSTM層神經(jīng)元個數(shù),,還有dropout強度。調(diào)的差不多之后,,增加迭代次數(shù),,下面我們來看結(jié)果。
我們的預(yù)測趨勢和實際比較符合,!但是不可避免的,,也會有一些預(yù)測錯誤(比如在240左右,模型居然給出了相反的結(jié)論),。接下來我們需要使用全部的數(shù)據(jù)進行訓(xùn)練,,讓他去預(yù)測未來幾個星期的趨勢。
發(fā)家致富道路就在眼前,!
但是,,我們單個逐點預(yù)測上雖然與實際相當接近。但這是欺騙性的,!為什么,?如果你仔細看,預(yù)測線由單一的預(yù)測點組成,,這些點知道他們前面的真實值,。因此,網(wǎng)絡(luò)并不依賴時間序列本身,,下一個點可能不會離上一點太遠,。假如LSTM得到了一個錯誤預(yù)測的點,下一個預(yù)測可在考慮真實歷史后忽略不正確的預(yù)測,,并允許再次出現(xiàn)錯誤,。
錯誤逐漸積累,我們還是得傾家蕩產(chǎn),!
我們現(xiàn)在需要改變策略,,去尋找是否在匯率變化中真的有一些潛在的模式,讓網(wǎng)絡(luò)預(yù)測未來的序列而不是下一個點,。我們先訓(xùn)練一個epoch往后預(yù)測一段時間看看:
神奇,!我們的預(yù)測很快就達到了收斂!證明在0這個點,,我們預(yù)測匯率在未來有下降趨勢,。
讓我們進一步研究回歸收斂,,將我們的預(yù)測序列限制到30,也就是一個月,,然后每次將啟動窗口移動50單位(每50天預(yù)測一次),,先跑一個epoch試試:
可以看到預(yù)測的5條線里面只有紅色的那條不太準,但是這才一個周期,。接下來,,我們多迭代幾輪看看,并多嘗試不同的參數(shù),,這應(yīng)該使模型模式更準確,。最后我們把預(yù)測周期縮短為每3天預(yù)測一次。
我們看到,,實際上它現(xiàn)在只是試圖預(yù)測每個時間段匯率變化的趨勢。注意,,這里的趨勢,,可以用物理上的加速度做比方。
比如說一個物體正向下運動(美元匯率下降了),,但是他擁有向上的加速度(他有上升的趨勢),,我們知道他會做一個減速運動(美元還會跌,但是跌的慢了),,但是什么時候能向上運動我們不知道(但是什么時候能漲我們不知道),。
仔細觀察確實有一些點的預(yù)測趨勢是錯誤的。但別難為模型,,他就是個本科生的渣渣作品,。
下面我們對最近幾天放大來看看!
激動人心的時刻到了,!我們的模型顯示未來9天內(nèi)匯率會有小幅的上漲,!
不多說了,現(xiàn)在我要趕緊拿著數(shù)據(jù)去找我老爸,,告訴他,,最近美元匯率跌的厲害,這兩天馬上就要跌到谷底,,現(xiàn)在是換匯的最好時機,!
本文純屬作者自娛自樂,切勿盲目投資,!
更多曙光相關(guān)資訊,,歡迎搜索微信公眾號“中科曙光/sugoncn”,關(guān)注曙光公司官方微信,。