張儉讓, 劉睿卿, 李學(xué)文, 王智鵬, 史振東
(1.西安科技大學(xué) 安全科學(xué)與工程學(xué)院, 陜西 西安 710054;2.教育部西部礦井開采及災(zāi)害防治重點實驗室, 陜西 西安 710054)
隨著煤礦智能化的發(fā)展,數(shù)據(jù)量的增長異常迅猛。采煤機是綜采“三機”之一,其工作環(huán)境復(fù)雜,自身安裝有多個傳感器,采樣頻率高,數(shù)據(jù)量大[1-2]。采煤機運行狀態(tài)數(shù)據(jù)屬于動態(tài)的時間序列數(shù)據(jù),可用于采煤機運行狀態(tài)的實時分析判斷及預(yù)測。對采煤機運行狀態(tài)數(shù)據(jù)進行實時采集與分析處理,可一定程度上保障采煤機及人員安全,對采煤機智能化運行具有重要意義[3]。
目前機械設(shè)備的狀態(tài)預(yù)測方法仍然大量使用傳統(tǒng)機器學(xué)習(xí)方法,如自回歸模型[4]、隱馬爾科夫模型[5]、BP神經(jīng)網(wǎng)絡(luò)預(yù)測模型[6]等。這些模型在預(yù)測少量數(shù)據(jù)時取得了不錯的效果,但面對大量數(shù)據(jù)應(yīng)用時往往效果不理想。
Storm是一種開源的分布式實時大數(shù)據(jù)處理框架,具有適用場景廣泛、可伸縮性高、無數(shù)據(jù)丟失的特點,適用于大量時間序列流數(shù)據(jù)的實時處理[7-8]。因此,本文在Storm框架基礎(chǔ)上進行采煤機運行狀態(tài)預(yù)測。循環(huán)神經(jīng)網(wǎng)絡(luò)在處理與時間序列相關(guān)的數(shù)據(jù)方面取得了良好效果,但在反向傳播過程中,隨著層數(shù)增多,會出現(xiàn)梯度消失或者爆炸現(xiàn)象,對模型的擬合程度有較大影響。門控循環(huán)單元(Gate Recurrent Unit,GRU)是循環(huán)神經(jīng)網(wǎng)絡(luò)的一種變體,其解決了長距離時序數(shù)據(jù)預(yù)測中容易出現(xiàn)的梯度爆炸和消失問題,應(yīng)用于金融時間序列預(yù)測[9]、電力負荷預(yù)測[10]等領(lǐng)域時取得了良好效果。因此,本文采用GRU預(yù)測采煤機的時序數(shù)據(jù),結(jié)合Storm框架和GRU實現(xiàn)采煤機運行狀態(tài)預(yù)測。
Storm的核心組件主要包括主控節(jié)點(Nimbus)和從節(jié)點(Supervisor)。Nimbus節(jié)點主要負責(zé)資源分配和任務(wù)調(diào)度,Supervisor節(jié)點負責(zé)接收Nimbus分配的任務(wù),管理和啟動所有的工作(Worker)。1個Supervisor對應(yīng)4個Worker,1個Worker對應(yīng)1個拓撲(Topology),Topology由Stream、Spout和Bolt組成。Stream即數(shù)據(jù)流;Spout充當采集器的角色,實現(xiàn)與數(shù)據(jù)源的連接;Bolt為業(yè)務(wù)邏輯運算節(jié)點,訂閱多個Spout,實現(xiàn)業(yè)務(wù)處理、連接運算等操作。Storm數(shù)據(jù)流模型基本結(jié)構(gòu)如圖1所示。

圖1 Storm數(shù)據(jù)流模型基本結(jié)構(gòu)
GRU結(jié)構(gòu)如圖2所示。其中xt為t時刻的輸入值,ct為記憶細胞,ht為t時刻隱藏單元的歷史信息,at為重寫的記憶細胞的候選值,ot為t時刻的輸出值,rt為重置門,ut為更新門。GRU通過記憶細胞ct將歷史數(shù)據(jù)信息保存下來,用于數(shù)據(jù)預(yù)測。當t時刻實際數(shù)據(jù)xt到達時,結(jié)合隱藏單元歷史信息ht-1,通過更新門和重置門控制上一個單元有多少信息可以保留,當前單元有多少信息可以添加到記憶細胞ct并傳遞給下一個單元,通過激活函數(shù)輸出當前時刻的預(yù)測值ot。常用的激活函數(shù)為tanh,K類別分類問題可以選用softmax作為激活函數(shù)。為了簡化描述,設(shè)置輸出的激活函數(shù)為softmax函數(shù),隱藏層的激活函數(shù)為tanh函數(shù)。

