陳華華,陳哲,郭春生,應娜,葉學義,章堅武
(杭州電子科技大學通信工程學院,浙江 杭州 310018)
異常檢測是指在數(shù)據(jù)中檢測出不符合期望行為的數(shù)據(jù)。異常數(shù)據(jù)在統(tǒng)計領(lǐng)域也被稱為偏差值或離群值,是指遠離大量正常數(shù)據(jù)點的數(shù)據(jù)[1]。異常產(chǎn)生的原因有很多,比如數(shù)據(jù)本身的錯誤,或人為因素,而這些異常往往蘊含著一些隱秘的行為信息。在金融尤其是互聯(lián)網(wǎng)金融領(lǐng)域[2],高效準確的異常檢測系統(tǒng)能夠識別并預警用戶潛在的異常行為,控制金融風險,減少金融欺詐行為導致的經(jīng)濟損失。因此,如何從海量數(shù)據(jù)中監(jiān)控并檢測異常數(shù)據(jù)是一個亟待解決的重要問題。此外,異常檢測還廣泛應用于網(wǎng)絡入侵檢測[3]、醫(yī)療圖像輔助病癥判斷[4]、工業(yè)設備異常監(jiān)控[5]、智能安防監(jiān)控[6]等領(lǐng)域,為各類系統(tǒng)的正常運轉(zhuǎn)提供重要支撐。
LOF(local outlier factor,局部異常因子)算法[7]是一種經(jīng)典的基于密度估計的異常檢測算法,其將數(shù)據(jù)點的可達距離、局部可達密度與其鄰域數(shù)據(jù)點進行比較,并計算局部異常因子評估數(shù)據(jù)的異常程度,判斷數(shù)據(jù)是否屬于異常。基于密度的異常檢測算法適合用于數(shù)據(jù)分布不均的情況,算法復雜度較高。Liu 等[8]提出了孤立森林(isolation forest,IF)算法,其采用集成學習的方式,利用二叉搜索樹對樣本進行孤立計算,并以此衡量樣本的異常程度,異常點往往因為具有與正常點分離的特性而被更快地孤立,但是該方法難以檢測局部異常的情況。
近年來,隨著數(shù)據(jù)維度的提高,深度神經(jīng)網(wǎng)絡已經(jīng)顯示出其優(yōu)于傳統(tǒng)機器學習的優(yōu)點。An 等[9]提出了使用變分自編碼器進行異常檢測,并提出使用重構(gòu)概率衡量分布差異程度,該方法優(yōu)于使用自動編碼器的方法。杜辰飛等[10]提出了一個基于稀疏自編碼器的異常檢測模型,輸入正常數(shù)據(jù)對稀疏自編碼器進行訓練和優(yōu)化,然后基于測試數(shù)據(jù)的重構(gòu)誤差檢測數(shù)據(jù)中的異常情況。Li 等[11]提出了基于膠囊網(wǎng)絡的深度異常檢測算法,其使用膠囊網(wǎng)絡搭建編碼器和分類器,并基于預測概率和重建誤差對圖片數(shù)據(jù)進行異常檢測。丁建立等[12]采用自然語言處理常用的seq2seq 模型對數(shù)據(jù)進行建模,利用數(shù)據(jù)的重構(gòu)誤差對數(shù)據(jù)進行異常檢測。
目前的異常檢測算法大多依賴于重建誤差或重建概率等啟發(fā)式方法進行異常判斷,沒有利用數(shù)據(jù)的特征表示進行異常判斷。因此,本文以混合高斯先驗建立自編碼器,以得到數(shù)據(jù)更合理的特征分布,然后以自編碼器構(gòu)建深度支持向量網(wǎng)絡壓縮特征空間,通過尋找最小超球體分離異常數(shù)據(jù)和正常數(shù)據(jù),從而實現(xiàn)對異常數(shù)據(jù)的檢測。該方法擺脫了目前主流的基于重構(gòu)誤差或重建概率的異常檢測方法,基于數(shù)據(jù)特征的優(yōu)化進行異常檢測。
變分自編碼器[13]通過將深度學習與概率統(tǒng)計相結(jié)合,能夠?qū)W習到數(shù)據(jù)的特征分布。標準的變分自編碼器的優(yōu)化目標如式(1)所示。

模型通過最小化近似后驗分布和假設先驗分布之間的 KL 散度,使優(yōu)化目標證據(jù)下限(ELBO)最大化。然而,標準變分自編碼器中先驗采用簡單的標準正態(tài)分布,可能會導致后驗塌陷問題[14],并且容易忽略一些潛在的變量約束,導致無法較好地逼近不同類別數(shù)據(jù)的分布,影響編碼和解碼的效果。為此本文引入混合高斯分布作為變分自編碼器的先驗分布,如式(2)所示。

