唐海賢李光輝?
(1.江南大學人工智能與計算機學院,江蘇 無錫214122;2.物聯網技術應用教育部工程技術研究中心,江蘇 無錫214122)
傳感器網絡經常被于環(huán)境監(jiān)測領域,傳感器節(jié)點需要不間斷地采集環(huán)境參數,形成隨時間變化的傳感器數據流。受監(jiān)測環(huán)境、通信信道或節(jié)點本身等多方面因素的影響,傳感器節(jié)點采集到的原始數據流會不可避免地存在缺失、數據異常等問題。傳感器數據流的異常檢測是為了及時發(fā)現數據流中與正常模式有明顯差異的數據[1]。檢測到異常數據之后,便可以實現對環(huán)境事件的實時報警、異常數據修復、節(jié)點故障修復等應用。因此,傳感器數據流的異常檢測對于監(jiān)測系統的可靠性保障和管理部門的決策支持均有重要意義[2]。
數據流的異常檢測是數據科學中非常重要的一方面。近年來,已經有大量的研究者利用機器學習方法,提取數據流(比如傳感器數據流)的特征來進行數據流的異常檢測[3]。根據異常檢測的建模類型,數據流的異常檢測方法分為三類[4]:統計建模方法、時序特征建模方法、空間特征建模方法。異常檢測算法按照是否需要人工標注好的數據集,則可將數據異常檢測算法分為有監(jiān)督學習異常檢測算法和無監(jiān)督學習異常檢測算法。
Wazid等人[5]利用K-means聚類算法檢測無線傳感網絡(WSN)的入侵異常。他們通過分析數據流的統計特征,計算出正常數據和異常數據的聚類中心。并通過計算WSN數據與聚類中心的歐氏距離進行異常檢測,對特定種類的入侵異常有較高的檢測準確率。Lee等人[6]將SOM算法[7]與K-means聚類結合,實現了在線異常檢測。該算法通過實時更新的網絡結構,并利用新數據的適應程度重建異常簇或拆分正常簇,實現了對新型異常的檢測。這類算法在檢測統計異常時具有高的檢測準確率,并且不需要提前標注數據集,是無監(jiān)督異常檢測算法,但是它們難以區(qū)分與異常數據具有相似分布的正常數據。
Wu等人[8]研究了LSTM算法[9]在工業(yè)物聯網傳感器數據流異常檢測中的應用。他們使用LSTM模型預測未來數據,通過預測值與實際值的誤差檢測異常數據。Feng等人[10]利用LSTM模型提取工業(yè)控制系統數據的時序特征,并使用Softmax分類異常數據。這些方法利用RNN提取數據流的時序特征,通過預測算法預測未來數據,并利用預測值與真實值的誤差檢測異常值;或者使用分類算法檢測異常數據。這類算法對于具有確定時序特征的數據流有好的檢測準確率,對于不具有確定時序特征的數據流無法準確檢測。
Shi等人[11]研究了將CNN與LSTM結合來預測未來的降水強度。他們利用CNN和LSTM提取數據的時間與空間特征[12],使用預測算法預測未來數據。Kim等人[13]使用C-LSTM模型檢測網絡流量數據的異常值。該算法利用CNN提取數據的空間特征,利用LSTM提取數據的時間特征,并利用預測算法或分類算法檢測異常數據。該算法對具有明顯時空特征的數據具有好的檢測準確率。但是這類有監(jiān)督學習異常檢測算法對于數據集的構建有很高要求,需要訓練集盡可能包含全部的異常種類,并有足夠的數據量。但是現實中,環(huán)境監(jiān)測數據流具有正常數據和異常數據占比不平衡、數據隨時間會有較明顯的周期性波動、異常數據種類多樣等特點[4],很難對采集的數據進行準確的標注,或者很難獲取純凈的數據(全部是正常值的數據),因此不能有效檢測新型異常。
綜上所述,不需要提前標注數據的無監(jiān)督異常檢測算法有很大的局限性,只適合檢測統計異常。有監(jiān)督異常檢測算法可以有效利用環(huán)境監(jiān)測數據流的時空特性,對各種異常都有高的檢測準確率,但是難以獲取有效的有標注數據集。因此,需要針對環(huán)境監(jiān)測數據流研究既能有效檢測具有時空特征的異常數據,又能有效檢測新型異常數據的半監(jiān)督異常檢測算法[6,14]。為實現上述目標,本文針對到達服務器端的環(huán)境監(jiān)測傳感器數據流,提出了一種基于C-LSTM的傳感器數據流半監(jiān)督在線異常檢測算法(Semi-Supervised Online Anomaly Detection Algorithm of Sensor Data Stream Using C-LSTM Neural Network,簡記為C-LKM)。
C-LSTM模型是一種將卷積神經網絡(CNN)與長短時記憶網絡(LSTM)相結合,來分類時序序列的多層前饋網絡[13],網絡結構如圖1所示。C-LSTM網絡利用時序序列作為輸入,經卷積神經網絡提取高維特征,并將卷積神經網絡最后一層最大池化層(Max Pooling)的輸出作為LSTM網絡的輸入。將LSTM網絡提取的特征展開,經過全連接層進一步提取輸入數據的特征,最終利用Softmax函數,獲取輸入數據的預測結果。
圖1 C-LSTM網絡模型
其中LSTM網絡采用加入peephole connection的LSTM模型[15],其特點是在三個控制門的輸入分別加入細胞狀態(tài)信息。其狀態(tài)方程為:
式(1)~式(5)使用的符號:i,f,o分別代表著LSTM的輸入、遺忘門、以及輸出門。式(1)~式(5)使用的符號c、h分別代表著LSTM網絡一個單元的狀態(tài),以及隱藏層的狀態(tài)。σ為激活函數,比如tanh、Relu函數。W代表LSTM對應門的權值矩陣,b為偏置。Pt用于表示LSTM網絡t時刻的輸入,其輸入為CNN網絡的池化層在t時刻的輸出。其中符號°表示矩陣Hadamard乘積。LSTM單元為模型提取了傳感器數據流在時間上的特征。
使用Softmax函數對LSTM網絡的輸出進行判別,判斷結果為0或1。0代表正常數據,1代表異常數據。
K-means即K均值算法,是一種無監(jiān)督的聚類算法[16]。對于給定樣本D,K-means算法針對聚類所得簇C={c1,c2,c3,c4}最小化平方誤差。這里使用歐氏距離作為兩點之間的距離,進行聚類。
C-LSTM模型使用了CNN和LSTM兩種神經網絡,LSTM利用CNN提取的傳感器數據流高維特征作為輸入,并繼續(xù)提取其時間特征,最后經全連接層壓縮數據后,交由Softmax函數判定是否為異常。CLSTM網絡的預測結果為Yclstm。
C-LSTM模型可以根據實際應用調整其網絡結構,令其包含不同數量的卷積層、池化層、LSTM隱藏層。同時,變量數量也會發(fā)生變化。模型的大小以及變量數量會影響最終的識別效果以及識別速度。一般來說,模型規(guī)模越大,識別效果越好,識別速度越慢。同時,C-LSTM模型可以適應不同尺度的輸入數據,在改變輸入數據的尺寸(維數、窗口長度)時,模型需要微調。
本文的輸入是時間窗口長度l=101的傳感器數據流,每條數據包含4個屬性,使用兩層卷積加上兩層LSTM的C-LSTM網絡結構來檢測輸入數據的異常信息,每層LSTM網絡包含64個節(jié)點。其網絡結構如表1所示。該網絡結構包含兩個卷積層,兩個池化層,一個LSTM網絡,兩個全連接層,用tanh函數作為激活函數。在卷積層,使用的卷積核大小為5,卷積步長為1,對輸入數據均不使用padding。在池化層,使用最大池化來壓縮特征數量,池化核尺寸為2,池化步長為2。使用卷積層最后一層池化層的輸出作為LSTM網絡的輸入。使用tanh函數作為C-LSTM網絡的激活函數。
表1 C-LSTM網絡結構
tanh函數用于將一個實數映射到[-1,1]范圍內,當輸入為0時,tanh函數的輸出也為0。Tanh函數對中間部分的變化敏感,并可以有效抑制兩端,對分類有利[17]。本文使用tanh函數作為激活函數,一方面可以在傳感器數據流出現異常后,有效地捕捉到傳感器數據流的細微變化,另一方面能夠將網絡輸出數據壓縮到[-1,1]之間,使得數據在卷積神經網絡的層與層之間傳遞時不發(fā)生擴散,不超限,加速網絡擬合,增加網絡的魯棒性。
使用K-means模型更新算法可以使異常檢測算法在遇到數據分布變化時(如出現數據波動、出現訓練集中沒有的數據分布),及時更新模型的權重,使其學習到新的數據分布。
K-means模型的輸入與C-LSTM模型的輸入相同。使用K-means將數據聚類為4個簇C={c1,c2,c3,c4},并獲取其四個聚類中心CenterP={cp1,cp2,cp3,cp4},并將其中包含數據數量最少的簇ci設置為異常簇,其余簇設置為正常簇。若存在多個包含數據數量最小的簇,則計算各聚類中心到其余簇聚類中心的合向量的模VectorMod={vm1,vm2,vm3,vm4},并將所有包含數據數量最小的簇中合向量的模最大的簇設置為異常簇,其余簇設置為正常簇。據此,獲取新的簇的集合{CP,CN},其中CP為異常簇,CN為正常簇,由此獲得K-means的分類標簽YK-means。
定義1(合向量的模)各聚類中心cpi到其余聚類中心的合向量的模vmi定義如下:
算法1 用K-means獲取分類標簽
定義2分類誤差ε是指,C-LSTM分類結果Yclstm和K-means分類結果YK-means不同的數據的個數。
分類誤差的閾值g根據經驗值選取10。如果分類誤差大于閾值g,則認定C-LSTM分類器分類結果不可信,并執(zhí)行網絡更新步驟;若分類誤差小于閾值g,則認定C-LSTM分類器分解結果可信,并將其結果作為輸出。
本文提出的C-LKM算法網絡更新,僅更新CLSTM網絡中的LSTM網絡。更新方法包含有標注數據生成以及網絡更新兩部分。
有標注數據生成方法如下:
首先,認定C-LSTM和K-means分類所得標簽Yclstm與YK-means相同部分對應的數據為可信數據,并對其進行標注;之后,利用K-means算法對不可信數據以k=2進行再次聚類,并將聚類所得簇中,數據量少的認定為異常簇,數據量多的認定為正常簇,并對其進行標注;之后將標注好的數據合并,作為CLSTM網絡的輸入,重新分類。
算法2 標注數據
網絡更新方法如下:
將新生成的有標注數據輸入預訓練的CNN提取數據的高維特征,并將提取好的特征作為LSTM網絡的輸入;之后,利用反向傳播不斷更新LSTM網絡的參數,直到LSTM網絡的輸出經全連接層以及Softmax分類器分類結果同原始有標注數據誤差小于分類誤差閾值g時,結束迭代,此時異常檢測模型成功學習到新的數據分布;若迭代次數超過20次,結束迭代,此時異常檢測模型未能學習到新的數據分布。至此,網絡更新結束。這樣可以有效避免因為數據分布變化帶來的異常檢測誤報率上升、檢測精度下降的問題。
C-LKM算法在檢測時不斷以最新獲取的分類誤差較大的數據作為網絡輸入重新訓練LSTM網絡,使其記住最新數據的時間特征。
正常情況下,傳感器網絡采集的數據變化平緩,當異常發(fā)生時,某個傳感器的數據會表現為較大的波動,當某些傳感器的數據超出閾值時,判定為異常。異??梢苑譃槿齻€類別,孤立點異常、上下文異常、集體異常[4]。這些異常發(fā)生時對應的特征波動相對穩(wěn)定,但是也會出現預先沒有學習到的異常特征波動。這是設計C-LKM的傳感器數據流異常檢測模型的原則。C-LKM的模型結構如圖2所示,整個模型分為預訓練與在線檢測兩大部分。該模型中,程序首先使用有標注的傳感器數據流,對CLSTM網絡進行預訓練,獲取預訓練的C-LSTM網絡,我們稱之為預訓練過程。在線檢測過程中,模型接收并分類無標注的傳感器數據,并使用K-means無監(jiān)督的優(yōu)化C-LSTM網絡,修正模型誤差。
圖2 C-LKM的模型結構圖
算法3 傳感器數據流在線異常檢測算法(C-LKM)
C-LKM模型既考慮了傳感器數據流的空間相關性,也考慮了其時間相關性,并利用K-means算法實現了模型的半監(jiān)督學習,模型在使用時,只需要少量數據進行預訓練,實際預測中,便可依照數據特征,自動調節(jié)網絡參數,使得模型可以有效分類新型異常數據。
本文實驗在一臺安裝了一塊AMD R72700x CPU,一塊NVIDIA GTX1080Ti GPU,32GB 2666MHz DDR4內存的電腦上完成。AMD R72700x CPU有8個核心,16個線程,能方便地訓練與運行C-LKM模型,以及本文使用的各種對比模型;32GB內存則能保證存儲全部的模型參數。程序運行在Windows10系統,使用numpy 1.18.0以及pandas 0.23.4進行數據預處理以及矩陣運算,使用tensorflow2.0.0利用CPU訓練及運行網絡模型。
為驗證本文提出算法的可行性,使用英特爾伯克利研究室(IBRL)傳感器數據集進行實驗驗證。該數據集是英特爾伯克利研究室(IBRL)在2004年2月28日至2004年4月5日收集的54個傳感器的真實數據。該網絡中,傳感器每隔31 s收集一組包含溫度、濕度、光照強度、傳感器節(jié)點電壓4個屬性的數據[18],傳感器網絡中的節(jié)點分布如圖3所示。選取31號節(jié)點數據作為本文實驗原始數據。
圖3 英特爾伯克利研究室(IBRL)傳感器布置圖
英特爾伯克利研究室傳感器數據流為無標注的原始采集數據,數據中存在缺失值、異常值,在使用它進行實驗之前需要對數據進行預處理。首先,因為采用的31節(jié)點前40000組數據中丟失數據均為該時刻全部的溫度、濕度、光照以及電壓數據,且只存在兩段長時間的數據丟失情況。所以,忽略長時間丟失數據的情況,并對其余缺失值使用線性插值法[19]進行補齊,取補齊后數據的前60000組數據作為實驗數據集,并將預處理后的數據標記為正常數據。
之后,對數據插入異常點。在實驗數據集中,隨機選取一些正常點,將其四個屬性值改為異常值[20]。異常值計算方法為,以隨機選取的異常點為中心,以15為時間窗口,計算該時間窗口內各屬性的均值,以及方差μi={μti,μhi,μli,μvi},其中分別表示第i個時間窗口內,溫度、濕度、光照強度、電池電壓的均值;{μti,μhi,μli,μvi}分別表示第i個時間窗口內,溫度、濕度、光照強度、電池電壓的方差。異常值X′i的計算方法為:
式中:m為計算機生成的隨機數,m為正整數,rm和rv為取值在(0,1]內的隨機數。實驗中,分別向IBRL_31數據集中插入1%、2%、5%、10%的異常點,獲取四組異常占比分別為1%、2%、5%、10%的有標注數據集,實驗數據集如表2所示。
表2 實驗數據集
本文將異常檢測作為二分類問題進行解決,最終分類結果為:異常P、正常N。對于二分類問題,將最終分類結果劃分為:真正例TP(True Positive)、假正例FP(False Positive)、真反例TN(True Negative)、假反例FN(False Negative),其中正例P為異常數據,反例N為正常數據。異常檢測數據集存在正反例占比不均的問題,為準確反映各對比模型的異常檢測性能,采用召回率Recall、精確率Precission、F1-Score作為算法的評價指標。
使用算法方差變化率Rvar檢測K-means模型更新算法對模型預測穩(wěn)定性的提升效果。
定義3算法方差變化率Rvar:
式中:Varr為未用模型更新算法的異常檢測算法異常檢測結果的方差;Vars為使用模型更新算法后,半監(jiān)督異常檢測模型異常檢測結果的方差。
為驗證本文算法在長時間范圍上的有效性,在補齊缺失值的IBRL_31數據集中選取60000組數據,分別插入占比1%、2%、5%、10%的異常點,以前5000組數據作為訓練集,后55000組數據作為訓練集進行試驗。并且記錄模型在每5000組測試數據上的異常檢測準確性。分別用CNN、LSTM、CLSTM、CKM、LKM以及C-LKM在這三組異常占比不同的數據集上進行試驗,其中CKM、LKM分別為CNN、LSTM應用K-means模型更新算法的半監(jiān)督異常檢測模型。使用召回率和F1-Score作為衡量指標,對比其檢測精度,并計算算法在測試集11個不同時間段上檢測結果的召回率以及F1-Score的方差,來驗證K-means模型更新算法對異常檢測模型檢測穩(wěn)定性的提升效果。
圖4 CNN、LSTM、C-LSTM、CKM、LKM、C-LKM算法在各時間段上的F1-Score和召回率
表3 算法在不同異常占比數據集上的F1-Score和Recall
實驗結果如表3和圖4所示,圖4橫坐標表示測試區(qū)間。由圖4可知,C-LKM方法較C-LSTM方法在F1-Score和召回率上有明顯提升。當異常占比為1%時,C-LKM在每一段測試集上的F1-Score最高為0.942,召回率最高為0.983,在全部55000組數據上的F1-Score均值為0.939,召回率均值為0.954。當異常占比為2%時,C-LKM在每一段測試集上的F1-Score最高為0.956,召回率最高為0.989,在全部55000組數據上的F1-Score均值為0.948,召回率均值為0.949。當異常占比為5%時,C-LKM在每一段測試集上的F1-Score最高為0.968,召回率最高為0.980,在全部55000組數據上的F1-Score均值為0.965,召回率均值為0.964。當異常占比為10%時,C-LKM在每一段測試集上的F1-Score最高為0.976,召回率最高為0.977,在全部55000組數據上的F1-Score均值為0.970,召回率均值為0.954。相較于其他對比算法,C-LKM算法提升了異常點檢測準確度。對比未使用K-means模型更新算法的原算法,使用K-means模型更新算法之后,模型在各區(qū)間上的F1-Score和召回率均獲得明顯提升,其中,K-means模型更新算法對CNN以及LSTM算法提升最明顯。這是由于單獨的CNN無法有效提取傳感器數據流的時間特征,單獨的LSTM算法無法有效提取傳感器數據流的空間特征,這導致預訓練期間,他們的模型無法有效擬合。隨著輸入數據增加,K-means模型更新算法可以利用新獲取的傳感器數據繼續(xù)訓練預訓練模型,幫助模型進一步擬合,從而提升模型異常檢測效果。C-LSTM算法本身已經可以有效提取傳感器數據流的時空特征,在預訓練階段已經獲得了較好的擬合效果,但是由于訓練集數量較少,只有5000組數據,并且訓練集異常占比低,異常種類不全,導致模型并未完全擬合。之后,K-means模型更新算法依舊可以利用新獲取的傳感器數據流繼續(xù)訓練模型,使得模型進一步擬合,提升了模型異常檢測效果,但是提升幅度沒有前兩種模型高。
圖5 CNN、LSTM、C-LSTM、CKM、LKM、C-LKM算法在各數據集分組上的F1-Score和召回率箱型圖
為探究K-means模型更新算法對異常檢測算法異常檢測效果及穩(wěn)定性的提升,以及對比異常檢測算法在不同異常占比的數據集上的異常檢測效果,使用各異常檢測算法在測試集11個時間段上異常檢測結果的召回率以及F1-Score作為元數據,繪制箱型圖。圖5展示了各對比算法在各實驗數據集分組上的F1-Score和召回率箱型圖。其中箱體內部的線表示異常檢測算法在測試集11個時間段上異常檢測結果的召回率以及F1-Score的中位數,箱體部分表示實驗結果第1四分位至第3四分位的數值范圍,三角形表示實驗結果的均值。箱體部分范圍越窄,實驗結果越集中。從圖上可以看出,使用K-means模型更新算法之后,異常檢測結果的F1-Score和召回率均獲得提升,并且實驗結果分布更集中,表明隨著新數據輸入異常檢測模型,模型成功學習到了新型異常的特征,并檢測出了新型異常,這提升了模型的檢測穩(wěn)定性。隨著異常數據占比的提升,異常檢測算法在測試集11個時間段上異常檢測結果的召回率以及F1-Score的分布,呈集中趨勢,以及上升趨勢,這表明,異常數據占比越高,異常檢測算法的異常檢測效果越穩(wěn)定,異常檢測準確度越高。這是由于隨著異常占比的提升,異常檢測數據的數據分布更為理想(二分類問題理想類別比例為1∶1),模型訓練時可以學習到更多的異常類別的特征,以及正常類別的特征,模型擬合的更好。
進一步,使用原異常檢測算法以及使用Kmeans模型更新算法后的異常檢測算法在每一段異常檢測數據集上F1-Score的方差變化率和召回率方差變化率,量化K-means模型更新算法對異常檢測結果穩(wěn)定性的提升效果。圖6所示為各算法的F1-Score和召回率在每一段測試集上的方差。表4展示了K-means模型更新算法對異常檢測結果穩(wěn)定性的提升效果。從表中可以看出,使用K-means模型更新算法之后,F1-Score最高提升了73.1%,召回率最高提升了31.1%,并且對F1-Score穩(wěn)定性的提升遠高于對召回率穩(wěn)定性的提升。由于F1-Score是綜合了準確率和召回率的評價指標。因為異常檢測數據集中,異常占比低,即使將所有數據全部檢測為正常數據,獲取的準確率也高于90%。原算法的F1-Score波動較大說明原算法的誤報率(FPR)不穩(wěn)定,原算法的異常檢測準確率受正常數據在短時間范圍內的波動影響較大,這也是由訓練集在總數據集上占比小,無法反映完整數據集的數據分布導致的[21]。K-means模型更新算法使原算法在數據流發(fā)生波動時及時調整權重,來適應數據流在短時間范圍上的波動,并且在遇到未學習到的數據分布時及時調整權重,從而學習到了新的數據分布。表4中部分Recall的穩(wěn)定性變化率為負值,這表明在全部的測試結果中,召回率的穩(wěn)定性存在變壞的情況。這由兩種情況導致:①模型重訓練時存在過擬合的可能;②K-means模型更新算法將占比最少的簇設置為異常簇,這使得系統可以利用新的數據流重新訓練異常檢測模型,但是這種分類方法不完全可信,可能將某些正常數據劃分成異常數據,導致模型向相反的方向訓練,最終使得召回率穩(wěn)定性下降。
圖6 各算法的F1-Score和召回率在每一段測試集上的方差
表4 K-means模型更新算法對異常檢測結果穩(wěn)定性的提升 單位:%
為探究K-means模型更新算法對檢測時間上的影響,本文統計并分析CKM、LKM以及C-LKM在線檢測階段(使用測試集)觸發(fā)模型更新的次數,以及模型更新所用的時間,得出的結論如表5所示。其中觸發(fā)次數指的是在線檢測階段各實驗模型觸發(fā)模型更新的次數;平均時間指的是完成一次模型更新使用的平均時間,單位是毫秒(ms);失敗次數指的是在一次模型更新中,模型經歷20次迭代之后,其分類誤差依舊超過閾值的次數。模型更新失敗代表著模型沒有學習到近期數據的有效特征。從表5可以看出,三種使用了K-means模型更新算法的模型在在線檢測階段均觸發(fā)了模型更新機制,其中CKM、LKM由于其原始算法CNN、LSTM的檢測準確度低,其觸發(fā)模型更新機制的次數也很高,其模型更新的失敗次數也很高說明了這兩種算法的可以有效的學習到新數據的特征,但是受限于原始模型的性能,其無法準確學習到新數據的特征。C-LKM的模型更新機制觸發(fā)次數很少,模型更新失敗次數也很少,說明其可以有效并準確地學習到新數據的特征。同時,三種模型在本實驗平臺上,模型更新速度都是毫秒級,實際應用中不會造成性能瓶頸。
表5 模型更新機制統計結果
本文提出了一種針對到達服務器端的環(huán)境監(jiān)測傳感器數據流在線異常檢測的半監(jiān)督學習方法,該方法只需要少量的有標注數據集作為訓練集,所提的K-means模型更新算法可以提高原算法在長時間范圍上的檢測準確度以及檢測穩(wěn)定度。在本實驗平臺上,C-LKM算法對于單一節(jié)點數據的平均檢測時間在毫秒級,對于以固定時間間隔上報數據的環(huán)境監(jiān)測傳感器網絡的異常檢測應用不會造成性能上的瓶頸。本研究的實證結論對將現有的有監(jiān)督異常檢測模型轉變?yōu)榘氡O(jiān)督模型提供了一種參考。