看深度學習框架排名第一的TensorFlow如何進行時序預測!

原文鏈接

TensorFlow 是一個采用數據流圖(data flow graphs),用于數值計算的開源軟件庫。節點(Nodes)在圖中表示數學操作,圖中的線(edges)則表示在節點間相互聯系的多維數據數組,即張量(tensor)。它靈活的架構讓你可以在多種平臺上展開計算,例如臺式計算機中的一個或多個CPU(或GPU),服務器,移動設備等等。TensorFlow 最初由Google大腦小組(隸屬于Google機器智能研究機構)的研究員和工程師們開發出來,用于機器學習和深度神經網絡方面的研究,但這個系統的通用性使其也可廣泛用于其他計算領域。

時間序列分析在計量經濟學和財務分析中具有重要意義,但也可以應用于了解趨勢做決策和對行為模式的變化做出反應的領域。其中例如,作為主要石油和天然氣供應商的MapR融合數據平臺客戶將傳感器放在井上,將數據發送到MapR Streams,然后將其用于趨勢監測井的狀況,如體積和溫度。在金融方面,時間序列分析用于股票價格,資產和商品的價格的預測。計量經濟學家長期利用“差分自回歸移動平均模型”(ARIMA)模型進行單變量預測。

ARIMA模型已經使用了幾十年,并且很好理解。然而,隨著機器學習的興起,以及最近的深度學習,其他模式正在被探索和利用。

深度學習(DL)是基于一組算法的機器學習的分支,它通過使用由多個非線性變換組成的人造神經網絡(ANN)架構來嘗試對數據進行高級抽象然后建模。更為流行的DL神經網絡之一是循環神經網絡(RNN)。RNN是依賴于其輸入的順序性質的一類神經網絡。這樣的輸入可以是文本,語音,時間序列,以及序列中的元素的出現取決于在它之前出現的元素。例如,一句話中的下一個字,如果有人寫“雜貨”最有可能是“商店”而不是“學校”。在這種情況下,給定這個序列,RNN可能預測是商店而不是學校。

人工神經網絡

實際上,事實證明,雖然神經網絡有時是令人畏懼的結構,但使它們工作的機制出奇地簡單:隨機梯度下降。對于我們網絡中的每個參數(如權重或偏差),我們所要做的就是計算相對于損耗的參數的導數,并在相反方向微調一點。

ANNs使用稱為反向傳播(有想了解BP算法的可以參考BP算法雙向傳,鏈式求導最纏綿)的方法來調整和優化結果。反向傳播是一個兩步過程,其中輸入通過正向傳播饋送到神經網絡中,并且在通過激活函數變換之前與(最初隨機的)權重和偏差相乘。你的神經網絡的深度將取決于你的輸入應該經過多少變換。一旦正向傳播完成,反向傳播步驟通過計算產生誤差的權重的偏導數來調整誤差。一旦調整權重,模型將重復正向和反向傳播步驟的過程,以最小化誤差率直到收斂。下圖中你看到這是一個只有一個隱藏層的ANN,所以反向傳播不需要執行多個梯度下降計算。

循環神經網絡

循環神經網絡(RNN)被稱為循環是因為它們對輸入序列中的所有元素執行相同的計算。由于RNN的廣泛應用,RNN正在變得非常受歡迎。它們可以分析時間序列數據,如股票價格,并提供預測。在自動駕駛系統中,他們可以預測汽車軌跡并幫助避免事故。他們可以將句子,文檔或音頻樣本作為輸入,它們也可以應用于自然語言處理(NLP)系統,如自動翻譯,語音對文本或情感分析。

上圖是RNN架構的示例,并且我們看到xt是時間步長t的輸入。例如,x1可能是時間段1中的股票的第一個價格。st是在時間步長tn處的隱藏狀態,并且使用激活函數基于先前的隱藏狀態和當前步驟的輸入來計算。St-1通常被初始化為零。ot是步驟t的輸出。例如,如果我們想預測序列中的下一個值,那么它將是我們時間序列中概率的向量。

RNN隱藏層的成長是依賴于先前輸入的隱藏狀態或記憶,捕獲到目前為止所看到的內容。任何時間點的隱藏狀態的值都是前一時間步驟中的隱藏狀態值和當前時間的輸入值進行函數計算的結果。RNN具有與ANN不同的結構,并且通過時間(BPTT)使用反向傳播來計算每次迭代之后的梯度下降。

一個小例子:

此示例使用3個節點的小型MapR群集完成。此示例將使用以下內容:

Python 3.5

TensorFlow 1.0.1

Red Hat 6.9

如果你使用Anaconda,你需要保證你能夠安裝TensorFlow 1.0.1版本在你本地的機器上。此代碼將不能在TensorFlow <1.0版本上使用。如果TensorFlow版本相同,則可以在本地機器上運行并傳輸到集群。其他需要考慮的深度學習庫是MXNet,Caffe2,Torch和Theano。Keras是另一個為TensorFlow或Theano提供python包的深度學習庫。

