摘要:傳統(tǒng)的時(shí)間序列異常檢測(cè)方法大多以數(shù)據(jù)點(diǎn)作為檢測(cè)單位,通過(guò)訓(xùn)練模型預(yù)測(cè)下一時(shí)刻數(shù)據(jù),這類方法的缺點(diǎn)是沒(méi)有考慮時(shí)間序列數(shù)據(jù)的特性,即序列模式的多樣性。因此文中提出一種基于Seq2Seq深度自編碼器的時(shí)間序列異常檢測(cè)方法,以更好地挖掘時(shí)間序列數(shù)據(jù)中的異常序列模式。此方法使用Bi?LSTM網(wǎng)絡(luò)作為深度自編碼器,其輸入輸出均為序列,使用深度自編碼器對(duì)時(shí)間序列進(jìn)行編碼壓縮和解碼重建。通過(guò)計(jì)算重建序列與原始序列之間的重建誤差,并設(shè)置重建異常比率以獲取誤差閾值,將重建誤差大于此閾值的時(shí)間序列視為異常序列。異常時(shí)間序列的發(fā)現(xiàn)取決于模型對(duì)原始序列的重建效果,通過(guò)在空氣質(zhì)量時(shí)間序列數(shù)據(jù)上的實(shí)驗(yàn),模型初步達(dá)到了不錯(cuò)的檢測(cè)效果,證明了所提方法的可行性。文中方法為時(shí)間序列異常檢測(cè)提供了新的途徑。
0 引 言
時(shí)間序列數(shù)據(jù)是生活中常見的一種數(shù)據(jù),在時(shí)間順序上具有一定規(guī)律,且大量存在于金融貿(mào)易、工業(yè)生產(chǎn)、環(huán)境保護(hù)、網(wǎng)絡(luò)安全等眾多領(lǐng)域。時(shí)間序列異常檢測(cè)在生產(chǎn)和生活中有著重要的作用,如在網(wǎng)絡(luò)安全領(lǐng)域中分析網(wǎng)絡(luò)異常行為,在金融領(lǐng)域中識(shí)別欺詐交易等[1]。
傳統(tǒng)時(shí)間序列異常檢測(cè)方法(統(tǒng)計(jì)學(xué)方法或聚類方法),如高斯模型、ARIMA、K?means、IForest等都屬于統(tǒng)計(jì)機(jī)器學(xué)習(xí)的范疇[2]。這些方法基本在每個(gè)時(shí)刻訓(xùn)練模型以預(yù)測(cè)下一時(shí)刻,若觀測(cè)點(diǎn)與預(yù)測(cè)值相差太遠(yuǎn),則將該點(diǎn)視為異常[3]。這類方法的不足之處在于忽視了時(shí)間序列數(shù)據(jù)的序列特性,無(wú)法挖掘序列中的異常序列模式。本文提出基于Seq2Seq深度自編碼器的時(shí)間序列異常檢測(cè)方法,使用Bi?LSTM網(wǎng)絡(luò)作為自編碼器對(duì)輸入序列進(jìn)行編碼壓縮和解碼重建,此方法能夠更好地挖掘時(shí)序數(shù)據(jù)中的異常序列模式。
1 算法原理
1.1 深度自編碼器
深度自編碼器(Deep Autoencoder,DAE)是一種無(wú)監(jiān)督或自監(jiān)督算法,其本質(zhì)是一種數(shù)據(jù)壓縮算法。構(gòu)建一個(gè)深度自編碼器需要兩個(gè)部分:編碼器(Encoder)和解碼器(Decoder)。編碼器將輸入壓縮為潛在空間表征, 解碼器將潛在空間表征重建為輸出, 編碼器和解碼器都是神經(jīng)網(wǎng)絡(luò)[4?5]。編碼和解碼方法都是由模型自動(dòng)學(xué)習(xí)輸入數(shù)據(jù)得到的, 深度自編碼器的結(jié)構(gòu)如圖1所示。