此時,式(1)中的第一項為混合高斯分布的KL 散度。式(2)、式(3)的高斯分量個數(shù)相同,都為M。一般地,先驗分布的混合高斯個數(shù)應不同于后驗分布的混合高斯個數(shù),這樣先驗和后驗中的高斯分量之間就必須進行逐一匹配,但是會出現(xiàn)后驗中多個高斯分量匹配先驗分布中某個高斯分量的情況,而后驗分布中的這些高斯分量的均值和方差都是由網(wǎng)絡從各批訓練數(shù)據(jù)中取得的,訓練數(shù)據(jù)的切分會影響均值和方差的估計,同時高斯分量個數(shù)的選擇也會影響匹配的準確性,導致求解問題復雜化。為簡化問題求解,本文采用了先驗和后驗由相同個數(shù)的高斯分量組成。但是到目前為止,尚未有一個高效的算法能夠求出與混合高斯分布相關(guān)的KL 散度的解析解。為了解決這個問題,Hershey[15]提出了混合高斯分布之間的KL 散度的近似求解算法,該算法使用變分推斷求解出所需要計算的KL 散度的上界。因此可以將最小化KL 散度的目標轉(zhuǎn)換為最小化其近似上界。
根據(jù)Hershey 提出的近似算法,可以得到式(1)中的第一項KL 散度的表達式,如式(4)所示。


支持向量數(shù)據(jù)描述(support vector 2ata 2escription,SVDD)是Tax 等[16]提出的一種在統(tǒng)計學理論基礎上發(fā)展的單值分類方法。SVDD 的目標是在特征空間Fk中找到中心c∈Fk、半徑R>0的超球體,該超球體將大多數(shù)目標類數(shù)據(jù)包圍,以此分離目標類數(shù)據(jù)與所有非目標類數(shù)據(jù)。
假設輸入數(shù)據(jù)為x(i),i=1, …,N,SVDD 在特征空間上尋找最優(yōu)超球體的優(yōu)化目標被定義為式(7)。

本文訓練一個混合高斯變分自編碼網(wǎng)絡,將網(wǎng)絡輸出擬合到最小超球體中,以學習數(shù)據(jù)特征分布變化的共同因素。本文將深度支持向量網(wǎng)絡的目標函數(shù)定義為式(8):

其中,φ是自編碼網(wǎng)絡的參數(shù),φ(x(i);φ)是自編碼網(wǎng)絡輸入為x(i)時的輸出,第二項是L2 正則化項,L是神經(jīng)網(wǎng)絡的層數(shù),φ(l)是自編碼網(wǎng)絡第l層的參數(shù),λ是正則化系數(shù),該正則化項可以減少模型過擬合,提高模型的泛化能力。由此,將數(shù)據(jù)的特征被壓縮到了以c為中心的超球體內(nèi)。
對于給定的測試數(shù)據(jù)x′,計算測試數(shù)據(jù)經(jīng)自編碼網(wǎng)絡的輸出到超球體中心的距離,定義深度支持向量網(wǎng)絡的異常分數(shù)s(x′)如式(9)所示。