MapR提供了用戶喜好的集成Jupyter Notebook(或Zeppelin)的功能。我們將在這里顯示的是數據管道的尾端。在分布式環境中運行RNN時間序列模型的真正價值是你可以構建的數據流水線,將聚合的系列數據推送到可以饋送到TensorFlow計算圖中的格式。

如果我正在聚合來自多個設備(IDS,syslogs等)的網絡流,并且我想預測未來的網絡流量模式行為,我可以使用MapR Streams建立一個實時數據管道,將這些數據聚合成一個隊列,進入我的TensorFlow模型。對于這個例子,我在集群上只使用一個節點,但是我可以在其他兩個節點上安裝TensorFlow,并且可以有三個TF模型運行不同的超參數。

對于這個例子,我生成了一些虛擬數據。

我們在我們的數據中有209個觀察結果。我want確保我對每個批次輸入都有相同的觀察次數。

我們看到的是我們的訓練數據集由10個批次組成,包含20個觀測值。每個觀察值是單個值的序列。

現在我們有了我們的數據,我們來創建一個將執行計算的TensorFlow圖。

這里有很多事情需要處理。例如我們正在指定我們用來預測的周期數。我們指定我們的變量占位符。我們初始化一種使用的RNN單元格(大小100)和我們想要的激活函數的類型。ReLU代表“整流線性單元”,是默認的激活功能,但如果需要,可以更改為Sigmoid,Hyberbolic Tangent(Tanh)等。

我們希望我們的輸出與我們的輸入格式相同,我們可以使用損失函數來比較我們的結果。在這種情況下,我們使用均方誤差(MSE),因為這是一個回歸問題,我們的目標是最小化實際和預測之間的差異。如果我們處理分類結果,我們可能會使用交叉熵。現在我們定義了這個損失函數,可以定義TensorFlow中的訓練操作,這將優化我們的輸入和輸出網絡。要執行優化,我們將使用Adam優化器。Adam優化器是一個很好的通用優化器,可以通過反向傳播實現漸變下降。

現在是時候在我們的訓練數據上實施這個模型了。

我們將指定我們的批次訓練序列循環的迭代/紀元的數量。接著,我們創建我們的圖形對象(tf.Session()),并初始化我們的數據,以便在我們遍歷歷元時被饋送到模型中。縮寫輸出顯示每100個紀元后的MSE。隨著我們的模型提供數據向前和反向傳播運行,它調整應用于輸入的權重并運行另一個訓練時期,我們的MSE得到了持續改善(減少)。最后,一旦模型完成,它將接受參數并將其應用于測試數據中,以Y的預測輸出。

我們來看看我們的預測跟實際相差多少。對于我們的測試數據,我們集中在整個209個周期的最后20個時期。

看來這還有一些改進的空間。這可以通過改變隱藏的神經元的數量或增加迭代的數量來完成。優化我們的模式是一個試錯的過程,但我們有一個好的開始。這是隨機數據,所以我們期待著很好的結果,但是也許將這個模型應用到實時系列中會給ARIMA模型帶來一些競爭壓力。

數據科學家因為RNN(和深度學習)的出現,有了更多可用的選項以此來解決更多有趣的問題。許多數據科學家面臨的一個問題是,一旦我們進行了優化,我們如何自動化我們的分析運行?擁有像MapR這樣的平臺允許這種能力,因為你可以在大型數據環境中構建,訓練,測試和優化你的模型。在這個例子中,我們只使用了10個訓練批次。如果我的數據允許我利用數百批次,而不僅僅是20個時期,我想我一定能改進這種模式。一旦我做到了,我可以把它打包成一個自動化腳本,在一個單獨的節點,一個GPU節點,一個Docker容器中運行。這就是在融合數據平臺上進行數據科學和深度學習的力量。

希望上述的文章能夠幫到你理解TensorFlow。

更多閱讀:

閱讀博客“TensorFlow on MapR教程:一個完美的地方開始

閱讀博客“深度學習:我的選項是什么?

閱讀博客“通過SparkR和H2O的MapR融合數據平臺上的可擴展機器學習

希望上述的介紹能夠幫助到你!

本文由北郵@愛可可-愛生活老師推薦,阿里云云棲社區組織翻譯。

文章原標題《Applying Deep Learning to Time Series Forecasting with TensorFlow》,

作者:Justin Brandenburg?譯者:袁虎?審閱:董昭男

文章為簡譯,更為詳細的內容,請查看原文

原文鏈接

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,283評論 6 530
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 97,947評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,094評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,485評論 1 308
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,268評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,817評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,906評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,039評論 0 285
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,551評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,502評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,662評論 1 366
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,188評論 5 356
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,907評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,304評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,563評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,255評論 3 389
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,637評論 2 370

推薦閱讀更多精彩內容