登錄
微信登錄
打開手機(jī)微信,掃描二維碼
掃描成功
請勿刷新本頁面,按手機(jī)提示操作
中科曙光不會以任何理由要求您轉(zhuǎn)賬匯款,謹(jǐn)防詐騙
您的微信還未注冊
中科曙光不會以任何理由要求您轉(zhuǎn)賬匯款,謹(jǐn)防詐騙
您可以同時關(guān)注中科曙光微信公眾號
使用微信掃一掃即可登錄! 查閱資料更方便、 快捷!
您已經(jīng)注冊賬號和
關(guān)注微信公眾號
2025年1月
服務(wù)熱線:400-810-0466
發(fā)布時間: 2017-09-05
文章作者曲星明,天津大學(xué)大四學(xué)生,來曙光實(shí)習(xí)兩個月了。且看小帥鍋如何現(xiàn)學(xué)現(xiàn)用,使用LSTM預(yù)測美元匯率。成文時間:2017年08月31日。
中午拿起手機(jī)刷微博,看到這樣一條消息:
什么!!!為什么突然跌下來這么多……出國黨換美金傷不起啊,老爸之前換的時候沒告訴我,今天看到消息心疼錢在蒸發(fā)。
要是我們能提前預(yù)知匯率的變動就好了,這樣就能在匯率低的時候兌換,可以省不少錢。作為一名天津大學(xué)的工科學(xué)生,遇到問題,一定要動手去解決問題,我們要以實(shí)事求是的態(tài)度,用實(shí)驗(yàn)和數(shù)據(jù)說話!
那今天我們就用通俗的語言來說說,怎么才能預(yù)測匯率?
目前深度學(xué)習(xí)作為機(jī)器學(xué)習(xí)異常火爆的一個分支,其中長短時記憶網(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ò)并不能如此,這似乎是一個主要的缺點(diǎn)。例如,假設(shè)你在看一場電影,你想對電影里的每一個場景進(jìn)行分類。傳統(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習(xí)到長期依賴關(guān)系。LSTM由Hochreiter & Schmidhuber (1997)提出,許多研究者進(jìn)行了一系列的工作對其改進(jìn)并使之發(fā)揚(yáng)光大。LSTM在許多問題上效果非常好,現(xiàn)在被廣泛使用。
那什么是時間序列呢?又是一堆術(shù)語,熟悉或者不感興趣的朋友可以自行跳過。
時間序列,也叫時間數(shù)列、歷史復(fù)數(shù)或動態(tài)數(shù)列。它是將某種統(tǒng)計指標(biāo)的數(shù)值,按時間先后順序排到所形成的數(shù)列。時間序列預(yù)測法就是通過編制和分析時間序列,根據(jù)時間序列所反映出來的發(fā)展過程、方向和趨勢,進(jìn)行類推或延伸,借以預(yù)測下一段時間或以后若干年內(nèi)可能達(dá)到的水平。其內(nèi)容包括:收集與整理某種社會現(xiàn)象的歷史資料;對這些資料進(jìn)行檢查鑒別,排成數(shù)列;分析時間數(shù)列,從中尋找該社會現(xiàn)象隨時間變化而變化的規(guī)律,得出一定的模式;以此模式去預(yù)測該社會現(xiàn)象將來的情況。
假如我們有2000天的匯率數(shù)據(jù),按照50天劃分為一個時間序列,每隔10天取一次,這就有了(2000-50)/10 +1=196個時間序列,我們可以利用這些時間序列去預(yù)測下一個或者多個時間序列。
接下來讓我們從最基本的事情開始----先讓LSTM學(xué)習(xí)預(yù)測一下簡單的余弦函數(shù)。

我們都知道余弦函數(shù)是很規(guī)律的周期函數(shù),應(yīng)該很好學(xué)習(xí)。首先用Matlab產(chǎn)生余弦函數(shù)的1900多個點(diǎn),做成CSV,輸入給LSTM進(jìn)行學(xué)習(xí),使用前1710個點(diǎn)訓(xùn)練,讓他預(yù)測一下后190步左右的輸出。也就是說,我們要通過前90%的波形,預(yù)測后面10%,現(xiàn)在讓我們來觀察一下結(jié)果。
漂亮!因?yàn)橛嘞也ê芤?guī)律啊,所以訓(xùn)練只用一個epoch就已經(jīng)能看到預(yù)測結(jié)果和實(shí)際結(jié)果差的不多了!
那我們來試試訓(xùn)練50個周期,看看之后會發(fā)生什么事情!

