王田豐,胡谷雨,王 睿,彭冬陽
(陸軍工程大學 指揮控制工程學院,江蘇 南京 210007)
為了確保良好的網絡性能,需要對各個網絡節點的吞吐量、延遲、丟包率等關鍵指標進行實時的監測和維護。這些指標在一定程度上反映了特定網絡中用戶的行為模式和網絡的特性,具有動態性和周期性。網絡中物理鏈路出現故障、網絡遭受攻擊導致故障等多方面的因素,都會導致網絡出現異常,在這些監測的指標上也會有相應的異常體現。及時高效地發現網絡指標的異常可以給網絡運維人員贏得寶貴的時間來處理網絡中出現的故障。
網絡KPI(key performance indicator)異常檢測(anomaly detection)問題可以抽象為時序序列異常檢測問題,目的是為了發現不符合正常模式的序列段。有監督學習的方法[1-2]依賴準確的標注,而在實時的網絡系統中,需要維護的指標數目多,并且數據都是實時產生的,數據量非常大,因此人工標注難以滿足這一要求;無監督學習的方法不依賴于標注,在此問題上也有應用,但檢測效果上仍不如人意。
為了解決這些困難,該文提出一種基于AAE[3](adversarial autoencoders)的無監督異常檢測方法。目前,AAE被廣泛應用在語音和圖像生成領域,并取得很好的效果。在KPI異常檢測場景下,用滑動窗把數據集切分成小樣本,其中異常的窗口樣本只占很小一部分。AAE模型在訓練中學習到的是正常樣本的數據分布模式。因此在異常檢測階段,正常樣本能夠被很好地編解碼,重構誤差很小,并且編碼器輸出的特征向量也更有可能被鑒別器識別為“正常”,綜合兩者判斷是“異常”的概率比較低;而異常樣本不符合正常模式,不僅重構誤差大,而且編碼輸出的特征向量也更容易被鑒別器判為“異常”,總體上被判為“異常”的概率比較高。
該文的創新點總結如下:
(1)針對網絡性能異常問題,提出了基于AAE的無監督的檢測方法;
(2)針對原始數據部分缺失問題,引入了KNN算法進行數據填充,進一步提高了模型的檢測精度;
(3)實驗結果表明,AAE-AD在最優F分數指標,AUC指標上均優于其他的無監督檢測算法;
(4)AAE和VAE兩個模型理論上有一定的相似性,對于兩個模型在檢測性能上的差異,給出了合理的解釋。
通用異常檢測技術的調研報告[4]給出了異常檢測的定義和異常檢測可遵循的原則,異常檢測就是檢測測試數據是否符合正常的數據分布,不符合正常數據分布的就被劃分為異常,而且異常數據占比通常很小。許多新的方法被應用在網絡異常檢測領域[5],如集成學習[6]在網絡異常檢測中的運用解決了網絡異常種類多、單一模型處理問題時局限性大的問題。
網絡關鍵指標異常檢測問題是網絡異常檢測問題的一個分支,屬于時序序列異常檢測。由于在網絡監測系統中,記錄的時序序列數據量非常龐大,人工難以給出滿足有監督學習訓練時需要的大量準確標注,因此這個問題往往在無監督學習范疇下解決比較合理。
自回歸移動平均模型(autoregressive integrated moving average)是一種基于統計理論的無監督預測模型,結合了自回歸模型(AR)和移動平均模型(MA)的優點,對于非平穩序列也能達到良好的預測效果。ARIMA模型在異常檢測領域[7]也有廣泛的應用,如孫建樹[8]等人將ARIMA運用到水文時間序列異常檢測問題中,取得了良好效果。
RNN和LSTM是最常用的兩種深度時序序列預測模型,同時也是時序序列異常檢測[9]的有效方法。一般在異常檢測中,采用預測值與真實值差值的絕對值作為異常分值。其中,李潔等人[10]提出了基于RNN的多維時序序列預測算法;仇媛等人[11]提出了基于LSTM和滑動窗口的流數據異常檢測方法。
生成模型是一種典型的無監督學習模型,在現在的圖像和語音生成領域運用的非常廣泛,在異常檢測領域也衍生出一些可用的方法。變分自編碼器(variational autoencoder,VAE)和生成式對抗網絡(generative adversarial networks,GAN)是兩種運用廣泛且具有代表性的生成器模型。其中VAE[12]使用了變分推斷技術[13-14],通過不斷優化證據下界(evidence lower bound,ELBO)來使得自編碼器在得到訓練的同時,模型生成的樣本空間分布能不斷靠近先驗分布,這里的先驗分布一般假設為混合高斯分布;而GAN[15]模型分為生成器和鑒別器,通過交替訓練生成器和鑒別器來使得生成器生成的樣本越來越真實,同時鑒別器對于真假樣本的鑒別能力越來越強,最終達到平衡。其中,VAE與雙向領域算法結合成一個混合模型[16],在MNIST和CIFAR-10數據集上取得了較好的異常檢測效果。余廣民等人[17]綜合論述了基于GAN的異常檢測算法,同時GAN也被應用到視頻異常檢測場景[18]中。
但是筆者發現上述方法中,傳統的有監督模型的性能依賴于大量的人工標簽,而現有的無監督模型ARIMA、RNN、LSTM、VAE、GAN在網絡數據集上的異常檢測效果仍然不夠好,難以滿足業務上的需求。為此,提出了一種新的基于AAE的異常檢測模型AAE-AD。這是一種無監督學習模型,適用于網絡運維中人工標注困難的情境,該模型能夠很好地學習到“正常”時序序列的特征空間分布,在針對網絡KPI的異常檢測中達到很好的效果。
網絡監測器記錄的網絡數據往往長達數周。第一,不同時間段內的數值范圍相差可能很大,并且往往帶有噪聲;第二,由于監測器故障或者人工操作失誤,數據可能存在部分缺失。針對這兩個問題,先對數據進行標準化處理,然后進行數據填充。數據標準化采用z-score方法,表示如下:
(1)
其中,μ為觀測值序列X的均值,σ為X的均方差;數據標準化消除了奇異樣本數據的影響,能夠提高算法精度并加快算法的收斂速度。
缺失數據填充借鑒KNN[19]算法思想,基本流程如以下偽代碼所示:
算法1:KNN填充空數據。
輸入:原始觀測值序列X';
輸出:空值填充后的序列X''。
1:設置近鄰數量k,計算空值區間集合M={(s1,e1),(s2,e2),…,(sq,eq)}
2:for (si,ei) inM
3:j=0
4:whilesi+j≤eido
5:找到與下標(si+j)最近的k個非空近鄰下標,設為集合G


