馬浩軒 楊笑千 廖真 崔宸 張力丹
(中國核動力研究設計院信網中心,四川 成都 610213)
時間序列數據,是將同一統計索引的一系列數字,按發生時間進行排序從而生成的數列。異常檢測,就是通過建立模型,檢測數據中的離群點(又稱不一致點、污點)[1]。異常檢測的應用場景極為廣泛,目前在金融、工業、軍事、機器人,物聯網等多個領域,針對時序數據的異常檢測對系統的穩定性有極其重要的地位與意義[2]。
傳統的時間序列數據異常檢測方法通常聚焦在一維場景下,Hawkins 等人利用三次指數平滑法來實現的異常檢測利用歷史數據中的不同特征來推測當前數據值在商業領域十分有效[3]。Denkena 等人提出了針對時序數據異常檢測的Skyline 項目包含了一組簡單的檢測器和一個投票方案,以輸出最終的異常評分,在監測高流量網站的實時異常方面卓有成效[4]。
神經網絡模型在時間序列數據異常檢測方面具有一定優勢,是對于時間序列數據訓練最常見的算法模型之一[5]。近年來,長短期記憶網絡(LSTM),LSTM 長短期記憶網絡因其在處理時序數據方面的優勢而受到了廣泛的關注,同時LSTM 改進了RNN 無法處理長距離關聯性的缺點,因此有許多學者提出了基于LSTM 的異常檢測算法[6-7]。Numenta 公司提出了基于RNN 的層級實時記憶HTM 算法,并提出公開數據集NAB,在NAB 數據集上驗證了HTM 算法的性能[8]。
對于時間序列來說,t 時刻的數值對于t-1 時刻有很強的依賴性。針對最近時間窗口內的數據遵循某種趨勢的現象,可以使用曲線來匹配數據的變化趨勢,當新數據打破趨勢,曲線不平滑時,該點可以判定為一個疑似異常點。
現在比較常用曲線擬合方法有線性回歸、moving average等[9]。本文介紹EWMA 來擬合曲線,EWMA 的遞推公式是:

其中,a 是一個0-1 間的小數,稱為平滑因子,有時將EWMA(1)取值為先驗數據的均值。a 越小時EWMA(1)的取值對結果的準確性影響越大。
很多監測項目都存在周期性,其中最為常見的周期為一天。考慮到監測項的周期性,可以選擇監測項最近n 天的數據。這樣可以得到檢測項在不同周期的n 個數據進行參考,記為xi,其中i=1,2,3,…,14。
首先考慮靜態閾值法判斷輸入是否異常(驟增驟減)。如果輸入小于最近n 天內的最小值乘以閾值,則可以認為該點是不一致點(驟減);此外,如果大于過去n 天的最大值乘以閾值,則可以認為該點是不一致點(驟增)。
基于同期數據的檢測算法是靜態閾值的取值,目前常用的方法是根據先驗知識得出,實際中如何給maxthreshold(最大閾值)和minthreshold(最小閾值)賦值是一個值得研究的課題,一種常見的思路是取先驗數據的均值。
基于同期振幅的檢測方法是利用兩個趨勢圖“長得差不多”的特點?如圖1 所示。

圖1 某流量示意圖

我們還可以針對時序數據最近時間窗口(T)內的數據,利用它們遵循特定趨勢的事實來進行異常檢測[10]。我們將T 設置為14,取監測項(nowvalue)和14 個(記為i 點)先驗數據進行對比,如果結果滿足設置的條件,將計數加1,如果計數超過設置的countnum,可以判斷這個監測項存在異常。

上面的公式涉及到thresshold(動態閾值)和countmum兩個參數,countmum可以根據需求進行設置,比如對異常比較敏感,可以設置countmum小一些;而如果對異常不敏感,可以將countmum設置的大一些。業界關于threshold 設置的方法有很多,公式(5)一種比較常用的閾值設置方法。

基于Ensemble 的檢測算法是利用全部數據建立特定的數據結構,進而檢測異常數據的算法,使用最廣泛的是建立二叉樹的iForest 算法[11]。
iForest 是由iTree 構建而成的,首先介紹一下iTree。iTree是使用隨機二叉樹來進行構建,葉子節點沒有子節點,其他節點有左右兩個子節點。對于給定的數據集D,數據集中的所有的特征都是連續變量,iTree 的構造如下:

