寶信利用Spark Analytics Zoo對基於LSTM的時間序列異常檢測的探索

機器之心發表於2018-09-28

摘要:寶信和英特爾相關團隊利用Analytics Zoo在無監督的基於時間序列異常檢測用例上進行了有益的合作探索,本文分享了合作專案的結果和經驗。

背景

在工業製造行業,有多種方法來避免由於裝置失效導致的生產中斷。常見的方法是定期檢修維護,或者提前更換裝置零部件,這些方法都可能會增加裝置維護和更換的投入。然而,另一個可行的方法是收集不同裝置的大量振動資料,並使用這些資料自動檢測裝置狀態的異常。因此,有效地收集大量的時間序列資料並且大規模地進行異常和失效檢測,對於降低工業製造行業中的的很多不必要的成本是非常關鍵的。

Recurrent neural networks (RNNs)迴圈神經網路,特別是Long short term memory models (LSTMs)長短期記憶模型現在被廣泛應用於訊號處理,時間序列分析等場景。作為connectionist模型,RNNs可以提取網路節點中的動態序列。在這個專案中,我們利用LSTM來模擬震動訊號的統計學規律,並且使用了來自辛辛那提大學的IMS全生命週期資料 (http://ti.arc.nasa.gov/c/3/)來展示裝置異常檢測的分析流程。

Analytics Zoo解決方案

Analytics Zoo (https://github.com/intel-analytics/analytics-zoo)是一個基於Apache Spark和BigDL等構建的analytics(分析)+AI(人工智慧)的平臺,由英特爾開源,該平臺能夠方便地讓使用者將端到端的基於大資料深度學習應用直接部署在已有的Hadoop/Spark的大資料叢集上,而無需安裝專用的GPU裝置。

我們已經在Apache Spark和Analytics Zoo上建立了端到端的基於LSTM異常檢測流程,可以應用於大規模時間序列資料的無監督深度學習。作為LSTM模型的輸入資料的是一系列裝置震動訊號,比如在當前時間點之前50秒的訊號資料,透過這些訊號資料,經過訓練的模型可以預測下一個資料點。當下一個資料點和模型預測的資料點有較大偏差,我們認為該資料為異常資料。圖1所示為一個端到端的資料處理流程。

寶信利用Spark Analytics Zoo對基於LSTM的時間序列異常檢測的探索圖1:基於Analytics Zoo的振動時間序列異常檢測處理流程.

1.處理流程從Spark叢集讀取原始資料並構造RDD(resilient distributed datasets)彈性分散式資料集,並抽取特徵,最後把特徵輸出到Dataframe。在原始資料集中,每個資料描述了一個檢測失效(test-to-failure)的實驗,幷包含了時長為1秒的20K赫茲取樣的即時振動訊號(如圖2所示)。為了訓練深度學習模型,每一秒的統計資料被提取作為特徵資料,包括均方根(Root Mean Square),峰度(Kurtosis),峰值( Peak), 以及小波包分解得到的8個頻段的能量值。

2.處理流程進一步在RDD中處理這些特徵資料,包括數值的小波去噪處理、標準化處理(normalize)和滑動平均處理,以50秒為基準展開特徵資料序列,以便於深度學習模型可以透過前50秒的模式來預測下一個資料點,並最終把資料轉換為Sample RDD。(https://bigdl-project.github.io/master/#APIGuide/Data/#sample).

3.處理流程使用Analytics Zoo中提供的類KerasAPI來建立時間序列異常檢測模型,包括如圖所示的三個LSTM層和一個密集層,並透過資料訓練這個模型(前50個點訓練下一個點)。

val model = Sequential[Float]()
  model.add(LSTM[Float](8, returnSequences = true, inputShape = inputShape))
  model.add(Dropout[Float](0.2))
  model.add(LSTM[Float](32, returnSequences = true))
  model.add(Dropout[Float](0.2))
  model.add(LSTM[Float](15, returnSequences = false))
  model.add(Dropout[Float](0.2))
  model.add(Dense[Float](outputDim = 1))

4.接下來是模型評估:使用測試資料或者全部資料來檢測異常。異常資料是指遠離RNN模型預測的資料點。在這個專案中,我們指定異常資料為整體資料集的10%,也就是距離模型預測數值最遠的那10%資料為異常資料。這個篩選比例設定為可調整引數,可以為每個單獨案例進行調整。

寶信利用Spark Analytics Zoo對基於LSTM的時間序列異常檢測的探索

圖2:時間點2004.02.13.14.32.39上四通道的振動資料

測試結果

圖3顯示了原始振動資料和LSTM模型預測資料的對比。只有峰值和均方根這兩個統計數值顯示出來,其他統計數值具有相似的波動。圖中所示紅點為被識別的異常資料,橙色線條為LSTM模型的預測數值,藍色線條為原始數值。經過訓練的模型最終成功預測了裝置的失效,以及在經過600個時間點之後的震動尖峰,在時間序列早期的一些波動可以作為裝置失效的預警資訊。

寶信利用Spark Analytics Zoo對基於LSTM的時間序列異常檢測的探索

寶信利用Spark Analytics Zoo對基於LSTM的時間序列異常檢測的探索圖3: RNN預測數值和原始震動數值的比較

結論

透過利用無監督深度學習,以及Analytics Zoo提供的端到端處理流程,我們可以有效地在大資料集和標準大資料叢集(Hadoop, Spark等)上應用時間序列異常檢測。透過收集、處理大量的時間序列資料(比如日誌,感測器讀數等),應用RNN來學習資料模式,最終預判資料和判定異常資料,Analytics Zoo提供的端到端處理流程能夠為許多新興的智慧系統如智慧製造、智慧運維、物聯網等提供解決方案。基於時間序列的異常檢測在裝置的智慧監控和預測性維護上可以得到重要應用。

參考文獻

1.https://github.com/intel-analytics/analytics-zoo

2. https://github.com/intel-analytics/BigDL

3. https://www.kaggle.com/victorambonati/unsupervised-anomaly-detection

4. https://iwringer.wordpress.com/2015/11/17/anomaly-detection-concepts-and-techniques/

相關文章