陳亮亮 邵雄凱 高榕
摘 要:近年來,隨著云計算、大數(shù)據(jù)等技術(shù)的迅猛發(fā)展,如何快速、有效地從紛繁復(fù)雜的數(shù)據(jù)中獲取有價值的信息成為當(dāng)前大數(shù)據(jù)應(yīng)用的關(guān)鍵問題。為此,對基于大數(shù)據(jù)云平臺的深度學(xué)習(xí)預(yù)測模型進行研究,以對未來序列數(shù)據(jù)走勢進行有效預(yù)測。首先對幾種基于深度學(xué)習(xí)的長短序列預(yù)測模型進行對比分析,分析其與傳統(tǒng)預(yù)測模型的區(qū)別及優(yōu)勢,提出一種加入dropout的輕量級GRU預(yù)測模型。采用代表性天氣數(shù)據(jù)作為實驗對象,實驗結(jié)果表明,該方法的實驗預(yù)測指標(biāo)MAE(平均絕對誤差)的平均值相比傳統(tǒng)預(yù)測方法有所提高,從而有效驗證了輕量級GRU預(yù)測方法的正確性與有效性。
關(guān)鍵詞:大數(shù)據(jù);云平臺;深度學(xué)習(xí);預(yù)測模型;數(shù)據(jù)倉庫
DOI:10. 11907/rjdk. 191883 開放科學(xué)(資源服務(wù))標(biāo)識碼(OSID):
中圖分類號:TP306文獻標(biāo)識碼:A 文章編號:1672-7800(2020)005-0042-06
0 引言
隨著大數(shù)據(jù)時代的到來,如何處理海量數(shù)據(jù)對于如今的數(shù)據(jù)處理技術(shù)提出了更高要求,因此大數(shù)據(jù)管理平臺、數(shù)據(jù)倉庫技術(shù)以及BI(Business Intelligence)工具等應(yīng)運而生。其中,etl(抽取,轉(zhuǎn)換,加載)是BI和數(shù)據(jù)倉庫的核心與靈魂,能夠按照統(tǒng)一規(guī)則集成并提高數(shù)據(jù)價值。這些數(shù)據(jù)管理工具可為商務(wù)決策分析提供支持,使人們從海量數(shù)據(jù)中挖掘出所需的信息。但由于數(shù)據(jù)體量龐大,容器技術(shù)又為云計算的發(fā)展開辟了新的道路,使系統(tǒng)資源的利用效率越來越高。傳統(tǒng)大數(shù)據(jù)分析模塊能對平臺數(shù)據(jù)作基本的挖掘與分析,但數(shù)據(jù)中通常還包含一些深層次信息,因此需要對數(shù)據(jù)作更深入的處理。區(qū)別于傳統(tǒng)機器學(xué)習(xí)方法,深度神經(jīng)網(wǎng)絡(luò)是一個逐層提取特征的過程,并且是由計算機從中自動提取數(shù)據(jù),而不需要人類干預(yù)提取過程。特別是在預(yù)測領(lǐng)域,深度學(xué)習(xí)能夠更精準(zhǔn)地預(yù)測未來趨勢。
針對預(yù)測算法及相關(guān)模型,特別對于天氣序列數(shù)據(jù)方面的預(yù)測,很多學(xué)者進行了大量研究。傳統(tǒng)預(yù)測方法主要包括懲罰線性回歸方法和集成方法。一些學(xué)者提出利用機器學(xué)習(xí)方法進行預(yù)測,如張鑫等[7]針對隨機森林的強度和相關(guān)度對其進行剪枝,使得剪枝的隨機森林算法在所應(yīng)用的數(shù)據(jù)上表現(xiàn)出優(yōu)于傳統(tǒng)隨機森林算法的性能;王定成等[12]提出一種多元時間序列局部支持向量回歸的日氣溫預(yù)測方法,以日最高、最低氣溫為例,使用C-C方法與最小預(yù)測誤差法構(gòu)造日最高、最低氣溫的多元時間序列,并將分段提取最近鄰點方法應(yīng)用于局部支持向量回歸,建立提前1天的每日最高、最低氣溫局部預(yù)測模型。之后還有學(xué)者提出采用集成方法進行預(yù)測模型構(gòu)建,集成方法的關(guān)鍵是通過結(jié)合這些弱學(xué)習(xí)器的偏置和或方差,從而創(chuàng)建一個強學(xué)習(xí)器(或集成模型),從而獲得更好的性能。底層算法又稱為基學(xué)習(xí)器,基學(xué)習(xí)器是單個機器學(xué)習(xí)算法,上層算法通過對基學(xué)習(xí)器進行巧妙的處理,使模型相對獨立。有很多算法都可作為基學(xué)習(xí)器,如二元決策樹、支持向量機等。
之后深度學(xué)習(xí)也逐漸進入預(yù)測領(lǐng)域,主要有基于CNN與RNN神經(jīng)網(wǎng)絡(luò)的預(yù)測模型等,也能達到較好的預(yù)測效果。如楊函[16]提出通過滑動時間窗手段改造,使普通神經(jīng)網(wǎng)絡(luò)也能學(xué)習(xí)到歷史時序特征;鄧鳳欣[4]利用LSTM神經(jīng)網(wǎng)絡(luò)研究股票時間序列的可行性。以上文獻都為本文研究提供了思路。
1 大數(shù)據(jù)平臺架構(gòu)介紹
大數(shù)據(jù)平臺包含了大數(shù)據(jù)處理整套流程,平臺整體架構(gòu)如圖1所示。
首先數(shù)據(jù)來源于數(shù)據(jù)倉庫架構(gòu),具體為db2本地數(shù)據(jù)接口,通過傳感器采集到天氣數(shù)據(jù)信息并傳入本地數(shù)據(jù)庫作初步處理;之后通過sqoop、flume組件進行數(shù)據(jù)的采集抽取,可以根據(jù)維度進行匯總劃分;上傳到hdfs后,再次進行相關(guān)的etl操作,如碼值轉(zhuǎn)換、merge等。
大數(shù)據(jù)平臺還有HBase和kafka等數(shù)據(jù)存儲組件,以應(yīng)對海量數(shù)據(jù)存儲。HBase位于結(jié)構(gòu)化存儲層,Hadoop HDFS為HBase提供了可靠性較高的底層存儲支持,Hadoop MapReduce為HBase提供了高性能計算能力;Zookeeper為HBase提供了穩(wěn)定的服務(wù)和failover機制;kafka滿足了日志處理以及高吞吐量的需求;Zookeeper則用于分配集群資源,同時負(fù)責(zé)組件間的通信;調(diào)度模塊方便人們對數(shù)據(jù)倉庫中的etl程序、shell腳本運行狀態(tài)進行管理,同時了解程序運行狀態(tài)。
算法模塊包括spark的MLlib傳統(tǒng)機器學(xué)習(xí)模塊和深度學(xué)習(xí)模塊。本文主要討論深度學(xué)習(xí)模型在大數(shù)據(jù)平臺上的應(yīng)用,以及如何與大數(shù)據(jù)運維管理模塊進行交互。大數(shù)據(jù)運維管理平臺是整個集群的靈魂所在,能夠保障集群的穩(wěn)定性及高效性。主要表現(xiàn)在以下幾個方面:①保障各數(shù)據(jù)節(jié)點的可用性;②保障計算、存儲網(wǎng)絡(luò)等資源的合理分配以及集群資源利用率,方便集群中程序的順利執(zhí)行;③對shell腳本進行管理,大數(shù)據(jù)集群與Linux系統(tǒng)密不可分,很多時候為了實現(xiàn)集群運維管理的自動化,需要定時采用shell腳本處理一些問題,或開啟守護進程監(jiān)控部分關(guān)鍵位置;④每天能及時統(tǒng)計一些關(guān)鍵指標(biāo)點,并進行報表展現(xiàn);⑤對相關(guān)etl程序以及存儲過程程序進行監(jiān)控,保障程序正常運行。
2 LSTM與GRU原理
傳統(tǒng)線性模型難以解決多變量或多輸入問題,而RNN解決了這一問題。RNN 是包含循環(huán)的網(wǎng)絡(luò),當(dāng)時間間隔不斷增大時,RNN 則無法學(xué)習(xí)到連接較遠信息的能力,而神經(jīng)網(wǎng)絡(luò)如LSTM擅長處理多個變量的長連接問題,該特性有助于解決長時間序列預(yù)測問題。LSTM模型是對RNN卷積神經(jīng)網(wǎng)絡(luò)進行改進得到的(見圖2),由于存在梯度消失或梯度爆炸問題,傳統(tǒng)RNN在實際中很難處理長期依賴關(guān)系,而LSTM繞開了這些問題,依然可以從數(shù)據(jù)語料中學(xué)習(xí)到長期依賴關(guān)系。
在t時刻,LSTM的輸入有3個:當(dāng)前時刻網(wǎng)絡(luò)輸入值x_t、上一時刻 LSTM輸出值h_t-1,以及上一時刻單元狀態(tài)c_t-1;LSTM 的輸出有兩個:當(dāng)前時刻 LSTM 輸出值h_t與當(dāng)前時刻單元狀態(tài)c_t。
為了控制長期狀態(tài),這里設(shè)置3個控制開關(guān),第一個開關(guān)負(fù)責(zé)控制繼續(xù)保存長期狀態(tài)c,第二個開關(guān)負(fù)責(zé)把即時狀態(tài)信息傳遞給長期狀態(tài)c,第三個開關(guān)負(fù)責(zé)控制是否將長期狀態(tài)c作為當(dāng)前的LSTM輸出,如圖4所示。
(1)前向計算每個神經(jīng)元輸出值如圖5所示,共有5個變量。
(2)反向計算每個神經(jīng)元的誤差項值。與 RNN 一樣,LSTM 誤差項反向傳播也包括兩個方向:一個是沿時間的反向傳播,即從當(dāng)前 t 時刻開始,計算每個時刻的誤差項,一個是將誤差項向上一層傳播。
(3)根據(jù)相應(yīng)誤差項,計算每個權(quán)重梯度。調(diào)參目標(biāo)是要學(xué)習(xí)8組參數(shù)(W分別代表權(quán)重矩陣和偏置項),如圖6所示。
為了提升訓(xùn)練效率以及簡化模型架構(gòu),一個基于LSTM的改進版模型GRU應(yīng)運而生。GRU是LSTM網(wǎng)絡(luò)的變體,其較LSTM網(wǎng)絡(luò)結(jié)構(gòu)更加簡單,而且效果很好,因此也是當(dāng)前非常流行的一種網(wǎng)絡(luò)。
GRU可以解決RNN網(wǎng)絡(luò)中的長依賴問題,在GRU模型中只有兩個門:更新門和重置門,如圖7所示。更新門決定有多少過去信息可用來利用,重置門決定丟棄多少過去信息。zt代表更新門操作,ht代表重置門操作。一般來說,GRU計算速度較快,計算精度略低于LSTM。
候選隱藏狀態(tài)只與輸入以及上一刻的隱藏狀態(tài) h(t-1)有關(guān)。這里的重點是,h(t-1)與 r 重置門相關(guān),r取值在 0~1 之間,如果其趨近于 0,候選隱藏狀態(tài)上一刻信息即被遺忘。當(dāng)前隱藏狀態(tài)取決于 h(t-1)和h~,如果 z 趨近于 0,則表示上一時刻信息被遺忘;如果 z 趨近于 1,表示當(dāng)前輸入信息被遺忘。
3 加入dropout的輕量級GRU預(yù)測模型在序列數(shù)據(jù)上的應(yīng)用
通常增加網(wǎng)絡(luò)容量的做法是增加每層單元數(shù)或增加層數(shù)。循環(huán)層堆疊(Recurrent Layer Stacking)是構(gòu)建更強大循環(huán)網(wǎng)絡(luò)的經(jīng)典方法,例如,目前谷歌翻譯算法就是7個大型LSTM層的堆疊。在 Keras 中逐個堆疊循環(huán)層,所有中間層都應(yīng)該返回完整的輸出序列(一個 3D 張量),而不是僅返回最后一個時間步的輸出,這可以通過指定return_sequences=True實現(xiàn)。但由于數(shù)據(jù)量以及網(wǎng)絡(luò)規(guī)模過大,會產(chǎn)生過擬合現(xiàn)象。于是引入dropout正則化方法降低過擬合,dropout不同的隱藏神經(jīng)元就類似訓(xùn)練不同網(wǎng)絡(luò)(隨機刪掉一半隱藏神經(jīng)元導(dǎo)致網(wǎng)絡(luò)結(jié)構(gòu)已經(jīng)不同),整個dropout過程則相當(dāng)于對多個不同神經(jīng)網(wǎng)絡(luò)取平均,而不同網(wǎng)絡(luò)產(chǎn)生不同的過擬合,一些互為“反向”的擬合相互抵消即可達到整體上減少過擬合的效果。
(1)采用Web前后端知識體系搭建大數(shù)據(jù)管理平臺基本框架,基本模塊主要包括數(shù)據(jù)量指標(biāo)管理模塊、程序管理模塊、腳本管理模塊與日志管理模塊。
(2)循環(huán) dropout(recurrent dropout)。這是一種特殊的內(nèi)置方法,在循環(huán)層中使用 dropout降低過擬合,并堆疊循環(huán)層(stacking recurrent layers)提高網(wǎng)絡(luò)表示能力(代價是更高的計算負(fù)荷)。
(3)訓(xùn)練測試數(shù)據(jù)準(zhǔn)備。使用的數(shù)據(jù)主要是由德國馬克思·普朗克生物地球化學(xué)研究所氣象站記錄的天氣時間序列數(shù)據(jù),本文使用的是2009-2016年的數(shù)據(jù)。
(4)將數(shù)據(jù)預(yù)處理為神經(jīng)網(wǎng)絡(luò)可以處理的格式。數(shù)據(jù)中的每個時間序列位于不同范圍(比如溫度通道位于-20~+30之間,氣壓為1 000mb左右)。因此,需要對每個時間序列分別作標(biāo)準(zhǔn)化處理,讓其在相似范圍內(nèi)都取較小的值。
(5)算法模型搭建。主要有基于機器學(xué)習(xí)的密集連接模型、使用dropout正則化的LSTM長短記憶模型和GRU模型,以及 dropout 正則化的堆疊 GRU 模型。
(6)數(shù)據(jù)集劃分。本文創(chuàng)建一個抽象的generator函數(shù),并用該函數(shù)實例化3個生成器:一個用于訓(xùn)練,一個用于驗證,還有一個用于測試。每個生成器分別讀取原始數(shù)據(jù)的不同時間段:訓(xùn)練生成器讀取前200 000個時間步,驗證生成器讀取隨后的100 000個時間步。
(7)假設(shè)溫度時間序列是連續(xù)的(明天溫度很可能接近今天溫度),并且每天具有周期性變化。因此,一種基于常識的方法就是始終預(yù)測24小時后的溫度等于現(xiàn)在的溫度。本實驗使用平均絕對誤差(MAE)作為評估指標(biāo)。
(8)構(gòu)建模型。本文準(zhǔn)備了一個輕量級網(wǎng)絡(luò),最簡單的數(shù)據(jù)模型Sequential是由多個網(wǎng)絡(luò)層線性堆疊的棧。對于更復(fù)雜的結(jié)構(gòu)應(yīng)該使用Keras函數(shù)式,其允許構(gòu)建任意的神經(jīng)網(wǎng)絡(luò)圖。
(9)將網(wǎng)絡(luò)訓(xùn)練歷史輪次數(shù)據(jù)通過圖表形式表現(xiàn)出來,可以清楚、直觀地看到各輪次訓(xùn)練情況,以便對訓(xùn)練輪次及權(quán)重進行調(diào)整。
(10)在LSTM模型中,隱藏層有50個神經(jīng)元,輸出層有1個神經(jīng)元(回歸問題),輸入變量是一個時間步(t-1)的特征,損失函數(shù)采用Mean Absolute Error(MSE),優(yōu)化算法采用Adam,模型采用40個epochs,并且每個step大小為500。
(11)本實驗3種模型都采用Mean Absolute Error對整個訓(xùn)練輪次平均值進行評估。
(12)將最終訓(xùn)練結(jié)果通過圖表形式展現(xiàn)出來,參考Validation loss以及Training loss的圖形變化情況,對比模型訓(xùn)練效果。
(13)評估模型預(yù)測效果,以選取最好的模型。
4 實驗與分析
4.1 數(shù)據(jù)集
數(shù)據(jù)集主要是由德國馬克思·普朗克生物地球化學(xué)研究所氣象站記錄的天氣時間序列數(shù)據(jù)集。在該數(shù)據(jù)集中,每10分鐘記錄14個不同的量(如氣溫、氣壓、濕度、風(fēng)向等),其中包含多年的記錄。原始數(shù)據(jù)可追溯到2003年,但本文僅選用2009-2016年的數(shù)據(jù)。
4.2 數(shù)據(jù)生成器