趙 飏 李 曉 馬 博 王保全 周 喜
(中國科學院新疆理化技術研究所 新疆 烏魯木齊 830011) (中國科學院大學 北京 100049) (新疆理化技術研究所新疆民族語音語言信息處理實驗室 新疆 烏魯木齊 830011)
隨著物聯網技術的普及,種類豐富的信息傳感器已經在人們的生活中隨處可見,加油站中的信息采集也由人工記錄全面轉化為電子傳感設備自動錄入,使得數據采集更加高效。但由于系統故障錯誤或人為操作失誤等因素,會產生異常加油數據。如何高效、準確地在海量加油數據中檢測異常,成為加油站日常運營管理中不可忽視的問題。傳統上,基于規則的異常檢測方法是檢測異常數據的常用解決方案,但由于加油數據體量巨大且擁有多變量的時序特性,無法簡單通過基于規則的方法來準確判別異常。機器學習方法也逐步運用在異常檢測中并取得了一定成果,但想要在加油站時序數據中檢測異常,仍然是一項挑戰。因為有監督機器學習方法需要大量真實的正常數據和帶有標注的異常數據來訓練學習,但實際中加油數據缺乏標記且異常數據較為稀少;而無監督學習大多是將樣本數據進行線性變換和投影后嵌入向量空間,通過比較原始數據和預測數據的差異值來檢測異常,但實際加油數據雖然數量較多,但個體加油樣本普遍較少,且復雜的加油時序序列數據隱含的內在相關性往往是非線性的。
為了解決這一問題,本文針對加油時序數據異常檢測提出一種基于生成式對抗網絡[1](Generative Adversarial Network,GAN)的無監督異常檢測方法,該方法通過捕捉加油站時序數據之間的非線性相關性來建立模型,并結合模型中的生成器和鑒別器共同來進行異常檢測。
目前關于無監督學習的異常檢測算法主要可以分成四類:(1) 基于線性模型的方法;(2) 基于距離的方法;(3) 基于概率和密度估計的方法;(4) 基于統計機器學習的方法。
基于線性模型的無監督異常檢測方法中,一種主流的方法是主成分分析(Principal Component Analysis,PCA)[2],它對數據進行降維后嵌入到低維空間,通過比較單個數據樣本跟整體數據樣本的偏離程度來挖掘異常;另一種方法是偏最小二乘法(Partial Least Squares,PLS)[3],它不僅可以克服共線性問題,還去除了對回歸無益的噪聲影響,因此被廣泛應用于模型建立和異常檢測。然而,它們只對具有高度相關性的數據有效[4],加油數據中個體和個體之間的加油行為卻往往是相互獨立的,因此并不適用于加油時序數據。
基于距離的異常檢測方法中[5],K近鄰(K-NearestNeighbor,KNN)算法是比較簡單有效的一種,它通過參考特征空間中距離該樣本最近的k個“鄰居”的類別來對樣本進行分類,從而達到檢測異常點的目的[6]。此外還有基于密度、基于聚類的一些衍生方法,例如局部異常因子(Local Outlier Factor,LOF)算法[7],它會給數據中的每個點計算離群因子,通過判斷這個離群因子是否接近于1來判定該點是否離群。以及對前者進行改進的基于聚類的局部離群因子(Cluster-Based Local Outlier Factor,CBLOF)[8]方法,它使用一個預定義的異常評分函數來識別異常。雖然這些基于距離的方法在某些情況下是有效的,但在加油時序數據中,數據間的距離難以界定,且正常數據可能沒有足夠的樣本鄰居,因此基于距離的異常檢測方法不適用于加油時序數據。
基于概率和密度估計的方法中,有基于角度的異常檢測(Angle-Based Outlier Detection,ABOD)算法[9],還有特征裝袋(Feature Bagging,FB)算法[10],它們都是通過考慮變量之間的相關性來處理數據。但是這些方法不能考慮時序數據中時間步長上的相關性,因而并不適合用來處理加油時序數據。
還有基于統計機器學習的方法,通過神經網絡具備的強特征提取能力和信息記憶能力來捕捉正常數據中的異常點,提出很多有效的模型,并應用在了各個領域。比較有代表性的有變分自編碼器(Variational Auto-Encoder,VAE)[11]和循環神經網絡(Recurrent Neural Network,RNN)[12]等,它們都是利用正常數據訓練神經網絡,然后通過檢測實際數據的重構誤差來進行異常檢測。
綜上,通過神經網絡來進行機器學習,捕獲數據特征間隱藏的相關性,建立符合實際需求的模型,能夠更好地開展對加油時序數據的異常檢測工作。
本文繼承了基于無監督學習的異常檢測算法思想,并受到GAN模型博弈原理[13]的啟發后,提出一種新的異常檢測方法。主要工作如下:(1) 提出一種基于GAN的無監督異常檢測方法,用于檢測加油時序數據中的異常;(2) 模型結構采用了廣泛應用在圖像開發中的GAN框架,將長短期循環神經網絡(LSTM)嵌入GAN框架作為生成器和鑒別器[14]來分析加油時序數據,捕捉其時間相關性;(3) 綜合鑒別器的判別結果和生成器的數據重構殘差來對每一個測試樣本進行異常評分。
近年來提出的生成式對抗網絡(GAN)框架能夠通過博弈訓練生成模型,它以對抗的方式同時訓練生成器和鑒別器:生成器(generator,G)的思想是將一個噪聲包裝成一個逼真的樣本,判別器(discriminator,D)則需要判斷送入的樣本是否真實,即通過對抗訓練共同進步,判別器D對樣本的判別能力不斷上升,生成器G生成樣本能力也不斷上升[15]。目前GAN主要應用在一些生成圖像的工作中,并取得了一定成果,例如在醫學領域可以通過GAN模型來對腫瘤CT圖像進行語義分割與檢測[16];或是在影像方面進行視頻修復[17],但是目前在時間序列數據中采用GAN框架的工作還比較少,且加油時序數據還要求同時處理多個具有潛在關系的變量。
為了處理加油的時間序列數據,將GAN的生成器和鑒別器構造為兩個長短期遞歸神經網絡(LSTM)。首先將加油數據通過PCA進行降維后輸入至GAN模型,在添加來自潛在空間的隨機噪聲后將序列輸入至生成器中,生成器根據輸入生成序列樣本傳遞給鑒別器,鑒別器將嘗試區分生成的序列樣本和實際的訓練樣本,并根據鑒別結果更新自身和生成器的參數,這樣可以訓練鑒別器盡可能地為真序列和假序列分配正確的標簽。在經過足夠多輪的迭代后,生成器將被訓練得能生成足夠逼真的樣本,并且鑒別器也能夠以較高精準度區分真(正常)數據和假(異常)數據。在加油時序數據異常檢測工作中,通過計算實際測試樣本和生成測試樣本之間的差異來得到數據的重構損失以及鑒別器對實際測試樣本的判別損失,綜合這兩部分來檢測數據中的潛在異常。本文方法的總體流程如圖1所示。