8:j=j+1
9:end while
10:end for
KNN填充算法中,首先獲取所有的空值區間M={(s1,e1),(s2,e2),…,(sq,eq)},s代表區間起始點,e代表區間結束點,從X'[s]到X'[e]都是空值。算法的主要思想是利用坐標最近的k個點來計算填空值,其中鄰居的影響與相隔的距離成反比,距離越近影響越大。算法第6行中,對各個鄰居的影響力進行了歸一化;第7行,對各個鄰居的值進行加權求和,計算出填充值。
最后,采用滑動窗口方法將觀測序列切分成固定長度的樣本。模型訓練中,每個長度為W的時間窗口為一個訓練樣本;異常檢測中,也以時間窗口為基本單位。在實際的網絡系統中,允許存在一定的時延,因此,只要選取合適的時間窗口,能夠保證異常檢測模型的實時性和實用性。
整個AAE-AD框架分為模型訓練和異常檢測兩部分。如圖1所示,訓練過程包含了對編碼器、解碼器和鑒別器的訓練。

圖1 AAE-AD模型的訓練
編碼器和解碼器使用的是CNN網絡,將一維數據變成二維數據使模型更好地學習到數據的空間分布特性,能夠更好地進行特征提取和還原。編碼器對訓練樣本進行特征提取產生特征向量,分別作為解碼器和鑒別器的輸入;解碼器將特征還原后結合原始輸入計算出重構損失,并對編碼器和解碼器參數進行更新;鑒別器結合編碼器產生的特征向量和從混合高斯模型中采樣出的向量計算出鑒別損失來更新鑒別器和編碼器,這在提高鑒別器鑒別能力的同時,也使得編碼器產生的特征向量越來越真實,最終能夠達到混淆鑒別器的程度,兩者達到一定的平衡。
2.2.1 自編碼器網絡的訓練
自編碼器網絡實際上是一個信息壓縮和還原的過程,編碼器G1將高維數據向量x壓縮成低維特征向量z,而解碼器G2負責將低維特征向量z盡量還原回去。在編解碼的過程中存在信息損耗,信息損耗越大,重構效果越差。自編碼器的訓練就是通過最小化重構損失來增強網絡的信息壓縮與還原的能力。這里采用均方差損失,所以自編碼器平均損失函數可以表示為:
(2)
其中,xi是來自原始數據的樣本。
2.2.2 對抗網絡的訓練
AAE中對抗訓練的思想來自于GAN,可以看成一個兩者博弈的過程。這里就是編碼器部分G1與鑒別器D的博弈[20],訓練的目標就是能夠使G1編碼結果越來越接近“真實分布”,即預設的先驗分布p(z),同時使得鑒別器能夠更好地區分特征向量到底是來自于編碼器輸出的特征向量還是采樣自“真實分布”的向量。先驗分布假設為混合高斯分布,因為混合高斯分布經過神經網絡投射可以擬合任意的分布。總體優化目標可以作如下表示:
Ex~pdata(x)[log(1-D(G1(x)))]
(3)
鑒別器優化目標表示為:
(4)
編碼器優化目標表示為:
(5)
其中,zi是采樣自先驗分布的向量,xi是來自原始數據的樣本,n為樣本數。
自編碼器網絡和對抗網絡交替訓練,訓練過程如以下偽代碼所示:
算法2:AAE-AD模型訓練。
輸入:訓練樣本集X;
輸出:模型G1,G2,D。
1:對訓練樣本集X進行預處理,產生輸入樣本{x1,x2,…,xn}
2:for theqthepoch do
3:for theithsample do
4:將xi輸入AAE-AD模型,產生編碼器輸出G1(xi),解碼器輸出G2(G1(xi)),鑒別器輸出D(G1(xi))
5:計算lossA=mse(xi,G2(G1(xi))),使用Adam[21]優化器更新編碼器和解碼器參數
6:從混合高斯分布中采樣出向量zi,產生鑒別器輸出D(zi)
7:計算lossD=-logD(zi)-log(1-D(G1(xi))),使用Adam優化器更新鑒別器參數
8:計算lossG1=log(1-D(G1(xi))),使用Adam優化器更新編碼器參數
9:end for
10:end for
在網絡訓練結束后,模型中自編碼器和鑒別器有相對獨立的異常判斷機制,如圖2所示,模型的異常檢測是將測試樣本輸入模型,結合模型的自編碼器部分產生的重構誤差和鑒別器部分產生的鑒別分值來對樣本做異常判斷的過程。

