潘玲玲 劉 俊 夏 旻
1(中國電力科學研究院有限公司 江蘇 南京 210003) 2(南京信息工程大學江蘇省大數(shù)據(jù)分析技術(shù)重點實驗室 江蘇 南京 214200)
時間序列的異常數(shù)據(jù)檢測與修正在現(xiàn)實世界中有廣泛的應(yīng)用場景,如電力時間序列數(shù)據(jù)的異常檢測、信用卡欺詐和網(wǎng)絡(luò)入侵檢測等[1]。不同于單樣本的異常檢測,時間序列的數(shù)據(jù)異常檢測需要考慮數(shù)據(jù)的時序特征,因此時間序列的異常檢測相比單樣本檢測更加困難[2]。
目前,時間序列數(shù)據(jù)異常檢測的方法主要有基于統(tǒng)計模型的方法[3-5](ARIMA方法、GARCH方法等)、無監(jiān)督聚類的方法[6-9](K-Means方法、最大似然估計法、密度聚類方法等)和有監(jiān)督分類的方法[10-13](支持向量機、K近鄰法、神經(jīng)網(wǎng)絡(luò)、孤立森林和隱馬爾可夫模型等)?;诮y(tǒng)計模型的方法一般已知序列的分布,通過滑動窗口,計算窗口內(nèi)的數(shù)據(jù)統(tǒng)計特征,實現(xiàn)對異常點的檢測。該方法適用于離散突變的異常值的檢測,而對于連續(xù)區(qū)間的異常數(shù)據(jù)很難有效檢測[14]?;诰垲惖姆椒ㄖ饕ㄟ^距離或密度的度量區(qū)分正常數(shù)據(jù)和異常數(shù)據(jù)。聚類的方法需要大量的距離比較運算,算法復雜度較高,并且聚類的方法對長時序序列的聚類準確性非常低[15]。對于較長的時間序列而言,用聚類的方法實現(xiàn)異常數(shù)據(jù)的檢測是不現(xiàn)實的。時間序列的數(shù)據(jù)異常值檢測可以視作為一種特殊的分類問題[16]。目前許多實踐案例表明基于監(jiān)督學習的分類方法可以有效地應(yīng)用到各類異常檢測任務(wù)[17]。但目前大部分都是基于人工特征的淺層學習模型,這些模型特征提取能力有限,不能有效地提取時間序列數(shù)據(jù)的時序特征,導致檢測結(jié)果較低。另外,淺層學習的分類方法只能實現(xiàn)異常序列的判斷,而很難實現(xiàn)異常數(shù)據(jù)的提取及修正[18]。
近年來,隨著深度學習的發(fā)展,已經(jīng)有學者開展了基于深度學習的時間序列數(shù)據(jù)異常檢測。例如,劉冬蘭等[19]采用深度受限玻爾茲曼機和循環(huán)神經(jīng)網(wǎng)絡(luò)實現(xiàn)了電力時序數(shù)據(jù)的異常檢測;Aguayo等[20]構(gòu)建了動態(tài)自組織神經(jīng)網(wǎng)絡(luò),利用數(shù)據(jù)的局部特征實現(xiàn)了時序數(shù)據(jù)的異常檢測;王凱等[21]提出了一種基于長短時記憶神經(jīng)網(wǎng)絡(luò)的動態(tài)圖模型實現(xiàn)時序數(shù)據(jù)的異常檢測。目前大部分基于深度學習的時序數(shù)據(jù)異常檢測主要基于循環(huán)神經(jīng)網(wǎng)絡(luò)的改進模型長短時記憶神經(jīng)網(wǎng)絡(luò)。雖然循環(huán)神經(jīng)網(wǎng)絡(luò)能有效地實現(xiàn)時序信息的提取,但是其對序列的整體特征的提取能力較弱,從而影響了檢測準確率。另外,目前的深度學習算法需要構(gòu)建較深的網(wǎng)絡(luò)實現(xiàn)特征的有效提取。隨著網(wǎng)絡(luò)深度的增加,深層神經(jīng)網(wǎng)絡(luò)的特征提取更加充分,但導致模型的復雜度增加。然而,當網(wǎng)絡(luò)層次增加到一定數(shù)量時,網(wǎng)絡(luò)容易發(fā)生梯度爆炸,不能很好地收斂,甚至在網(wǎng)絡(luò)加深后導致模型退化[22]。
為了解決上述問題,本文提出了一種多尺度深度殘差網(wǎng)絡(luò)來實現(xiàn)時間序列數(shù)據(jù)的異常檢測及修正。多尺度卷積可以有效地提取時間序列的多尺度特征,提高了異常數(shù)據(jù)的辨別能力,同時深度殘差結(jié)構(gòu)可以有效地減少網(wǎng)絡(luò)的梯度消失問題及模型退化問題。所提方法是以序列誤差估計的形式實現(xiàn)異常數(shù)據(jù)的檢測,并且在網(wǎng)絡(luò)的最后一層通過估計的誤差完成異常數(shù)據(jù)的修正,因此該方法比現(xiàn)有模型效率更高。實驗結(jié)果表明,所提算法可以有效地實現(xiàn)時間序列數(shù)據(jù)的異常檢測及修正。
通過多尺度的卷積方式一方面可以充分地提取時間序列樣本中較長以及短時間的特征信息,另一方面也拓寬了網(wǎng)絡(luò)。網(wǎng)絡(luò)的寬度已經(jīng)在一定程度上得到了拓寬,但是簡單地堆疊多個多尺度的卷積層會導致梯度消失問題,而更深的網(wǎng)絡(luò)往往能夠帶來更優(yōu)秀的性能表現(xiàn),所以,本文算法通過多尺度的卷積方式提取多尺度的特征信息,同時利用殘差學習的方式來加深網(wǎng)絡(luò)結(jié)構(gòu)來進一步提升算法的性能。多尺度深度殘差網(wǎng)絡(luò)(MS-ResNet)網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。MS-ResNet模型由多尺度卷積模塊、深度預(yù)激活殘差網(wǎng)絡(luò)組成。
圖1 多尺度深度殘差網(wǎng)絡(luò)結(jié)構(gòu)圖
多尺度卷積是通過不同尺度卷積核從特征圖中提取更多信息的一種方法,廣泛應(yīng)用于多尺度特征提取中的目標檢測和姿態(tài)估計[23]。一般來說,濾波器的尺寸對網(wǎng)絡(luò)的整體性能至關(guān)重要,濾波器尺寸小的卷積只能在很小的范圍內(nèi)捕獲局部信息,濾波器尺寸過大的卷積會帶來很大的計算復雜度,而多尺度卷積的設(shè)計可以提取出不同的層次而不增加太多計算復雜度。此外,大量的實驗表明,神經(jīng)網(wǎng)絡(luò)的優(yōu)良性能往往可以通過更深或更寬的結(jié)構(gòu)來實現(xiàn),而多尺度卷積方法無疑拓寬了網(wǎng)絡(luò),在一定程度上提高了算法的泛化能力。在時間序列異常檢測中,受Inception網(wǎng)絡(luò)的啟發(fā),本文設(shè)計了用于多尺度序列特征提取的多尺度卷積。首先,本文提取不同尺度卷積核的淺層特征。核大小為1×1、3×1的卷積可以提取時間范圍較短的時序信息,而5×1卷積可以在較大的時間范圍內(nèi)捕獲信息。與原始結(jié)構(gòu)不同,在多尺度結(jié)構(gòu)中,為了保持序列信息的完整性,不使用任何池化操作。雖然池化操作可以在一定程度上捕獲序列的全局信息,但池化操作過程中實際丟失的局部信息太多,不利于時間序列建模。另外,在原始的Inception結(jié)構(gòu)中,在多尺度特征提取步驟之前往往通過增加一個1×1的卷積核來限制輸出的通道數(shù),并用兩個3×3的卷積核來替代5×5,雖然大大降低了網(wǎng)絡(luò)的訓練參數(shù),但是本質(zhì)上多尺度的特性也就被破壞了,所以,多尺度卷積中不使用1×1來降低通道數(shù),也不用兩個3×1的卷積核來替換5×1,而是通過在不同尺度的卷積設(shè)置不同數(shù)量的卷積核個數(shù)來在限制參數(shù)量,最后使用拼接的方式將不同卷積核尺寸卷積得到的特征圖進行整合。在第一個多尺度卷積中,使用設(shè)置了6個1×1,10個3×1以及14個5×1的卷積核,使用這樣的多尺度卷積的原因是以上不同尺度的卷積加起來的卷積核的數(shù)量是30,這樣的處理既有利于特征的順利提取,也避免了多尺度卷積后的卷積結(jié)構(gòu)訓練參數(shù)的爆炸式增長。
隨著網(wǎng)絡(luò)深度的增加,模型學習能力提高,同時模型復雜度也得到了提高,網(wǎng)絡(luò)容易發(fā)生梯度爆炸,不能很好地收斂,甚至在網(wǎng)絡(luò)加深后退化。現(xiàn)有的一些處理模型梯度爆炸和網(wǎng)絡(luò)退化問題的方法,如激活函數(shù)ReLU和批處理規(guī)范化[24],可以在一定程度上緩解這些問題。但梯度消失的根本原因是不同層梯度之間的乘法運算會導致淺層梯度逐漸消失,用ReLU和批處理規(guī)范化方法無法很好地解決這一問題。為了解決該問題,本文構(gòu)造深度預(yù)激活殘差網(wǎng)絡(luò)實現(xiàn)時間序列特征的進一步提取。
如果簡單地用一個或多個隱層堆疊的前向神經(jīng)網(wǎng)絡(luò)擬合一個恒等映射函數(shù)H(x)=x可能會很困難。但是如果把網(wǎng)絡(luò)設(shè)計為H(x)=F(x)+x的形式,那么就可以將學習的函數(shù)轉(zhuǎn)換成學習一個殘差函數(shù)F(x)=H(x)-x,當F(x)=0時,就得到了映射函數(shù)H(x)=x。F(x)+x可以通過一個前向的神經(jīng)網(wǎng)絡(luò)和一個捷徑連接實現(xiàn), “捷徑連接”僅執(zhí)行一個恒等映射,并將其輸出添加到堆疊層的輸出。
假設(shè)在單個殘差結(jié)構(gòu)中,殘差塊的輸出是H(x),需要擬合的函數(shù)是H(x)-x,將神經(jīng)網(wǎng)絡(luò)的輸入通過跨層連接將其加到堆疊隱層的輸出上,就得到了H(x)。這樣就可以將H(x)-x定義為F(x),殘差結(jié)構(gòu)如圖2所示。
圖2 殘差結(jié)構(gòu)圖
每一個殘差結(jié)構(gòu)有兩層,x表示輸入,W1和W2表示權(quán)重向量,殘差塊中前向神經(jīng)網(wǎng)絡(luò)的表達式如式(1)所示,其中σ表示激活函數(shù)ReLU。
F(x)=W2σ(W1x)
(1)
通過增加一個恒等映射將圖2左邊支路前向神經(jīng)網(wǎng)絡(luò)的輸出和右邊支路恒等映射的輸出相加,并用激活函數(shù)激活,即得到殘差結(jié)構(gòu)的輸出y:
y=F(x,{Wi})+x
(2)
式中:F(x,{Wi})表示需要學習的殘差映射函數(shù),Wi表示隱層權(quán)重矩陣。通過在捷徑處對殘差結(jié)構(gòu)的輸入x做一個線性變換W·x,能夠使得輸入的特征圖數(shù)和輸出的特征圖數(shù)相等,具體表達式如下:
H(x)=F(x,{Wi})+Wsx
(3)
根據(jù)式(1)遞推可以得到多個殘差塊之間的關(guān)系:
(4)
式中:xL表示第L個殘差單元的輸入。記損失函數(shù)為ε,那么誤差反向傳播的計算表達式如下:
(5)
(a) 原始殘差結(jié)構(gòu) (b) 預(yù)激活殘差結(jié)構(gòu)圖3 原始殘差單元和預(yù)激活殘差單元對比
式(5)有效地解決了梯度消失的問題。從圖2可以看出,激活函數(shù)在殘差單元之間使用,而建立式(5)的條件是xl+1=yl。必要的激活是必不可少的,這需要重新設(shè)計原始的殘差結(jié)構(gòu)。建立恒等映射的一個想法是在原始殘差結(jié)構(gòu)的基礎(chǔ)上將加法操作之后加入ReLU激活函數(shù)(圖3(a))。但是簡單地將ReLU激活函數(shù)移到加法操作后將導致殘差函數(shù)的輸出為正數(shù),而殘差函數(shù)的輸出應(yīng)該在(-∞,+∞),并且這個條件可以通過圖3(b)中的殘差元素來實現(xiàn)。通過重新調(diào)整激活函數(shù)ReLU的位置和殘差結(jié)構(gòu)中的批正規(guī)化,殘差結(jié)構(gòu)不僅滿足了解決梯度消失問題xl+1=yl的條件,而且滿足了殘差函數(shù)的輸出為(-∞,+∞)。
圖1顯示了應(yīng)用于時間序列異常數(shù)據(jù)檢測及修正任務(wù)的MS-ResNet網(wǎng)絡(luò)結(jié)構(gòu)。該網(wǎng)絡(luò)由深度殘差網(wǎng)絡(luò)和多尺度卷積兩部分組成。多層度深度殘差網(wǎng)絡(luò)的超參數(shù)設(shè)置如下:(1) 滑動窗口的大小設(shè)置為N,所以輸入序列的大小為N。(2) 利用一組多尺度卷積作為網(wǎng)絡(luò)的第一層,提取淺層多尺度時間特征。采用1×1、3×1、5×1卷積尺度提取多尺度特征。卷積1×1的濾波器數(shù)目為6,卷積3×1的濾波器數(shù)目為10,卷積5×1的濾波器數(shù)目為14。在通過三種不同尺度的卷積提取淺層特征后,只需將不同卷積產(chǎn)生的所有特征映射連接起來,就可以整合所有提取的信息。(3) 在MS-ResNet中,殘差學習可用于加深網(wǎng)絡(luò)深度,提取高層次的負載特征。每個殘差單元設(shè)計為預(yù)激活形式。每個單元包含三個卷積運算。殘差單元的卷積核大小分別為1×1、3×1和1×1,卷積操作前采用了批處理規(guī)范化和ReLU激活函數(shù)。如圖1所示,由三個殘差單元組成的第一殘差塊用于底層特征提取。MS-ResNet中的第二個殘差塊由4個殘差單元組成,第三個殘差塊由6個殘差單元組成。每個殘差單元的結(jié)構(gòu)與第一個殘差塊的結(jié)構(gòu)相同。第一個殘差塊卷積核數(shù)為30,第二個殘差塊卷積核數(shù)為40,第三個殘差塊卷積核數(shù)為50。三個殘差塊處理后的特征圖實際上包含了豐富的多尺度時間序列特性。在第一個多尺度卷積中尺度較小,為了進一步增大卷積核的感受野來提取高層次的多尺度信息,在最終的殘差塊前建立了較大尺度的多尺度卷積。最后的表示是通過應(yīng)用一個帶有50個過濾器的殘差塊來完成的。(4) 在對多個殘差塊進行特征提取后,將序列信息展平為表示主序列的一維特征向量,然后通過一個全連接層將矢量映射到誤差序列中。
多尺度深度殘差網(wǎng)絡(luò)使用均方差損失(MSE)作為損失函數(shù),公式如下:
(6)
為了驗證所提算法的有效性,本文將采用兩個數(shù)據(jù)集進行仿真。第一個數(shù)據(jù)集為我國某地電力系統(tǒng)的220 kV母線數(shù)據(jù)。電力系統(tǒng)數(shù)據(jù)由于測量誤差、傳輸延遲不一致等導致電力時間序列經(jīng)常出現(xiàn)數(shù)據(jù)異常。在電力系統(tǒng)中,測量值和真實值之間的差值和基準值(功率基準值305 MW)的比值超2%時即認為數(shù)據(jù)異常。第二個數(shù)據(jù)集采用UCRA標準數(shù)據(jù)集中的ECG5000心電圖數(shù)據(jù),該數(shù)據(jù)集中的異常數(shù)據(jù)代表病人的心跳圖異常。ECG5000心電圖數(shù)據(jù)集為已經(jīng)標記好的可直接用于訓練和測試的數(shù)據(jù)集。本文將采用自回歸滑動平均模型ARIMA方法、基于機器學習的LCAD算法、LSTM算法以及ResNet網(wǎng)絡(luò)作對比實驗。
電力系統(tǒng)數(shù)據(jù)的有標簽數(shù)據(jù)點個數(shù)為60 000個,其中使用20 000個數(shù)據(jù)作為訓練數(shù)據(jù)。由于數(shù)據(jù)中異常數(shù)據(jù)樣本有限,只有1 038個異常數(shù)據(jù)點及17個異常數(shù)據(jù)區(qū)間,因此通過插入異常數(shù)據(jù)擴充樣本進行訓練。ECG5000心電圖數(shù)據(jù)一共選取5.6×106個數(shù)據(jù)點,則主要為區(qū)間異常,并且異常樣本充足,因此直接用于訓練。ECG5000心電圖數(shù)據(jù)選取70%數(shù)據(jù)作為訓練數(shù)據(jù),30%數(shù)據(jù)為測試數(shù)據(jù)。在進行網(wǎng)絡(luò)訓練時,采用滑動窗口選擇數(shù)據(jù),如圖4所示。對電力數(shù)據(jù)和ECG5000心電圖數(shù)據(jù)都采用150的窗口長度。這兩組實驗其他的參數(shù)設(shè)置都一樣。
圖4 時間序列滑動輸入構(gòu)造
本文使用了召回率、精確率兩種評價指標來評判算法的性能。其中召回表示樣本中被預(yù)測正確的正例:
(7)
式中:FN表示假正樣本的個數(shù)。TP表示真正樣本的個數(shù)。有兩種可能,一種是把原來的正類預(yù)測成正類(TP),另一種就是把原來的正類預(yù)測為負類(FN)。精確率是針對預(yù)測結(jié)果而言的,它表示的是預(yù)測為正的樣本中有多少是真正的正樣本:
(8)
式中:FP表示假負樣本的個數(shù),即被判定為正樣本,但事實上是負樣本。預(yù)測為正有兩種可能,一種就是把正類預(yù)測為正類(TP),另一種就是把負類預(yù)測為正類(FP)。
圖5給出了電力系統(tǒng)數(shù)據(jù)單點異常數(shù)據(jù)檢測及修正,可以看出,本文方法可以很好地擬合誤差,通過誤差序列的判斷,可以得到修正序列。和標簽數(shù)據(jù)對比結(jié)果表明,本文方法能夠很好地實現(xiàn)數(shù)據(jù)的修正。圖6給出了電力系統(tǒng)數(shù)據(jù)區(qū)間異常檢測及修正,可以看出,本文方法實現(xiàn)區(qū)域數(shù)據(jù)的異常檢測及修正。由于本文方法是序列對序列的擬合,因此相比其他方法在區(qū)域數(shù)據(jù)異常檢測中更有優(yōu)勢。
圖5 電力系統(tǒng)數(shù)據(jù)單點異常數(shù)據(jù)檢測及修正
圖6 電力系統(tǒng)數(shù)據(jù)區(qū)間異常檢測及修正
表1給出了本文方法和其他幾種方法在電力系統(tǒng)數(shù)據(jù)異常檢測上的指標對比??梢钥闯?,本文的方法比其他方法有明顯的優(yōu)勢。ARIMA方法不能有效地提取數(shù)據(jù)特征,只是基于統(tǒng)計學意義上的表達,所以召回率和精確率較低。LCAD方法基于人工特征,很難得到序列特征的有效表達,因此召回率和精度也不高。LSTM能夠提取序列的時序信息,因此LSTM方法的召回率和精度比ARIMA方法和LCAD方法要高。但是LSTM缺乏對序列的全面特征的表達,其指標不如ResNet方法。ResNet可以有效解決深度網(wǎng)絡(luò)的梯度消失和模型退化,可以得到更高的語義特征,因此ResNet的召回率和精確率較高。MS-ResNet方法使用了多尺度特征提取,使得網(wǎng)絡(luò)能夠提取序列的不同時間尺度的特征,因此本文方法的召回率和精確率最高。
表1 電力系統(tǒng)數(shù)據(jù)異常檢測指標對比(%)
圖7給出了MS-ResNet方法在心電圖時序數(shù)據(jù)區(qū)間異常檢測及修正結(jié)果??梢钥闯?,MS-ResNet可以非常好地擬合誤差,并且能夠較好地實現(xiàn)區(qū)間異常的判斷。圖7中,第三個周期出現(xiàn)了心電圖的波動,即出現(xiàn)心電異常。圖8給出對應(yīng)的誤差擬合序列??梢钥闯?,原始數(shù)據(jù)波動大的地方,擬合誤差也較大,比如圖7的幾個下波谷處對應(yīng)的擬合誤差就比較大,但這并不影響判別結(jié)果。本文通過擬合誤差序列實現(xiàn)序列到序列的異常判斷,并同時實現(xiàn)異常序列的修正。
圖7 心電圖時序數(shù)據(jù)區(qū)間異常檢測及修正
圖8 心電圖時序數(shù)據(jù)誤差估計序列
表2給出了本文方法和其他幾種方法在心電圖數(shù)據(jù)集上的對比結(jié)果??梢钥闯?,幾種方法的異常區(qū)間判別都比較高,這主要是由于心電圖數(shù)據(jù)總體比較規(guī)律。本文的方法幾乎能夠?qū)⑺械漠惓^(qū)間檢測出來,并且精度非常高,要優(yōu)于其他幾種方法。
表2 心電圖時序數(shù)據(jù)異常檢測指標對比(%)
時間序列異常數(shù)據(jù)檢測與修正一直是數(shù)據(jù)科學與工程領(lǐng)域的研究熱點。本文提出了一種多尺度深度殘差網(wǎng)絡(luò)模型實現(xiàn)時間序列異常數(shù)據(jù)檢測與修正,該方法能夠同時實現(xiàn)檢測和修正。該方法通過對誤差序列的估計實現(xiàn)異常數(shù)據(jù)的檢測,并通過網(wǎng)絡(luò)的最后一層實現(xiàn)數(shù)據(jù)的修正。本文中的多尺度卷積可以有效地提取時間序列的多尺度特征,提高了異常數(shù)據(jù)的辨別能力,同時深度殘差結(jié)構(gòu)可以有效地減少網(wǎng)絡(luò)的梯度消失問題及模型退化問題。和其他幾種方法的對比結(jié)果表明,本文提出的方法可以準確地實現(xiàn)時間序列的異常數(shù)據(jù)及異常區(qū)間檢測及修正。