深度自編碼器主要有以下三個(gè)特點(diǎn)[6]:
1)數(shù)據(jù)相關(guān)性。自編碼器只能編碼與之前類似的數(shù)據(jù)。
2)數(shù)據(jù)有損性。自編碼器解碼得到的輸出與原始輸入相比會(huì)有信息損失。
3)自動(dòng)學(xué)習(xí)性。自動(dòng)編碼器從數(shù)據(jù)中自動(dòng)學(xué)習(xí)編碼和解碼的方法。
1.2 Bi?LSTM 網(wǎng)絡(luò)
長(zhǎng)短期記憶(Long Short?Term Memory, LSTM)網(wǎng)絡(luò)是為解決循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Networks,RNN)中梯度消失的問(wèn)題提出的一種網(wǎng)絡(luò)結(jié)構(gòu)。LSTM單元可以處理長(zhǎng)度可變的序列,并捕獲其中的長(zhǎng)期依賴性和非線性關(guān)系,已成為處理序列數(shù)據(jù)的標(biāo)準(zhǔn)方法[7]。根據(jù)LSTM單元提出的自學(xué)習(xí)門控方法,能確定LSTM單元是否記憶之前的狀態(tài)或是否存儲(chǔ)當(dāng)前數(shù)據(jù)中的信息。LSTM單元內(nèi)部運(yùn)算過(guò)程如圖2所示。
設(shè)t 時(shí)的輸入序列為向量xt,輸出為ht,LSTM單元內(nèi)部計(jì)算過(guò)程如下:


式中:ct是t時(shí)記憶單元中的狀態(tài)向量;ct-1是t-1時(shí)記憶單元中的狀態(tài)向量;W, U和b是參數(shù)矩陣和偏差向量;“⊙”表示元素積運(yùn)算。此外,ft 表示遺忘門(ForgetGate),其作用是存儲(chǔ)舊信息的權(quán)重向量;it表示輸入門(Input Gate),用于獲取新信息的權(quán)重向量;ot示輸出門(Output Gate),用于輸出待輸出的候選向量[8?9]。在激活函數(shù)中,σg表示sigmoid函數(shù);σc和σh表示tanh函數(shù)。

雙向長(zhǎng)短期記憶(Bi?directional Long Short?TermMemory,Bi?LSTM)網(wǎng)絡(luò)通過(guò)引入第二層LSTM單元來(lái)擴(kuò)展單向LSTM網(wǎng)絡(luò)[10],其可以在前后兩個(gè)方向上同時(shí)處理輸入序列。在第二層中,隱含層單元的序列順序相反,因此該網(wǎng)絡(luò)可以同時(shí)利用過(guò)去和未來(lái)的序列信息。Bi?LSTM網(wǎng)絡(luò)結(jié)構(gòu)圖如圖3所示。

1.3 基于 Seq2Seq 的 Bi?LSTM 深度自編碼器時(shí)間序列
異常檢測(cè)模型Seq2Seq模型屬于自編碼器結(jié)構(gòu)中的一類[11],常用于文本翻譯、語(yǔ)音生成等自然語(yǔ)言處理領(lǐng)域。基本思想是用編碼器將輸入序列壓縮成指定長(zhǎng)度的向量,再用解碼器將編碼向量解碼成指定長(zhǎng)度的序列[12]。
針對(duì)時(shí)間序列異常檢測(cè)而言,假設(shè)樣本中異常序列數(shù)量相對(duì)于正常序列來(lái)說(shuō)是極少數(shù)的。在使用深度自動(dòng)編碼器的情況下,訓(xùn)練模型以學(xué)習(xí)正常時(shí)間序列中的序列模式[13?14]。那么當(dāng)時(shí)間序列輸入深度自編碼器中時(shí),對(duì)于多數(shù)正常序列,模型可以很容易地發(fā)現(xiàn)并記住其中的序列模式,其重建誤差相對(duì)可能較小;反之對(duì)于少數(shù)異常序列,模型很難對(duì)其序列模式進(jìn)行挖掘,則重建誤差相對(duì)可能較大。
因此對(duì)于輸入的時(shí)間序列,若經(jīng)過(guò)模型編碼重建后與原始序列差異較大的話,則可以認(rèn)為當(dāng)前序列中可能存在異常,并可以進(jìn)一步發(fā)現(xiàn)異常數(shù)據(jù)點(diǎn)?;赟eq2Seq深度自編碼器的時(shí)間序列異常檢測(cè)模型,使用Bi?LSTM網(wǎng)絡(luò)作為自編碼器對(duì)輸入序列進(jìn)行編碼和重建。通過(guò)計(jì)算重建序列與原始序列之間的重建誤差,并設(shè)置重建異常比率以獲取誤差閾值,將重建誤差大于閾值的序列視為異常序列。異常檢測(cè)模型的主要步驟如圖4所示。