圖1 GAN模型流程
長短期記憶循環神經網絡(LSTM)模型由Hochreiter等[18]在1997年提出,是對循環神經網絡(RNN)的一種改進。RNN的隱藏層只有一個狀態,它對短時間內的輸入較為敏感,而LSTM添加了一個內部記憶單元c來保存長期狀態,并同時增加3個門用于控制[19],分別是遺忘門ft、輸入門it和輸出門ot。遺忘門ft決定上一層隱藏層輸出被遺忘的程度大小:
ft=δ(Wf×xt+Uf×ht-1+Vf×Ct-1+bf)
(1)
式中:C表示LSTM中的細胞狀態。
輸入門it控制輸入和當前計算的狀態更新到記憶單元的程度大小:
it=δ(Wi×xt+Uiht-1+ViCt-1+bi)
(2)
輸出門ot控制輸入和當前輸出取決于當前記憶單元的程度大小:
ot=δ(Wo×xt+Uo×ht-1+Vo×Ct+bo)
(3)
通過這三個控制門,記憶單元c即可有效記憶歷史輸入值,從而增加了模型的特征包含能力和記憶能力,其在t時刻的狀態即可表示為:
ct=ft×ct-1+it×tanh(Wc×xt+Uc×ht-1+bc)
(4)
所以LSTM單元在t時間點的所有輸出為:
ht=ot×tanh(ct)
(5)
式中:W、U、V、b分別是系數組成的矩陣和偏置的向量;δ是激活函數Sigmoid。
通過數據預處理以后,將訓練集Dtrain=(xi,i=1,2,…,n)以及對其添加隨機噪聲后生成的樣本Z=(zi,i=1,2,…,n)輸入GAN模型,對抗訓練可以看成是采用生成器與判別器之間的一個極小極大化策略[20],目標函數如下:
min maxL(D,G)=εx~pdata(D)[logD(x)]+
εz~pz(z)[log(1-D(G(z)))]
(6)
式中:ε指代取期望;D(x)為判別映射函數;G(z)為生成映射函數;Pdata為真實數據分布;Pz為原始噪聲的分布。
經過足夠多輪的迭代訓練后模型達到擬合,訓練好的鑒別器(D)和生成器(G)即可用于檢測測試集中的異常。模型訓練過程如圖2所示。

