機器學(xué)習可以預(yù)測匯率變化嗎?:作為一個在美國生活的印度人,Neelabh 和家鄉(xiāng)之間存在恒定的金錢流動。如果在市場中,美元更加強勢,則印度盧比相對貶值:-機器學(xué)
作為一個在美國生活的印度人,Neelabh 和家鄉(xiāng)之間存在恒定的金錢流動。如果在市場中,美元更加強勢,則印度盧比相對貶值,因此從印度購買 1 美元需要更多的盧比。如果美元相對弱勢,則購買 1 美元需要的盧比會更少。
如果可以預(yù)測第二天的美元的價值,那么可以以此為參考做出更好的決策,最小化風險并最大化收益。了解到神經(jīng)網(wǎng)絡(luò)的強大,尤其是循環(huán)神經(jīng)網(wǎng)絡(luò),Neelabh 想到了預(yù)測美元和盧比的兌換匯率的點子。
在這篇文章中,我們將告訴你如何利用時序分析和機器學(xué)習時序模型來預(yù)測未來的兌換匯率變化。
序列問題
我們從序列問題的討論開始,最簡單的序列機器學(xué)習問題是「一對一」問題。
在這種問題中,向模型輸入一個數(shù)據(jù)或一個向量,模型會對輸入生成一個預(yù)測結(jié)果。無論是回歸、分類還是通過卷積網(wǎng)絡(luò)的圖像分類都屬于這個類型。通過擴展這種模式,我們可以將其改造成利用過去的輸入和輸出進行學(xué)習的模型。
一對多問題是一對一問題的擴展,因為一對一問題的模型只有一個輸入和輸出。而現(xiàn)在模型的輸出再饋送到模型作為新的輸入,這樣模型就會生成多個輸出,下面我們將了解一對多為什么又稱為循環(huán)神經(jīng)網(wǎng)絡(luò)。
由于連接方式構(gòu)成有向循環(huán),循環(huán)神經(jīng)網(wǎng)絡(luò)可以處理序列問題。就是說,循環(huán)神經(jīng)網(wǎng)絡(luò)可以在每一次的迭代中保持網(wǎng)絡(luò)形態(tài)不變的前提下,將輸出作為下一步的輸入。從編程的角度上說就像是利用確定的輸入和一些隱藏變量,在固定不變的程序上保持運行。最簡單的循環(huán)神經(jīng)網(wǎng)絡(luò),將時間軸展開之后,可以看成一個全連接神經(jīng)網(wǎng)絡(luò)。
RNN Unrolled Time
在這個單變量的例子中,只包括了兩個權(quán)重。權(quán)重 u 和當前輸入 x_t 相乘,權(quán)重 w 和上一步輸出 y_t-1 相乘。這個利用過去輸出和當前輸入的公式很像指數(shù)加權(quán)移動平均法(exponential weighted moving average,EWMA)。
只要將網(wǎng)絡(luò)單元一個接一個堆疊起來,就可以輕易建立一個深度循環(huán)神經(jīng)網(wǎng)絡(luò)。簡單的循環(huán)神經(jīng)網(wǎng)絡(luò)可以很好的處理短期記憶模型,但是在長時依賴項中,模型將會遇到根本的困難。
長短期記憶神經(jīng)網(wǎng)絡(luò)(Long Short-Term Neural Network)
之前說過,簡單的循環(huán)神經(jīng)網(wǎng)絡(luò)無法捕捉長期依賴序列中的特征,是一個根本的困難。這個問題很重要,因為我們希望以后我們的 RNN 可以分析文本和回答問題,在這些任務(wù)中很自然的需要分析長序列的文字。
90 年代末,Sepp Hochreiter 和 Jurgen Schmidhuber 提出了 LSTM,這種模型對長期依賴性的處理要比 RNN、隱馬爾可夫模型和其他序列學(xué)習方法要優(yōu)秀地多。
LSTM 模型將各種運算集合在一個單元中,LSTM 有一個內(nèi)部狀態(tài)變量,并且該狀態(tài)變量可以從一個單元傳遞到另一個 LSTM 單元中,同時通過門運算進行修改。
1. 遺忘門
這是一個 Sigmoid 層,以 t-1 時刻的輸出和 t 時刻的當前輸入為參量串接到一個單張量中,加上線性變換,最后用 sigmoid 函數(shù)變換。由于 sigmoid 函數(shù)的性質(zhì),這個門的值被限定在 0 和 1 之間,該值與內(nèi)態(tài)的值相乘,這也它會被叫做忘記門的原因。如果 ft=0 那么過去的內(nèi)態(tài)將被忽略,如果 ft=1 那么內(nèi)態(tài)將被完整的傳遞。
2. 輸入門
輸入門以過去的輸出和當前輸入為參量并饋送到一個 sigmoid 層。同樣,這個門的輸出值也是在 0 和 1 之間,輸入門的值將和候選層的輸出值相乘。
這個層對當前輸入和過去輸出應(yīng)用了雙曲正切函數(shù)作為變換(激活函數(shù)),結(jié)果將返回一個與內(nèi)部狀態(tài)相加的候選向量。
內(nèi)態(tài)通過這個規(guī)則不斷更新:
過去的狀態(tài)和遺忘門的值相乘,然后加上輸出門所給出新的候選狀態(tài)。
3. 輸出門
這個門控制多大比率的內(nèi)部狀態(tài)將被傳遞到輸出,這和其它門的工作方式類似。
以上描述的三個門有互相獨立的權(quán)重和偏置,因此,網(wǎng)絡(luò)將分別學(xué)會,保持過去輸出的概率、保持當前輸入的概率以及將內(nèi)態(tài)傳遞給輸出的概率。
在一個循環(huán)神經(jīng)網(wǎng)絡(luò)中,不僅需要輸入數(shù)據(jù),還需要輸入網(wǎng)絡(luò)過去的狀態(tài)。舉例來說,如果我喊「嘿!我開車的時候發(fā)生了不得了的事!」這時你的大腦的一部分將把這句話分解成,「噢,Neelabh 正在給我講一個故事,這個故事的主人公是 Neelabh 并且故事發(fā)生在路上。」然后,你需要將我剛才告訴你的話記住一部分。在接下來的故事中,你都必須隨時保留部分聽過的話的印象,才能逐漸明白整個故事。
另一個例子是關(guān)于是關(guān)于視頻加工的,同樣需要用到循環(huán)神經(jīng)網(wǎng)絡(luò)。大多數(shù)情況下,一部電影中,當前畫面所描述的內(nèi)容相當依賴于上一個畫面的內(nèi)容。經(jīng)過一段時間的訓(xùn)練后,循環(huán)神經(jīng)網(wǎng)絡(luò)將學(xué)會保留過去畫面的哪些部分和保留的比率,以及保留當前畫面的多少信息,豐富的結(jié)構(gòu)使其擁有比簡單前饋神經(jīng)網(wǎng)絡(luò)強大得多的性能。
時間序列預(yù)測
RNN 的強大功能令我印象深刻,因此我決定使用 RNN 預(yù)測美元和盧比的兌換匯率。這個計劃中使用的數(shù)據(jù)集是從 1980 年 1 月 2 日到 2017 年 8 月 10 日的兌換匯率的數(shù)據(jù)。稍后我將給出鏈接供你們下載和實驗。
數(shù)據(jù)集展示了 1 美元相對盧比的價值,我們一共擁有總數(shù)目為 13 730 條從 1980 年 1 月 2 日到 2017 年 8 月 10 日的數(shù)據(jù)記錄。
在這段期間,1 美元的盧比價值總體在上升。不難看到,在 2007-2008 年之間,由于經(jīng)濟大衰退,美國經(jīng)濟經(jīng)歷了一次重大的危機,這個圖描繪了從 20 世紀末期到 21 世紀早期世界市場經(jīng)濟衰退的軌跡。
這段期間內(nèi),全世界的經(jīng)濟發(fā)展狀況不是很好,特別是北美和歐洲(包括俄羅斯),都陷入了明顯的衰退。不過,與此同時,很多新興的經(jīng)濟體受到的沖擊要小得多,特別是中國和印度,在這場災(zāi)難中,他們的經(jīng)濟依然得到了大幅增長。
訓(xùn)練集和測試集的分割
現(xiàn)在,為了訓(xùn)練模型,我們需要將數(shù)據(jù)集分成測試和訓(xùn)練集。在做時間序列時,以明確的日期為界限將數(shù)據(jù)集分為訓(xùn)練和測試兩部分是很重要的。畢竟,你不會希望你的測試數(shù)據(jù)的時間排在你的訓(xùn)練數(shù)據(jù)之前。
在我們的實驗中將定義一個日期,比如 2010 年 1 月 1 日,作為分界日期。訓(xùn)練數(shù)據(jù)的日期從 1980 年 1 月 2 日到 2009 年 12 月 31 日,包括大約 11 000 個數(shù)據(jù)點。
測試數(shù)據(jù)的日期從 2010 年 1 月 1 日到 2017 年 8 月 10 日,包括大約 2700 個數(shù)據(jù)點。
接下來要將數(shù)據(jù)集歸一化,即將訓(xùn)練數(shù)據(jù)轉(zhuǎn)換格式并將測試數(shù)據(jù)按同樣的格式映射到訓(xùn)練數(shù)據(jù)上,這樣可以避免假定知道測試數(shù)據(jù)的規(guī)模帶來的影響。歸一化或者數(shù)據(jù)轉(zhuǎn)換意味著新變量的定義域?qū)⑾薅ㄔ?0 和 1 之間。
神經(jīng)網(wǎng)絡(luò)模型
一個全連接模型即將一個輸入變換成一個輸出的簡單神經(jīng)網(wǎng)絡(luò),它的構(gòu)建就如同簡單的回歸模型那樣通過前一天的價格預(yù)測第二天的價格。
我們以均方差作為損失函數(shù),并使用隨機梯度下降優(yōu)化算法。經(jīng)過足夠多代的訓(xùn)練,將能開始尋找足夠好的局部最優(yōu)解。下方是全連接層性質(zhì)的總結(jié)。
經(jīng)過 200 個 epoch 的訓(xùn)練,或者 eraly_callbacks 的出現(xiàn)(無論哪個先出現(xiàn)),這個模型就開始嘗試學(xué)習數(shù)據(jù)的模式和行為。由于我們區(qū)分了訓(xùn)練集和測試集,現(xiàn)在我們可以預(yù)測測試數(shù)據(jù)集并和真實值比較。
正如你所看到的,模型的表現(xiàn)并不好;旧纤皇侵貜(fù)過去的值,只有輕微的變化。全連接網(wǎng)絡(luò)無法從單一的過去值預(yù)測未來的值。接下來我們嘗試循環(huán)神經(jīng)網(wǎng)絡(luò),看看它工作的如何。
長短期記憶
我們使用的周期循環(huán)模型是一個單層序列模型,層內(nèi)使用 6 個 LSTM 節(jié)點,輸入的維度設(shè)為(1,1),即網(wǎng)絡(luò)的單個輸入只含一個特征值。
最后一層是一個密集層,損失函數(shù)為均方誤差函數(shù),并且采用隨機梯度下降作為優(yōu)化器。我們將模型訓(xùn)練了 200 個 epoch,并采用了中斷訓(xùn)練回調(diào)。模型的性質(zhì)總結(jié)在上方展示。
這個模型幾乎學(xué)會了將這些年的數(shù)據(jù)完全重現(xiàn),并且在一個簡單的前饋神經(jīng)網(wǎng)絡(luò)的輔助下,不出現(xiàn)延遲。不過,它仍然低估了一些確定的觀察值,模型仍然有很大的改進空間。
模型的改進
這個模型還可以做很多的改進,通過改進優(yōu)化器的方法以改變模型結(jié)構(gòu)的方式可以有很多種。還有另一種很重要的改進方法是來自數(shù)據(jù)流管理系統(tǒng)的滑動時間窗口法。
這種方法源于只有最近的數(shù)據(jù)才是最重要的觀點,即可以從一年時長的數(shù)據(jù)中嘗試預(yù)測下一年第一天的值。就從數(shù)據(jù)集中獲取重要模式并高度依賴于過去觀察值而言,滑動時間窗口法是非常有用的。
你們也可以按自己的方式嘗試去改進模型,看看模型會如何應(yīng)答這些變化。
數(shù)據(jù)集
我已經(jīng)把數(shù)據(jù)集公布在 github 項目中,請隨意下載,盡情使用吧。
GitHub 地址:https://github.com/neelabhpant/Deep-Learning-in-Python
有用的學(xué)習資源
我個人一直追隨著幾位我最喜歡的數(shù)據(jù)科學(xué)家,比如 Kirill Eremenko,Jose Portilla,Dan Van Boxel(更知名的是 Dan Does Data 這個名號),還有很多。他們大部分都有自己的博客并在上面討論今天主題的各方面,如 RNN,CNN,LSTM,甚至還有最近出現(xiàn)的新技術(shù),神經(jīng)圖靈機。
盡可能去跟進各種人工智能大會的新聞。順便提一下,有興趣的可以關(guān)注,Kirill Eremenko 即將帶著他優(yōu)秀的隊伍在 San Diego 作關(guān)于機器學(xué)習,神經(jīng)網(wǎng)絡(luò)和數(shù)據(jù)科學(xué)的報告。
結(jié)論
通過學(xué)習過去行為的主要特征并區(qū)分哪些特征才是對預(yù)測未來所需,LSTM 模型確實是很強大的工具。已經(jīng)有幾種應(yīng)用管法廣泛使用了 LSTM,比如語音識別、作曲、手寫字識別,甚至還有我最近研究中的對人體移動和交通運輸?shù)念A(yù)測實驗。
對于我們而言,LSTM 就是一個擁有自己的記憶并能像天才一樣做出精準決策的模型。
理論上,人能預(yù)測的,只要收集到足夠的數(shù)據(jù),機器就能模擬出人的思考分析過程。但是像匯率這樣的受政策、突發(fā)事件等黑天鵝影響較大的東西,如何實時高效的收集數(shù)據(jù)信息反而更重要。在數(shù)據(jù)一樣的情況下,至于是機器預(yù)測還是人工預(yù)測都是一樣的效果,如果人也能處理過來所有的數(shù)據(jù)
可以的,先從相關(guān)背景談起。對于量化經(jīng)濟而言,對外匯市場的分析和預(yù)測通;趨R率歷史數(shù)據(jù),采用相應(yīng)的數(shù)據(jù)分析手段構(gòu)建預(yù)測模型。但是由于政策、輿論、國際形勢等諸多外在“黑天鵝”事件的影響,僅依靠技術(shù)面的分析很難把握市場的偶發(fā)性跳變和由此引發(fā)的長期效應(yīng)。
浪潮著眼于外匯市場熱點,結(jié)合大數(shù)據(jù)和深度學(xué)習技術(shù),提供基于自然語言理解和數(shù)值分析的匯率預(yù)測端到端人工智能解決方案,有以下三部分組成:
第一,金融數(shù)據(jù)預(yù)處理。采用大數(shù)據(jù)處理技術(shù),從各個信息平臺獲得金融交易、資訊、報表等數(shù)據(jù),并傳輸?shù)郊写鎯χ,金融?shù)據(jù)預(yù)處理CPU平臺(多個雙路CPU服務(wù)器NF5280M5組成的集群)對交易、操盤等實時數(shù)據(jù)進行初篩和清洗,存入實時數(shù)據(jù)庫;對新聞資訊、行業(yè)報表等實時性要求不強的數(shù)據(jù)和過期的實時數(shù)據(jù)存入歷史數(shù)據(jù)庫,以備后續(xù)處理使用。CPU程序的管理、調(diào)度、監(jiān)控將由深度學(xué)習管理平臺AIStation完成。
第二,模型訓(xùn)練。模型訓(xùn)練GPU集群(配置8卡GPU服務(wù)器,如NF5288M5)從集中存儲中讀取訓(xùn)練樣本庫數(shù)據(jù),并加載實時數(shù)據(jù)處理模塊、數(shù)值特征重構(gòu)模塊和自然語言理解等模塊,運行深度學(xué)習框架,如TensorFlow,CNTK,MXNet等對初始模型進行訓(xùn)練,經(jīng)過對大量數(shù)據(jù)樣本的學(xué)習訓(xùn)練生成最終模型。訓(xùn)練中涉及多個訓(xùn)練任務(wù)的提交,其資源管理、調(diào)度、監(jiān)控將由深度學(xué)習管理平臺AIStation完成。
第三,模型應(yīng)用。訓(xùn)練好模型根據(jù)實際應(yīng)用場景的不同,可能以三種方式被加載,如加載到單臺GPU工作站P8000上、嵌入式設(shè)備上以及GPU AI服務(wù)云上,對實際接收的金融數(shù)據(jù)樣本進行測試識別,將智能化給出金融預(yù)測與識別。
整體架構(gòu)如下所示:
一天中什么時候運動減肥效果好抓 小孩能不能練啞鈴多大的孩子適合 小孩嘴唇起皮怎么辦怎樣才能預(yù)防 孩子的羅圈腿是怎么形成的三大因 孩子早戀怎么辦如何有效疏導(dǎo)孩子 醫(yī)生婆婆稱自己專業(yè)孩子的事必須 兒子成人禮送什么禮物好呢給你孩 有孩子的夫妻千萬不要離婚對于孩 小孩千萬別讓老人帶的說法正確嗎 自卑缺乏安全感的孩子怎么改善 怎么讓孩子開口說話 這幾個方法 怎么讓孩子吃飯 教你如何讓孩子 怎么管教不聽話的孩子 家長首先 頑皮的孩子怎么管教的 這些方法 叛逆期的孩子怎么管教 引導(dǎo)孩子 孩子性格軟弱怎么辦 懦弱的性格 孩子性格偏激怎么辦 孩子性格偏 孩子性格固執(zhí)怎么辦 家長們不妨 愛惹事的孩子怎么管教 不妨試試 養(yǎng)育優(yōu)秀的孩子具備特征,家長要 高考數(shù)學(xué)難出新天際,可有的孩子 “做胎教”和“不做胎教”的孩子 花費十幾萬只考了302分 媽媽覺得 甘肅作弊考生留下來的疑團,是怎 一舉奪魁!高三學(xué)生離校時,校領(lǐng) 高考釘子戶:26次參加高考,今年 D2809次列車因泥石流脫線!此類 “女兒16歲,學(xué)校宿舍里分娩了” 扭曲邪門的內(nèi)容,頻頻出現(xiàn)在教科 川渝地區(qū)幾所大學(xué)實力很牛!四川