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

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

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


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

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

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


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

實驗采用Win2ows 10 平臺下的Python 3.6 編譯器。計算機參數配置為Intel Core i5-7300HQ@2.50 GHz CPU,內存為8 GB,使用的編程環境為TensorFlow 和Keras,編程語言為Python。網絡使用正態分布隨機值初始化網絡參數,batch size 設置為100,使用A2am 優化器更新模型參數,學習率設置為0.000 1。異常檢測就是在數據中檢測出遠離大量正常數據點的數據,將正常數據看作目標類數據,將各種異常數據均看作離群類數據,因此在這個意義上可以看作一個二分類問題;同時Tucker[18]也指出,在混合高斯分布中,由兩個高斯分布分量組成的混合高斯分布具有較好的描述性質,并且兼顧了參數個數和擬合效果,保證了模型的靈活性。因此本文中混合高斯自編碼器的先驗和后驗均使用二分量的混合高斯分布,其系數分別為coefficient、1?coefficient。
為評估本文方法的有效性,本文采用了MNIST 數據集[19]和Fashion-MNIST 數據集[20]用于實驗測評。MNIST 數據集是一個包含 10 種不同數字(0~9)的數據集,將其中1 個數字作為正常類別數據,其余9 個數字作為異常類別數據。Fashion-MNIST 數據集是一個包含10 種不同時尚商品的數據集,將其中1 種時尚商品作為正常類別數據,其余9 種時尚商品作為異常類別數據。兩個數據集均以正常類別的數據作為訓練數據,約各有6 000 個樣本。兩個數據集的測試集中各有10 000 個樣本,其中包括正常類別數據和異常類別數據。實驗中本文將兩個數據集中的圖像像素值歸一化到[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 二分類的混淆矩陣
由此可根據式(11)、式(12)計算出假陽性率(false positive rate,FPR)和真陽性率(true positive rate,TPR)。將式(9)中異常分數s(x′) 轉換成概率,則式(10)中閾值的取值落在[0,1],在[0,1]等間隔取200 個閾值,每一個閾值根據式(11)和式(12)得到一組FPR 和TPR 值。根據設定閾值的不同,從模型中得到各組 FPR和TPR 值,以FPR 作為橫坐標,TPR 作為縱坐標,即可得到模型的ROC 曲線。由于異常檢測中樣本往往存在分布不均的情況,使用準確率指標評估模型并不合適,而采用ROC 曲線下的面積AUC 指標同時考慮了模型針對正常例和異常例的分類能力,因此適合作為異常檢測模型的評估指標。

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

圖2 MNIST 數據集在不同高斯分量混合系數下的實驗結果平均值

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

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

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