圖2 AAE-AD模型的異常檢測
在異常檢測中,AAE-AD模型的判斷依據是測試樣本是否符合正常模式。自編碼器通過訓練學習到了樣本空間X到特征空間Z的投射函數qφ(z|x)和特征空間Z到樣本空間X的投射函數hφ(x|z),能夠對符合正常模式的樣本進行很好的編解碼。因此,對于正常樣本來說,經過自編碼器網絡計算出的重構誤差較小,而異常樣本的重構誤差較大。對抗網絡經過訓練,編碼器G1能夠將符合正常分布的樣本編碼成能夠混淆鑒別器D的特征向量,鑒別器D也往往認為這是“真的”;而異常樣本難以被很好地編碼,其編碼出的特征向量會被鑒別器D判為“假的”。結合這兩者給出的結果計算測試樣本的異常分值,如果異常分值大于設定的閾值則被判為異常。
異常檢測過程如以下偽代碼表示:
算法3:AAE的異常檢測。
輸入:測試樣本集X;
輸出:測試樣本異常分值S。
1:對測試樣本集X進行預處理,產生輸入樣本{x1,x2,…,xn}
2:for theithsample do
3:將xi輸入自編碼器網絡,輸出G2(G1(xi)),計算s1=mse(xi,G2(G1(xi)))
4:將xi輸入對抗網絡,輸出D(G1(xi)),記為s2=log(1-D(G1(xi)))
5:計算樣本xi的總異常分值s=λs1+(1-λ)s2
6:end for
實驗數據集選自2018年AIOps的KPI異常檢測競賽中的8組KPI數據。網絡監測設備的數據采樣間隔單位是分鐘,這8組數據的異常點已經由專業網絡管理人員標出,因此這8組數據可以在實驗中用來比較不同算法間的性能。表1中列出了各組數據的檢測點數量、異常點數量和缺失點數量,其中F,G,H三組數據不包含缺失點。