圖1 異常檢測模型網(wǎng)絡結(jié)構(gòu)
本文使用卷積神經(jīng)網(wǎng)絡搭建混合高斯變分自編碼器,其網(wǎng)絡結(jié)構(gòu)如圖1 所示。在編碼器中,輸入圖像首先經(jīng)過一層含64 個卷積核、大小為3×3、步長為1 的卷積層,激活函數(shù)使用非線性的ReLU 函數(shù)。池化層在進行下采樣操作的時候,存在丟失有價值的信息的問題[17]。因此本文使用含64 個卷積核、大小為3×3、步長為2 的卷積層代替池化層進行下采樣,保留圖像中的重要信息。然后級聯(lián)一層含128 個卷積核、大小為3×3、步長為1 的卷積層,使用含128 個卷積核、大小為3×3、步長為2 的卷積層代替池化層。最后級聯(lián)含256 個卷積核、大小為3×3、步長為1 以及含256 個卷積核、大小為3×3、步長為2 的卷積層,然后級聯(lián)一個reshape 層,將數(shù)據(jù)維度轉(zhuǎn)換為2 304×1,再連接一個維數(shù)是10 的全連接層。
解碼器中使用反卷積完成對特征的復原工作。解碼器在結(jié)構(gòu)上和編碼器對稱,使用兩個維數(shù)分別是10 和2 304 的全連接層,再級聯(lián)一個reshape 層,將數(shù)據(jù)維度轉(zhuǎn)換為3×3×256,再級聯(lián)3 層反卷積層,分別具有128 個、64 個、1 個大小為3×3 的卷積核。與編碼器類似,解碼器使用步長為2 的反卷積層代替上采樣。除最后一層反卷積使用Sigmoi2 作為激活函數(shù),其余卷積層、反卷積層均使用ReLU 作為激活函數(shù)。
訓練得到的混合高斯變分自編碼器的編碼器部分作為深度支持向量網(wǎng)絡,并以學習獲得的編碼器參數(shù)作為初始值,以特征均值作為超球體中心,進一步訓練深度支持向量網(wǎng)絡。
在訓練階段中構(gòu)建并訓練混合高斯變分自編碼器,通過訓練混合高斯變分自編碼器得到正常類別數(shù)據(jù)的特征表示及特征的均值c。然后將均值c作為超球體中心,構(gòu)建并訓練深度支持向量網(wǎng)絡。在測試階段中將測試數(shù)據(jù)輸入深度支持向量網(wǎng)絡,根據(jù)式(9)計算異常分數(shù)。異常檢測的判別如式(10)所示,當測試數(shù)據(jù)的異常分數(shù)小于閾值時,則說明該數(shù)據(jù)落在超球體之內(nèi),認為是正常數(shù)據(jù);當測試數(shù)據(jù)的異常分數(shù)大于閾值時,則說明該數(shù)據(jù)落在超球體之外,認為是異常數(shù)據(jù)。

實驗采用Win2ows 10 平臺下的Python 3.6 編譯器。計算機參數(shù)配置為Intel Core i5-7300HQ@2.50 GHz CPU,內(nèi)存為8 GB,使用的編程環(huán)境為TensorFlow 和Keras,編程語言為Python。網(wǎng)絡使用正態(tài)分布隨機值初始化網(wǎng)絡參數(shù),batch size 設置為100,使用A2am 優(yōu)化器更新模型參數(shù),學習率設置為0.000 1。異常檢測就是在數(shù)據(jù)中檢測出遠離大量正常數(shù)據(jù)點的數(shù)據(jù),將正常數(shù)據(jù)看作目標類數(shù)據(jù),將各種異常數(shù)據(jù)均看作離群類數(shù)據(jù),因此在這個意義上可以看作一個二分類問題;同時Tucker[18]也指出,在混合高斯分布中,由兩個高斯分布分量組成的混合高斯分布具有較好的描述性質(zhì),并且兼顧了參數(shù)個數(shù)和擬合效果,保證了模型的靈活性。因此本文中混合高斯自編碼器的先驗和后驗均使用二分量的混合高斯分布,其系數(shù)分別為coefficient、1?coefficient。
為評估本文方法的有效性,本文采用了MNIST 數(shù)據(jù)集[19]和Fashion-MNIST 數(shù)據(jù)集[20]用于實驗測評。MNIST 數(shù)據(jù)集是一個包含 10 種不同數(shù)字(0~9)的數(shù)據(jù)集,將其中1 個數(shù)字作為正常類別數(shù)據(jù),其余9 個數(shù)字作為異常類別數(shù)據(jù)。Fashion-MNIST 數(shù)據(jù)集是一個包含10 種不同時尚商品的數(shù)據(jù)集,將其中1 種時尚商品作為正常類別數(shù)據(jù),其余9 種時尚商品作為異常類別數(shù)據(jù)。兩個數(shù)據(jù)集均以正常類別的數(shù)據(jù)作為訓練數(shù)據(jù),約各有6 000 個樣本。兩個數(shù)據(jù)集的測試集中各有10 000 個樣本,其中包括正常類別數(shù)據(jù)和異常類別數(shù)據(jù)。實驗中本文將兩個數(shù)據(jù)集中的圖像像素值歸一化到[0,1]。
本文使用異常檢測模型常用的AUC(area un2er curve)指標進行評估。AUC 值一般用于評價二分類模型,其值是ROC(receiver operating characteristic)曲線下的面積,常由混淆矩陣得到,混淆矩陣見表1。其中,TP(true positive)表示實際和預測均為正常的樣例;FN(false negative)表示預測為異常的正常樣例;FP(false positive)表示預測為正常的異常樣例;TN(true negative)表示實際與預測均為異常的樣例。