2 實(shí)證分析
2.1 時(shí)間序列數(shù)據(jù)集
實(shí)驗(yàn)中所用到的時(shí)間序列數(shù)據(jù)為北京地區(qū)每小時(shí)PM2.5數(shù)據(jù), 數(shù)據(jù)集來(lái)自UCI Machine LearningRepository, 范圍為2010?01?01—2014?12?31。數(shù)據(jù)集共43824個(gè)樣本,對(duì)于缺失值使用同一天數(shù)據(jù)的平均值替換,經(jīng)過(guò)處理后的時(shí)間序列數(shù)據(jù)如圖5所示。
對(duì)數(shù)據(jù)進(jìn)行2天重采樣,即用時(shí)間窗口大小為48h的時(shí)序數(shù)據(jù)作為輸入序列,重采樣后的數(shù)據(jù)集共913個(gè)樣本。其中使用70%作為訓(xùn)練集,20%作為驗(yàn)證集,10%作為測(cè)試集。

2.2 Bi?LSTM 深度自編碼器構(gòu)建
本文使用基于Python的Tensorflow 2深度學(xué)習(xí)庫(kù)構(gòu)建Bi?LSTM深度自編碼器模型。實(shí)驗(yàn)環(huán)境為Windows1064位,CPU為I7?8750h,顯卡為GTX10606GB,內(nèi)存為8 GB。
首先使用MinMaxScaler方法將數(shù)據(jù)歸一化,采用順序方式(Sequential)構(gòu)建網(wǎng)絡(luò)模型。編碼器和解碼器均定義為Bi?LSTM層,共7層,其單元數(shù)量分別為64,48,32,12,32,48,64,前6層均返回序列。接下來(lái)定義Dropout層,Dropout比率為0.2。最后一層定義Dense全連接層, 共有48個(gè)單元,激活函數(shù)為線性整流函數(shù)(ReLU)。模型編譯時(shí),使用均方誤差(Mean Square Error,MSE)作為損失函數(shù)(Loss),使用Adam作為和優(yōu)化算法(Optimizer),學(xué)習(xí)率(LR)設(shè)為0.0001。模型訓(xùn)練時(shí),設(shè)置批次訓(xùn)練樣本數(shù)(Batch_size)為32,訓(xùn)練輪次(Epoch)為50。
2.3 實(shí)驗(yàn)結(jié)果
在實(shí)驗(yàn)中,使用重建序列和原始序列對(duì)應(yīng)元素差值的二范數(shù)(2?Norm)作為重建誤差指標(biāo)。設(shè)序列重建前后對(duì)應(yīng)的元素差為向量X=(x1,x2,…,xn),該數(shù)值越大說(shuō)明重建誤差越大。重建誤差指標(biāo)如下:

經(jīng)過(guò)50輪訓(xùn)練后,模型在訓(xùn)練集和驗(yàn)證集上的損失見圖6。從圖6可以看出,模型在訓(xùn)練集上的最終損失約為0.00051,在測(cè)試集上的最終損失約為0.00039。

模型訓(xùn)練完成后,將重建異常比率設(shè)為0.99,得到重建誤差閾值約為0.4005。模型在訓(xùn)練集和驗(yàn)證集上的異常檢測(cè)結(jié)果如圖7所示。

從圖7可以知道,模型在訓(xùn)練集和驗(yàn)證集上共檢測(cè)到10個(gè)異常序列,其編號(hào)分別為22,39,40,227,334,376,555,562,711,779。對(duì)異常序列711重建前后進(jìn)行可視化如圖8所示。