圖2 GAN模型訓練過程
這里通過加權計算鑒別器(D)的鑒別損失LD和生成器(G)的重構殘差LG兩部分得到異常損失L,通過比較L的交叉熵H和預定值T來判斷是否為異常點。并將每一條數據標記如下:
(7)
式中:Li代表測試集中第i條數據yi的異常損失。
在GAN模型訓練達到擬合后,將訓練好的鑒別器和生成器共同用來檢測異常,如圖3所示的測試過程中,將兩部分都應用于異常評判中能夠更好地來識別異常,所以基于GAN的異常檢測由兩部分構成。
(1) 基于判別器的異常檢測:訓練后的鑒別器能夠以較高靈敏度將“假數據”(即異常數據)與真實數據區分開來,可以直接用來進行異常檢測。
(2) 基于生成器的異常檢測:訓練后的生成器能夠生成足夠逼真的數據樣本,它實際上是一種從潛在空間到真實數據的映射:G(Z):Z→X。如果潛在空間中的輸入十分接近,則生成器可輸出相似的樣本。因此,如果能夠在測試集Dtest的潛在空間中找到對應的映射,那么測試集Dtest和通過生成器重構的測試樣本G(Z)之間的相似性可以在一定程度上反映測試集是否符合生成器所反映的數據分布。這樣可以利用測試集和生成樣本之間的重構殘差LG來識別測試數據中的異常點。

圖3 GAN模型測試過程
為了找到與測試樣本相對應的最佳Zt,首先從測試集中隨機抽取一個集合Z1作為樣本,通過潛在空間映射輸入生成器,得到重構樣本G(Z1)。然后用Dtest和G(Z1)定義的誤差函數得到的梯度來更新映射到潛在空間中的樣本。為了便于計算,這里通過計算協方差來比較數據樣本之間的相似性[21]。
minErr(Dtest,G(Zi))=1-Sim(Dtest,G(Z1))
(8)
式中:Err(Dtest,G(Zi))為重構樣本損失函數;G(Z1)為生成映射函數;Sim(Dtest,G(Z1))為相似性函數。
經過迭代多輪更新后,誤差會達到足夠小,此時將樣本Zt記錄為測試樣本在潛在空間中的對應映射。所以得到測試樣本的重構殘差:
(9)
再結合鑒別器的判別損失,可以得到異常檢測的損失L為:
L=λLG+(1-λ)LD
(10)
式中:LG為生成器的重構殘差;LD為判別器的判別損失;λ為影響因子。
為了驗證本文方法在時序數據異常檢測上的準確性和有效性,本文在兩個數據集上進行了實驗,第一個是在中國某省份各加油站采集的加油數據集,另一個是公開時序數據集UCR[22]。
實驗機系統為Windows 7 64位操作系統,CPU為Intel(R) Core(TM) i7-3770HQ CPU @ 3.40 GHz,內存8 GB,Python版本為3.5,使用的數據庫為MongoDB 3.0。
加油數據集采用了某省份所有加油站兩個月的加油記錄作為原始數據,對其進行數據清洗、數據融合和特征處理等操作后得到真實可靠的實驗數據,將其作為實驗中的正常數據;異常數據選取歷史檢測工作中通過預警記錄、人工篩查等方式確認的部分異常數據。最后將正常數據的80%作為實驗的訓練集,另外20%正常數據和異常數據共同作為測試集。
3.2.1加油數據集
加油數據集采用了某省份所有加油站兩個月的加油記錄作為原始數據,對其進行數據清洗、數據融合、特征處理等操作后得到真實可靠的實驗數據,將其作為實驗中的正常數據;異常數據選取歷史檢測工作中通過預警記錄、人工篩查等方式確認的部分異常數據。最后將正常數據的80%作為實驗的訓練集,另外20%正常數據和異常數據共同作為測試集。
UCR數據集是一個用于時間序列分類預測的公開數據集,其中包含80多個用于時間序列分類的數據集,本文從中選取了Wafer數據集和Ford數據集作為對比實驗數據集。Wafer數據集共有7 174條記錄,含有類別標簽和152個特征;Ford數據集共有4 921條記錄,含有類別標簽和500個特征。兩個數據集都按照7 ∶3的比例劃分訓練集和測試集。
3.3.1加油數據樣本生成
在GAN模型的博弈對抗過程中,為了使鑒別器能夠敏銳地分辨真假樣本,生成器會根據輸入盡可能生成逼真的數據樣本。為了驗證LSTM-GAN模型是否可以捕捉到時序數據樣本的特征分布,將加油數據集訓練過程中初期(第10輪)和后期(第80輪)生成的數據樣本進行可視化,這里選擇了t6和t8兩個特征,結果如圖4所示,其中:圖4(a)為原始數據的特征分布;圖4(b)為訓練初期(第10輪)生成的樣本;圖4(c)為訓練后期(第80輪)生成的樣本。