表1 二分類的混淆矩陣
由此可根據(jù)式(11)、式(12)計算出假陽性率(false positive rate,F(xiàn)PR)和真陽性率(true positive rate,TPR)。將式(9)中異常分數(shù)s(x′) 轉(zhuǎn)換成概率,則式(10)中閾值的取值落在[0,1],在[0,1]等間隔取200 個閾值,每一個閾值根據(jù)式(11)和式(12)得到一組FPR 和TPR 值。根據(jù)設定閾值的不同,從模型中得到各組 FPR和TPR 值,以FPR 作為橫坐標,TPR 作為縱坐標,即可得到模型的ROC 曲線。由于異常檢測中樣本往往存在分布不均的情況,使用準確率指標評估模型并不合適,而采用ROC 曲線下的面積AUC 指標同時考慮了模型針對正常例和異常例的分類能力,因此適合作為異常檢測模型的評估指標。

本文在MNIST 數(shù)據(jù)集上進行了異常檢測實驗。根據(jù)高斯分量混合系數(shù)的不同會產(chǎn)生多種混合高斯先驗,為了得到最佳的混合高斯分布的混合系數(shù)(coefficient),本文分別依次以10 個不同數(shù)字為正常數(shù)據(jù),其余數(shù)字為異常數(shù)據(jù),coefficient 在[0.1,0.9]以0.1 為步長取值,計算AUC 值,每個coefficient 值求取10 個不同數(shù)字的平均AUC 值,畫出平均AUC 值和coefficient值之間的曲線關(guān)系,結(jié)果如圖2 所示。由圖2 可知,本文算法在MNIST 數(shù)據(jù)集上的最佳混合高斯系數(shù)為(0.5,0.5)。
本文也與其他異常檢測算法進行了比較,實驗結(jié)果對比見表2,最優(yōu)結(jié)果加粗顯示。
表2 中數(shù)字“4”的AUC 略低于最高值,主要是因為類似于、、的數(shù)字“9”檢測為數(shù)字“4”,這對混淆矩陣中的FP 值影響比較大;數(shù)字“7”的AUC 略低,主要是因為不能檢測出類似于的數(shù)字“7”,這對FN 值影響比較大。從表2 可知,本文算法的平均AUC 值較其他異常檢測算法有一定的提高,表明本文算法在MNIST 數(shù)據(jù)集中實現(xiàn)了較好的檢測效果,能夠進行有效的異常檢測。

圖2 MNIST 數(shù)據(jù)集在不同高斯分量混合系數(shù)下的實驗結(jié)果平均值

表2 MNIST 數(shù)據(jù)集在各種異常檢測方法下的實驗結(jié)果對比
本文也在Fashion-MNIST 數(shù)據(jù)集上進行了異常檢測實驗。為了得到混合高斯分布的最佳混合系數(shù),本文分別依次以10種不同商品為正常數(shù)據(jù),其余商品為異常數(shù)據(jù),coefficient 采用和MNIST 數(shù)據(jù)集類似的方法,求得每個coefficient 值時10 種不同商品的平均AUC 值,畫出平均AUC 值和coefficient 值之間的曲線關(guān)系,結(jié)果如圖3 所示。由圖3 可知,本文算法在Fashion-MNIST 數(shù)據(jù)集上的最佳混合高斯系數(shù)為(0.4,0.6)。

圖3 Fashion-MNIST 數(shù)據(jù)集在不同高斯分量混合系數(shù)下的實驗結(jié)果平均值
同樣,本文也與其他異常檢測算法進行了比較,實驗結(jié)果對比見表3,最優(yōu)結(jié)果加粗顯示。
由表2 和表3 可知,本文算法具有較好的異常檢測效果,并優(yōu)于當前的一些異常檢測算法。

表3 Fashion-MNIST 數(shù)據(jù)集在各種異常檢測方法下的實驗結(jié)果對比
本文提出了一種基于混合高斯變分自編碼網(wǎng)絡的異常檢測算法,采用混合高斯為先驗構(gòu)建變分自編碼器提取數(shù)據(jù)特征,以自編碼器構(gòu)建深度支持向量網(wǎng)絡壓縮特征空間,尋找最小超球體分離正常數(shù)據(jù)與異常數(shù)據(jù),并以此進行異常檢測。實驗結(jié)果表明,本文算法優(yōu)于當前的一些異常檢測方法,實現(xiàn)了較好的異常檢測效果。然而,本文算法模型也有一定的不足,算法中高斯分量最佳混合系數(shù)的確定是根據(jù)混合系數(shù)與平均AUC值之間的曲線人為選擇的,下一步的重點是建立優(yōu)化模型來自適應地確定混合系數(shù)。