從圖8可以看出,異常序列711在前42h一直處于較平緩狀態(tài),PM2.5值最大在200 μg/m3左右。因此模型可以較好地重建這一部分序列,重建誤差較小。在43~47h之間,PM2.5值先劇增后迅速減少,序列出現(xiàn)劇烈變化。模型無(wú)法重建預(yù)測(cè)這一部分序列,重建誤差過(guò)大,因此將此序列視為異常。接下來(lái)使用模型在測(cè)試集上進(jìn)行檢測(cè),結(jié)果如圖9所示。從圖9可以看出,模型在測(cè)試集上共檢測(cè)到12個(gè)異常序列,對(duì)異常序列 901重建前后進(jìn)行可視化,如圖10所示。


從圖10可以看出,異常序列901在20h左右和25~35h的PM2.5值均為0μg/m3,且在 35h后序列急速上升。模型較好地重建了35h后的上升序列,但無(wú)法有效重建兩段為0的時(shí)間序列,重建誤差大于閾值,因此將此序列視為異常。
3 結(jié) 語(yǔ)
在時(shí)間序列異常檢測(cè)任務(wù)中,除了監(jiān)督算法外,基于無(wú)監(jiān)督的異常檢測(cè)方法也值得考慮。本文提出一種新的無(wú)監(jiān)督時(shí)間序列異常檢測(cè)方法,此方法基于Seq2Seq模型,利用Bi?LSTM深度自編碼器對(duì)序列的重建效果來(lái)發(fā)現(xiàn)異常序列。異常序列的發(fā)現(xiàn)取決于模型對(duì)原始序列的重建效果,該方法能更好地挖掘時(shí)間序列中的異常序列模式。通過(guò)在空氣質(zhì)量數(shù)據(jù)上的實(shí)驗(yàn),證明了該方法的可行性,模型初步達(dá)到了不錯(cuò)的檢測(cè)效果,為時(shí)間序列異常檢測(cè)提供了新的方法。
作者簡(jiǎn)介:
爨 瑩(1968—),女,陜西西安人,博士,教授,研究方向?yàn)橹悄芸梢暬?jì)算。
吳 越(1996—),男,陜西西安人,碩士研究生,研究方向?yàn)閿?shù)據(jù)挖掘、機(jī)器學(xué)習(xí)。
審核編輯:湯梓紅
-
編碼器
+關(guān)注
關(guān)注
45文章
3953瀏覽量
142602 -
時(shí)間序列
+關(guān)注
關(guān)注
0文章
31瀏覽量
10700
原文標(biāo)題:基于 Seq2Seq深度自編碼器的時(shí)間序列異常檢測(cè)方法研究 | 論文速覽
文章出處:【微信號(hào):現(xiàn)代電子技術(shù),微信公眾號(hào):現(xiàn)代電子技術(shù)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
基于transformer和自監(jiān)督學(xué)習(xí)的路面異常檢測(cè)方法分享
提高IT運(yùn)維效率,深度解讀京東云AIOps落地實(shí)踐(異常檢測(cè)篇)
【「時(shí)間序列與機(jī)器學(xué)習(xí)」閱讀體驗(yàn)】全書概覽與時(shí)間序列概述
科學(xué)數(shù)據(jù)時(shí)間序列的預(yù)測(cè)方法
一種快速的視頻序列運(yùn)動(dòng)分割方法
一種有效的視頻序列拼接方法
基于時(shí)間序列數(shù)據(jù)挖掘的故障檢測(cè)方法_李海林
寶信利用Spark Analytics Zoo對(duì)基于LSTM的時(shí)間序列異常檢測(cè)的探索
如何使用頻繁模式發(fā)現(xiàn)進(jìn)行時(shí)間序列異常檢測(cè)詳細(xì)方法概述
基于時(shí)間卷積網(wǎng)絡(luò)的通用日志序列異常檢測(cè)框架
一種多維時(shí)間序列汽車駕駛異常點(diǎn)檢測(cè)模型
使用MATLAB進(jìn)行異常檢測(cè)(下)
采用基于時(shí)間序列的日志異常檢測(cè)算法應(yīng)用
智能電網(wǎng)時(shí)間序列異常檢測(cè):a survey
基于一種用于JumpStarter的抗離群的采樣算法
一種新的無(wú)監(jiān)督時(shí)間序列異常檢測(cè)方法
評(píng)論