(a) 真實樣本分布
可以看出,在訓練初期生成器的穩定性較差,產生的數據樣本有很強的隨機性,但隨著迭代輪數的增加,在訓練達到第80輪時,生成器產生的樣本已經基本符合真實樣本的數據分布,說明通過多輪訓練LSTM-GAN模型可以有效學習到加油時序數據樣本特征的分布。
3.3.2最佳子序列長度分析對比
在實驗中,加油數據被處理成序列輸入模型中進行訓練,而子序列長度會影響到模型訓練時間以及預測結果的好壞,從而影響異常檢測的結果。選擇合適的子序列長度不僅可以提高模型的效率,還能提升模型的檢測效果。這里通過嘗試一些子序列長度來確定最佳值。具體結果如表1所示。

表1 不同子序列長度結果對比
可以看出子序列長度較小時,GAN模型在加油數據集上的預測效果一般,精確率低于60%;隨著子序列長度提升至50,預測效果相較于之前較好,精確率和F1值都有較大提升;而當子序列長度達到100左右時,雖然模型召回率能提升至接近90%,但精確率開始大幅下滑,整體預測效果較差。所以在模型訓練時子序列長度選定為50,此時模型異常檢測的效果最好。
如前所述,為了減少模型的計算量,提高模型效率,在輸入模型前對加油數據使用PCA進行降維處理,剔除次要變量。為了能夠盡可能保留原始樣本信息,這里計算了PCA各保留特征數的方差率,結果如圖5所示。

圖5 PCA方差率
可以看出當通過PCA保留5個特征時,占所有特征方差的百分比已超過90%,意味著基本保留了所有信息,所以確定PCA保留特征數為5。
3.3.4加油數據集實驗
在加油數據集實驗中,通過與已經驗證在異常檢測領域上有效的K近鄰(KNN)、裝袋法(FB)、自動編碼機(AutoEncoder)和孤立森林(IsolationForest)[23]進行比較評估,來驗證本文算法的性能。為了考量模型檢測異常的整體效果,實驗結果使用精確率(Precision)、召回率(Recall)和F1值來綜合評估LSTM-GAN模型的異常檢測性能:
(11)
(12)
(13)
式中:TP是實際檢測出的異常樣本數量(檢測值:1;真實值:1);FP是檢測為異常但實際非異常的樣本數量(檢測值:1;真實值:0);FN是未被檢測出的異常樣本數量(檢測值:0;真實值:1);TN是實際檢測為正常的樣本數量(檢測值:0;真實值:0);Precision簡寫為Pre;Recall簡寫為Rec。
實驗結果如表2所示。

表2 加油數據集實驗結果對比
實驗結果表明相比于傳統的異常檢測算法,本文提出的LSTM-GAN模型在召回率和F1值上都具有較好的效果,雖然精確率相對于FeatureBagging和IForest較低,但是后兩者的召回率較差,無法同時兼顧精確率和召回率。而LSTM-GAN模型的精確率和召回率都在75%以上,且從F1值上可以看出LSTM-GAN模型整體預測效果更好,說明LSTM-GAN模型在加油時序數據上有著較好的檢測結果。
Wafer數據集上的結果如表3所示。

表3 Wafer數據集實驗結果對比
Ford數據集上的結果如表4所示。

表4 Ford數據集實驗結果對比
結果表明,在UCR的兩個數據集上LSTM-GAN模型相比于其他三種方法的整體預測效果較好。在Wafer數據集上IsolationForest和LSTM-GAN相較于其他兩種方法效果更好,且LSTM-GAN的F1值更高。在Ford數據集上由于數據的維數較高且樣本數量較少,整體預測結果都不是很理想,但LSTM-GAN模型還是能夠有近90%的精確率和超過60%的召回率,說明LSTM-GAN模型在時序數據上相比于其他方法有較好的預測結果。
本文鑒于目前在加油時序數據上的無監督異常檢測方法存在一定缺陷,提出一種將LSTM嵌入GAN模型并通過生成器和鑒別器共同檢測數據異常的方法。該方法首先通過PCA對數據進行降維處理,提取有效特征后輸入GAN模型進行訓練,待模型擬合后將測試數據輸入,通過訓練好的生成器和鑒別器共同得到異常損失,與設定閾值進行比較來對時序數據進行異常檢測。在加油數據集和UCR中兩個數據集上的實驗結果表明該方法對于現有算法有了一定的改進與提升。但是LSTM-GAN模型中的LSTM神經網絡在處理較長時間序列時需要更多的時間且GAN模型的博弈訓練過程自由性較高,還不是足夠穩定,后續的研究過程中將探索是否能夠結合其他神經網絡提高模型效率并且能使訓練過程更加穩定的異常檢測方法。