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