輸入:全部數據集輸出:iTree在數據集D 中隨機選擇一個特征A;隨機選擇特征A 的一個可能取值value;根據特征A 以及值value 將數據集D 分為兩個子集,將特征A 的值小于value 的樣本歸入左子節點,余下部分歸入右子節點;遞歸構造左右子樹直至滿足以下的條件:a. 傳入的數據集只有一條記錄或多條相同記錄;b. 樹的高度達到了限定高度。End
當前用于異常檢測的神經網絡算法有很多,其中比較常見的有卷積神經網絡(CNN)算法、循環神經網絡(RNN)算法、深度神經網絡(DNN)算法等,本文主要介紹長短期記憶網絡算法。
如圖2 所示,時間為t 的LSTM 網絡有三個輸入[15]:xt表示t 時間的輸入值、h(t-1)表示t-1 時間的輸出值、c(t-1)則為t-1時間網絡單元的狀態;同時它也存在兩個輸出:ht表示t 時間的輸出、ct為t 時間單元的狀態。

圖2 LSTM 示意圖
如圖3 所示,LSTM 使用了三個開關作為長期記憶信息的控制器:

圖3 LSTM“門”開關
遺忘門(forget gate):負責控制繼續保存長期狀態c,它決定了上一時刻的單元狀態c(t-1)有多少保留到當前時刻c(t)。
輸入門(input gate):負責控制把即時狀態輸入到長期狀態c,它決定了當前時刻網絡的輸入x(t)有多少保存到單元狀態c(t)。
輸出門(output gate): 負責控制是否把長期狀態c 作為當前的LSTM 的輸出, 它決定了單元狀態c(t)有多少輸出到LSTM 的當前輸出值h(t)。
遺忘門的計算如公式(6)所示:

其中,遺忘門Wf表示神經網絡的權重,使用[h(t-1),xt]向量將t-1 時間的狀態和t 時間的輸入拼接起來,然后利用偏置項bf遺忘不相關的信息,σ 是激活函數。
數據挖掘是從大量異構數據中挖掘未知潛在信息和知識的過程,大數據的基本特征是數據規模大、數據多樣性。海量復雜的數據中可能會存在一些數據對象,這些數據對象與普通數據的期望行為模式并不一致,被稱為異常值或者離群點。
隨著數據規模和數據多樣性的不斷增大,數據中異常值(或離群點)個數也會不斷地增加,合理有效地處理和應用這些異常值對大數據挖掘具有重要的意義[13]。針對大數據中異常值或者離群點的識別和挖掘稱為異常檢測。雖然數據中的異常值是不尋常的,但是如果考慮的數據量多達數十億時,可能性為“千分之一”的異常值也可能是百萬級,在大數據挖掘過程中這些異常值是不能忽視的。因此,異常值檢測在大數據挖掘中,有著至關重要的作用。
工業互聯網平臺結合大規模數據采集和分析,實時準確高效地處理數據,助力制造業發展新征程[14]。工業互聯網不僅給工業控制系統帶來了便利,也帶來了一系列的安全問題。各種形式的入侵和攻擊層出不窮。開發符合行業需求的安全體系是保障工業互聯網平臺正常運行的前提。各種網絡入侵技術的發展對工業互聯網平臺構成了嚴重威脅。工業控制系統中的現場設備、控制系統和網絡設備存在受到攻擊的風險。這些設備的異常可能會對行業造成嚴重后果。估計的經濟損失會影響生產的發展,甚至會危及人們的生命。應對各種網絡攻擊已成為保障國家關鍵基礎設施安全的重大課題。
異常檢測效果的優劣是諸多場景安全交互的核心。尤其在工業應用中,如果能準確的發現系統中出現的異常,特別是能夠在異常發生的短時間內檢測并報告異常,并根據已有的異常數據對異常進行分析,推斷出異常出現的位置及原因,并給予初步的建議解決方案,這將對系統狀態的穩定起到巨大的作用。