太神奇了,LSTM學(xué)的越來越好了!可以想象,如果訓(xùn)練更長時間,那么輸出將會和真實(shí)值基本沒有差別!
看到這里大家有沒有很激動呢,是不是感覺自己馬上能走上發(fā)家致富的道路?(開玩笑別當(dāng)真)
當(dāng)然,實(shí)際情況往往不會像我們預(yù)料的怎么簡單,匯率的變化是一個十分不規(guī)律、毫無周期可言的事情,但是我們并不能被他嚇到,我們需要進(jìn)一步實(shí)驗(yàn)!
我們上網(wǎng)下載2007年8月1日到2017年8月31日美元對人民幣的匯率。共2638條數(shù)據(jù),其格式如下:
對這些數(shù)據(jù)進(jìn)行可視化
接下來我們繼續(xù)搞事情!
我們需要對數(shù)據(jù)做一個微小的改變,因?yàn)橛嘞也ㄊ且粋€很規(guī)范的重復(fù)模式,但匯率數(shù)據(jù)是不規(guī)范的。為了應(yīng)對這種情況,我們需要使訓(xùn)練/測試數(shù)據(jù)的每個n大小的窗口進(jìn)行標(biāo)準(zhǔn)化。簡單來講標(biāo)準(zhǔn)化的作用就是能提升模型性能,使結(jié)果更準(zhǔn)確一些。
好了,我們按照9:1的比例劃分訓(xùn)練和測試集,假設(shè)現(xiàn)在處于2017年5月份:
我們先跑一個epoch看看結(jié)果
emmm……這也差得太多了吧,不過不要擔(dān)心,畢竟我們才剛訓(xùn)練一輪,模型現(xiàn)在應(yīng)該還處于欠擬合狀態(tài)。接下來我們先用少量數(shù)據(jù),進(jìn)行一下玄學(xué)調(diào)參,主要是窗口長度,LSTM層神經(jīng)元個數(shù),還有dropout強(qiáng)度。調(diào)的差不多之后,增加迭代次數(shù),下面我們來看結(jié)果。
我們的預(yù)測趨勢和實(shí)際比較符合!但是不可避免的,也會有一些預(yù)測錯誤(比如在240左右,模型居然給出了相反的結(jié)論)。接下來我們需要使用全部的數(shù)據(jù)進(jìn)行訓(xùn)練,讓他去預(yù)測未來幾個星期的趨勢。
發(fā)家致富道路就在眼前!
但是,我們單個逐點(diǎn)預(yù)測上雖然與實(shí)際相當(dāng)接近。但這是欺騙性的!為什么?如果你仔細(xì)看,預(yù)測線由單一的預(yù)測點(diǎn)組成,這些點(diǎn)知道他們前面的真實(shí)值。因此,網(wǎng)絡(luò)并不依賴時間序列本身,下一個點(diǎn)可能不會離上一點(diǎn)太遠(yuǎn)。假如LSTM得到了一個錯誤預(yù)測的點(diǎn),下一個預(yù)測可在考慮真實(shí)歷史后忽略不正確的預(yù)測,并允許再次出現(xiàn)錯誤。
錯誤逐漸積累,我們還是得傾家蕩產(chǎn)!
我們現(xiàn)在需要改變策略,去尋找是否在匯率變化中真的有一些潛在的模式,讓網(wǎng)絡(luò)預(yù)測未來的序列而不是下一個點(diǎn)。我們先訓(xùn)練一個epoch往后預(yù)測一段時間看看:
神奇!我們的預(yù)測很快就達(dá)到了收斂!證明在0這個點(diǎn),我們預(yù)測匯率在未來有下降趨勢。
讓我們進(jìn)一步研究回歸收斂,將我們的預(yù)測序列限制到30,也就是一個月,然后每次將啟動窗口移動50單位(每50天預(yù)測一次),先跑一個epoch試試:
可以看到預(yù)測的5條線里面只有紅色的那條不太準(zhǔn),但是這才一個周期。接下來,我們多迭代幾輪看看,并多嘗試不同的參數(shù),這應(yīng)該使模型模式更準(zhǔn)確。最后我們把預(yù)測周期縮短為每3天預(yù)測一次。
我們看到,實(shí)際上它現(xiàn)在只是試圖預(yù)測每個時間段匯率變化的趨勢。注意,這里的趨勢,可以用物理上的加速度做比方。
比如說一個物體正向下運(yùn)動(美元匯率下降了),但是他擁有向上的加速度(他有上升的趨勢),我們知道他會做一個減速運(yùn)動(美元還會跌,但是跌的慢了),但是什么時候能向上運(yùn)動我們不知道(但是什么時候能漲我們不知道)。
仔細(xì)觀察確實(shí)有一些點(diǎn)的預(yù)測趨勢是錯誤的。但別難為模型,他就是個本科生的渣渣作品。
下面我們對最近幾天放大來看看!
激動人心的時刻到了!我們的模型顯示未來9天內(nèi)匯率會有小幅的上漲!
不多說了,現(xiàn)在我要趕緊拿著數(shù)據(jù)去找我老爸,告訴他,最近美元匯率跌的厲害,這兩天馬上就要跌到谷底,現(xiàn)在是換匯的最好時機(jī)!
本文純屬作者自娛自樂,切勿盲目投資!
更多曙光相關(guān)資訊,歡迎搜索微信公眾號“中科曙光/sugoncn”,關(guān)注曙光公司官方微信。

津公網(wǎng)安備 12011602000521號

津公網(wǎng)安備 12011602000521號



注冊 /