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