圖2 GRU結(jié)構(gòu)
更新門ut用于確定上一隱藏層中的記憶信息,重置門rt用于確定上一隱藏層中的遺忘信息,記憶細胞候選值at用于確定當前的記憶內(nèi)容,記憶細胞ct用于確定當前要保留的信息,其計算公式分別為
ut=σ(wu[ct-1,xt]+bu)
(1)
rt=σ(wr[ct-1,xt]+br)
(2)
at=tanh(wh[rtct-1,xt]+bc)
(3)
ct=utat+(1-ut)ct-1
(4)
式中:σ為sigmoid函數(shù);wu,wr,wh分別為更新門ut、重置門rt和記憶細胞候選值at的更新權(quán)值;bu,br,bc分別為更新門ut、重置門rt和記憶細胞候選值at的偏差值。
基于Storm的采煤機運行狀態(tài)數(shù)據(jù)分布式實時預(yù)測模型如圖3所示。采煤機運行狀態(tài)數(shù)據(jù)是以固定時間間隔源源不斷地產(chǎn)生,本文結(jié)合在煤礦收集的采煤機運行狀態(tài)數(shù)據(jù),在Hadoop分布式存儲數(shù)據(jù)庫中通過crontab編寫定時讀取數(shù)據(jù)的腳本,用來模擬采煤機的實時數(shù)據(jù)流。將流數(shù)據(jù)傳送到不同的消息隊列Spout中,Spout將數(shù)據(jù)以元組流的形式發(fā)送給相應(yīng)Bolt,通過多個Bolt實現(xiàn)對數(shù)據(jù)的預(yù)處理、預(yù)測、誤差計算及存儲,最終實現(xiàn)對采煤機運行狀態(tài)數(shù)據(jù)的實時預(yù)測[11]。

圖3 基于Storm的采煤機運行狀態(tài)數(shù)據(jù)分布式實時預(yù)測模型
為方便管理海量的采煤機運行狀態(tài)數(shù)據(jù),基于Hadoop[12]設(shè)計數(shù)據(jù)存儲結(jié)構(gòu),包括1張索引表和多張數(shù)據(jù)表[13]。索引表包括監(jiān)測點位置、預(yù)測模型、預(yù)警閾值上界TUBn(n為監(jiān)測點數(shù))和下界TLBn,見表1。數(shù)據(jù)表通過行增長的方式模擬時間序列,每一列代表某個監(jiān)測點所采集的時間序列數(shù)據(jù),見表2,其中m為時間點數(shù),Datanm為監(jiān)測數(shù)據(jù)。在實際生產(chǎn)中,各個測點的實時運行數(shù)據(jù)會以固定時間間隔存入Hadoop中,經(jīng)主控節(jié)點Nimbus的調(diào)配傳入 Spout中進行處理。

表1 索引表