表1 實驗數據集
F1分數是一種用來衡量分類模型性能的指標,兼顧了分類模型的精確率(precision)和召回率(recall),計算公式如下:
(6)
F1分數值越大表明分類性能越好,最優F1分數指的是取不同分類閾值時,數值最大的F1分數。
ROC曲線是根據一系列不同分類閾值,以真正例率(true positive rate,TPR)為縱坐標,假正例率(false positive rate,FPR)為橫坐標繪制的曲線。AUC(area under curve)為ROC曲線下面積,AUC越大代表分類模型效果越好。
在實驗中,異常檢測的單位是窗口,每個窗口用該窗口中最后一個點作為記錄點。數據集中已經給出真實的異常點,記包含異常點或者丟失點的窗口為“真實異常窗口”。預測結束以后,記異常分值大于閾值或者包含丟失點的窗口為“預測異常窗口”。通過改變異常判斷的閾值,可以計算出最優F1分數并且繪制出ROC曲線,進而計算出AUC值。
把每一個數據集都劃分為三部分,前50%用于訓練,中間30%用于驗證模型損失,后20%用于異常檢測。K代表了模型的特征空間維度,在訓練中也是一個重要的參數。K取值太小會導致不同維度之間的相關性太高,特征空間的表示能力會變差,同時模型的訓練也更容易過擬合。在經過反復的實驗后,選取K=10。滑動窗口是訓練和檢測的基本單位,窗口長度W設置太大會增加過擬合的風險,設置過小會導致模型難以學習到數據的正常分布模式,在反復的實驗中發現窗口大小W設置120較為合適。異常檢測中,異常分值由自編碼器和鑒別器的輸出共同決定,設置λ為0.8,這也是在反復實驗中獲得的經驗值,λ如何取值能夠使得模型性能最佳也是后續的一項工作。
模型分為三個子網絡,分別是編碼器網絡、解碼器網絡、鑒別器網絡。編碼器網絡中使用了4層神經網絡,第一層為包含144個節點的全連接網絡;第二層為通道數32,5*5卷積核的卷積層,使用LeakyReLU做激活;第三層為通道數64,5*5卷積核的卷積層,使用LeakyReLU做激活;第四層為節點數2K(K為特征維度)的全連接層。編碼器輸出為特征向量z的均值和標準差,使用重參數化技巧采樣出特征向量z,分別作為解碼器和鑒別器的輸入。解碼器使用4層神經網絡,第一層為包含576個節點的全連接層;第二層為通道數64,5*5卷積核的反卷積層,使用LeakyReLU做激活;第三層為通道數為32,5*5卷積核的反卷積層,使用LeakyReLU做激活;第四層為節點數為W的全連接層。鑒別器使用三層全連接網絡,節點數分別為128,128,1。優化器選擇上,三個網絡都使用了Adam優化器。
3.5.1 模型間性能對比
如表2所示,在最優F分數指標上,AAE-AD模型(“0”值填充)在數據集A,B,C,E,F,G,H上都優于其他的無監督檢測模型,性能提升分別為3.31%,14.06%,14.48%,13.58%,112.67%,356.19%,454.34%。可以看到,在F,G,H數據集上,異常點比較少,對于模型檢測的精確度要求非常高,其他無監督算法的F分數普遍在0.2以下,效果非常不理想;而AAE-AD在這幾個數據集上依然能保持良好的檢測精度。在數據集D上,RNN,LSTM模型性能超過了其他的無監督模型,F分數分別為0.966和0.936。除了AAE-AD之外,VAE的性能在A,B,C,E數據集上普遍優于其他無監督模型,總體來說是一種次優的方案。ARIMA優點是不需要訓練模型,能達到一定的精度,可見在對精確度要求不是很嚴格的應用場景中,可以采用ARIMA模型。