表2 數(shù)據(jù)表
Spout通過調(diào)用nextTuple()方法從Hadoop中提取相應(yīng)監(jiān)測點的信息,將信息封裝后傳遞給Bolt,具體步驟如下:
(1) 連接Hadoop,從相應(yīng)監(jiān)測點的數(shù)據(jù)表中讀取n個數(shù)據(jù)。
(2) 判斷數(shù)據(jù)序列長度是否達到預(yù)測的歷史數(shù)據(jù)樣本容量N,達到則進行步驟(4),否則進行步驟(3)。
(3) 從數(shù)據(jù)庫讀取新數(shù)據(jù),將新數(shù)據(jù)添加到序列末尾,跳回步驟(2)。
(4) 將數(shù)據(jù)封裝成元組形式發(fā)送到預(yù)處理Bolt。
Bolt接收Spout傳遞的元組,通過多個Bolt調(diào)用execute()方法,分別實現(xiàn)數(shù)據(jù)的預(yù)處理、預(yù)測、誤差計算和存儲,具體步驟[14]如下:
(1) 預(yù)處理Bolt接收從Spout傳遞來的元組,解析對應(yīng)監(jiān)測點的N個數(shù)據(jù);導(dǎo)入python包處理異常值,并將數(shù)據(jù)標準化,以元組形式發(fā)送到GRU預(yù)測Bolt。
(2) 預(yù)測Bolt接收預(yù)處理Bolt傳遞的標準化后的數(shù)據(jù),導(dǎo)入訓(xùn)練好的GRU模型,預(yù)測下一時刻的數(shù)據(jù),并等待該時刻實際數(shù)據(jù),將預(yù)測數(shù)據(jù)和實際數(shù)據(jù)一起發(fā)送到預(yù)警Bolt。
(3) 預(yù)警Bolt根據(jù)設(shè)定的閾值判斷是否要預(yù)警,將預(yù)測結(jié)果和預(yù)警信息發(fā)送到存儲Bolt。
(4) 存儲Bolt接收數(shù)據(jù)并存儲。
以某礦綜采工作面MG400930-WD電牽引采煤機的數(shù)據(jù)為例,取采煤機中的截割部電動機電流、截割部電動機溫度、牽引部電動機電流、牽引部電動機轉(zhuǎn)速、調(diào)高泵工作壓力、調(diào)高泵工作轉(zhuǎn)速、冷卻水壓、變頻器電流8種監(jiān)測數(shù)據(jù)(依次用a—h表示)各1 000條作為實驗數(shù)據(jù)。
首先進行GRU模型訓(xùn)練。對原始數(shù)據(jù)中的缺失值、異常值及噪聲進行預(yù)處理,將預(yù)處理后的數(shù)據(jù)作為輸入數(shù)據(jù)。將輸入數(shù)據(jù)以7∶3的比例分為訓(xùn)練集和測試集。隱藏層針對訓(xùn)練集進行訓(xùn)練,通過優(yōu)化函數(shù)Adam、損失函數(shù)MSE調(diào)節(jié)模型的超參數(shù),以損失值最小作為調(diào)優(yōu)準則對模型進行優(yōu)化。
通過訓(xùn)練找到GRU的最優(yōu)參數(shù),在Hadoop上模擬實時數(shù)據(jù)流,設(shè)置基本時間窗口為1 min。在主控節(jié)點Nimbus調(diào)控下,將8種測試集數(shù)據(jù)并行輸入8個Worker中,在各自的拓撲中完成對數(shù)據(jù)的預(yù)測和預(yù)警。
GRU超參數(shù)尋優(yōu)結(jié)果見表3,其中C1—C7分別為尋優(yōu)訓(xùn)練次數(shù)、學(xué)習(xí)率、神經(jīng)元數(shù)量、權(quán)重衰減、時間步數(shù)、每次訓(xùn)練樣本數(shù)、隱藏層數(shù)。從表3可看出,8種監(jiān)測數(shù)據(jù)在GRU模型中收斂的訓(xùn)練次數(shù)不同,但均小于500次,收斂速度較快。

表3 GRU超參數(shù)尋優(yōu)結(jié)果
將訓(xùn)練好的GRU導(dǎo)入Bolt中,用測試集模擬實時數(shù)據(jù)流,各測試集中300個點的真實值和預(yù)測結(jié)果對比如圖4所示。

a) 截割部電動機電流
4.3.1 GRU預(yù)測結(jié)果評價
采用平均絕對誤差(MAE)、均方根誤差(RMSE)及擬合優(yōu)度(R2)作為GRU擬合程度的評價指標,其計算公式分別為
(5)

如果我們回到一般城邦的具體的人員構(gòu)成上,就會發(fā)現(xiàn),在寡頭制和平民制中,窮人階層和富人階層可以得到很好的混合,即形成一個人數(shù)較多的中產(chǎn)階層,他們既不太窮,又不太富,而是擁有中等家資。這是貧富混合得適中、恰到好處的一個階層。如果他們執(zhí)政,則可以兼得平民制和寡頭制的好處,能服務(wù)于所有公民;同時,這種財富狀況對于他們的政治美德培養(yǎng)是一個極好的基礎(chǔ),因為他們“最容易聽從理性”[2](P144),可以避免人的兩種極端的性格品質(zhì)。這樣的城邦就是盡可能地由平等或同等的人所組成,這樣他們之間就能坦蕩地交往,并且產(chǎn)生出公民友誼,所以,這樣的城邦就將是現(xiàn)實中最優(yōu)良的城邦,能得到最出色的治理。
(6)
(7)

GRU預(yù)測結(jié)果評價指標對比見表4。