表2 最優F分數指標對比
如表3所示,在AUC指標上,AAE-AD模型(“0”值填充)在B,C,E,F,G,H數據集上都優于其他無監督檢測模型,性能提升分別為3.21%,2.78%,1.43%,59.09%,50%,64.29%。在數據集A上,GAN模型表現最佳,AUC值為0.844;在數據集D上,RNN和LSTM模型超過了其他方法,AUC值分別為0.978和0.970。與最優F指標類似,VAE僅次于AAE方法。

表3 AUC指標對比
3.5.2 KNN填充與“0值填充”
因為數據集F,G,H不包含缺失值,所以僅在A~E數據集上對比了KNN填充與“0”值填充的性能差異。在最優F指標上,KNN填充方法在C,D,E三個數據集上提升了檢測精度,在數據集A上沒有變化,在數據集B上降了0.71%的精度;在AUC指標上,KNN填充方法在數據集D上提升了2.51%精度,在數據集B上降了0.60%的精度,其他三個數據集不變。由此,可以發現,KNN填充方法可以在一定程度上提高AAE-AD模型的檢測精度,是一種有效的缺失值填充方法。
3.5.3 AAE與VAE性能差異分析
AAE模型與VAE模型在模型訓練中存在一定的相似性。其中AAE通過對抗訓練的方式來約束特征空間的向量分布;而VAE通過KL散度的約束來實現這一點。在圖像分類任務中,VAE的特征空間分布存在空隙[3],而AAE的特征空間結合非常緊密;在本實驗中也發現了類似的現象。為了使特征空間更直觀可見,將特征維度設為2,在其他訓練參數相同的情況下,兩者的特征空間如圖3所示。

圖3 AAE與VAE特征空間對比
其中兩圖中黑框區域為相同時間區域對應的特征空間,AAE中此區域點分布密集而均勻,而VAE在此區域的分布較為零散;采樣了其中的一個點,分別用AAE和VAE進行編碼解碼,結果如圖4所示。可見,在特征空間離散區域,VAE對樣本的重構效果并不好,容易把正常點判成異常點,從而影響整體的檢測精度,這也是VAE檢測性能低于AAE的主要原因。

圖4 AAE與VAE重構效果對比
針對網絡性能異常發現任務中檢測精度不夠高的問題,提出了AAE-AD模型,其中使用了KNN作為缺失值填充的方法。實驗結果表明,AAE-AD模型在異常發現任務中性能普遍優于現有的其他無監督檢測模型;其中KNN缺失值填充技術能進一步提升AAE-AD的性能。
后續工作包括兩方面,一是AAE-AD模型對參數敏感,如窗口大小W,特征空間維度K,異常分數計算系數λ,需要進一步探討參數變化和模型性能的定性關系來提高模型訓練的效率;二是嘗試將AAE-AD模型運用在多維時序序列異常檢測中,以提升它的實用性。