表4 評價指標對比
擬合優(yōu)度R2的值越接近1,MAE和RMSE的值越接近0,效果越好。由表4可知,因為原始數(shù)據(jù)較大,數(shù)據(jù)類型d和f的MAE和RMSE的值相對較大,而其余類型的原始數(shù)據(jù)較小,誤差也相對較小。8種數(shù)據(jù)的MAE和RMSE均接近0,初步判斷GRU可作為預(yù)測模型。8種數(shù)據(jù)的R2均達到0.9以上,說明基于Storm的分布式時間序列實時預(yù)測模型適用于采煤機運行狀態(tài)數(shù)據(jù)的預(yù)測。
4.3.2 預(yù)警的準確性
根據(jù)經(jīng)驗和誤差要求,設(shè)定各類實驗數(shù)據(jù)的閾值,見表5,其中Ie1,Ie2分別截割部電動機、牽引部電動機的額定電流,Ie1=87 A,Ie2=105 A。

表5 數(shù)據(jù)閾值設(shè)定
根據(jù)閾值設(shè)定,將各類數(shù)據(jù)的狀態(tài)分為正常、注意和故障3種。當采煤機運行時,若數(shù)據(jù)未達到注意值,則狀態(tài)為正常,工作性能穩(wěn)定,無需采取措施;若數(shù)據(jù)達到注意值而未達到故障閾值,則狀態(tài)為注意;若數(shù)據(jù)達到故障閾值,則狀態(tài)為故障。預(yù)測Bolt在得到預(yù)測數(shù)據(jù)而實際數(shù)據(jù)未到時,對數(shù)據(jù)狀態(tài)進行預(yù)測并作出相應(yīng)預(yù)警[15]。測試集的各數(shù)據(jù)預(yù)測狀態(tài)與實際狀態(tài)的對比結(jié)果如圖5所示,其中縱坐標1,2,3分別表示正常、注意和故障3種狀態(tài)。各類數(shù)據(jù)的預(yù)警準確率見表6。

(a) 截割部電動機電流
從表6可看出,除冷卻水壓外,其余數(shù)據(jù)的預(yù)警準確率均達到95%以上,滿足實際應(yīng)用要求。由于冷卻水壓數(shù)據(jù)值較小,注意值和故障閾值間隔很小,預(yù)測時誤差偏大,但也達到85%以上,準確率較高,具有一定的實用價值。

表6 預(yù)警準確率
4.3.3 處理時間
實驗?zāi)M從傳感器得到數(shù)據(jù)并傳入Hadoop中,Storm從Hadoop中讀取數(shù)據(jù),主控節(jié)點Nimbus通過Zookeeper監(jiān)控和分配任務(wù),通過Supervisor節(jié)點將具體的處理邏輯交由Worker完成。分別測量將流數(shù)據(jù)傳入Spout中所需要的時間,Spout將數(shù)據(jù)分發(fā)給Bolt所需要的時間,預(yù)處理Bolt、預(yù)測Bolt、預(yù)警Bolt和存儲Bolt所需要的總時間,結(jié)果見表7。

表7 預(yù)測模型處理時間
從表7可看出,數(shù)據(jù)庫、Worker中Spout和各Bolt針對流數(shù)據(jù)的處理速度較快,整個預(yù)警過程共10 s左右,遠低于測點數(shù)據(jù)采集間隔(1 min), 因此,可滿足應(yīng)用要求。
(1) 提出基于Storm的采煤機運行狀態(tài)數(shù)據(jù)分布式實時預(yù)測模型,結(jié)合Hadoop 數(shù)據(jù)庫,模擬實際生產(chǎn)中采煤機時間序列運行數(shù)據(jù),采用深度學(xué)習(xí)中的GRU對數(shù)據(jù)進行處理,實現(xiàn)對采煤機運行狀態(tài)數(shù)據(jù)的預(yù)測和預(yù)警。
(2) 實驗結(jié)果表明:GRU收斂速度較快,且擬合優(yōu)度達到0.9以上;各種數(shù)據(jù)狀態(tài)預(yù)測的準確率均達到85%以上,整個預(yù)警過程僅需10 s左右,遠低于測點數(shù)據(jù)采集間隔(1 min),模型的預(yù)警準確率和效率均能滿足要求。
(3) Storm框架仍需進行包括負載均衡、集群調(diào)優(yōu)等優(yōu)化,以更好地滿足應(yīng)用要求,下一步將對此進行研究。