摘要:亞馬遜提出的deepar算法基於seq2seq模型對單維時間序列進行建模、預測,基於預測結果對時間序列中的異常點進行識別,但這種方法不適用於多維度的時間序列建模。在利用IoT+AI對現實世界中的物理設備進行異常檢測的過程中,一個設備的運轉/健康狀態往往是由一系列指標共同決定的,指標之間並非相互獨立的關系。本文吸收deepar算法的概率建模思想,以電機設備為例,提出一個對多維度指標進行異常檢測的神經網絡算法。
主要原理:
1、使用編碼器將多維度時間序列編碼為一個語義向量,編碼器可以是一個LSTM網絡或者卷積網絡;
2、解碼器(一個MLP)對該向量進行解碼,將其映射為兩個參數,分別是:當前時刻多維指標的均值向量和協方差矩陣,這兩個參數表征了一個多維高斯分布;
3、概率層攝取高斯分布的參數,計算當前時刻設備狀態的概率密度的負對數,通常認為異常狀態所對應的概率密度值應遠小於正常狀態,因此通過為該輸出設置閾值,即可用於異常檢測;
4、訓練過程,只需最小化模型輸出即可;
通過輸出多維高斯分布的均值向量和協方差矩陣對設備狀態的概率密度進行刻畫,面臨的一個數學問題是,協方差矩陣必須為對稱正定矩陣,如果直接通過MLP將語義向量映射為一個方陣,則無法滿足對稱正定約束,也無法訓練。
解決這個問題的方法為cholesky分解,對稱正定矩陣總是可以分解為一個對角線元素全為正的上/下三角矩陣及其轉置的乘積,反之也成立。
因此,我們在解碼器層,不直接輸出協方差矩陣,而是輸出precision矩陣(協方差矩陣的逆)的cholesky分解,並保證cholesky分解的對角線元素大於0即可(softplus),進一步可計算得到precision矩陣。
我們仍然使用一個MLP(cov_net)將輸入映射為一個方陣,但是只用其上三角部分,並對對角線部分作softplus轉換,保證其非負性,作為precision矩陣的cholesky分解。
在概率層,協方差矩陣行列式的計算,可直接使用cholesky分解的對角線乘積的平方即可。
然后,在概率層計算真實數據的負對數似然。
最后模型的優化,只需最小化模型輸出即可,通過自定義以下損失函數,訓練時將truth設置為0即可達到優化的目的。
與deepar算法的比較:
1、deepar針對單維度時間序列進行建模,本算法針對多維序列進行建模;
2、deepar是一個seq2seq模型,本算法也是encoder-decoder架構,但是只對單點進行建模;
3、deepar輸出時間序列的預測值,本算法輸出的是數據的負對數似然,即本算法將deepar中概率計算過程從loss拿到了概率層;
4、異常檢測方式:deepar使用ancestral sampling重復多次采樣,通過計算采樣值的上下百分位數作為異常檢測的邊界,這樣的方法存在兩個問題:誤差累積和計算量大;針對多維數據,無法采用這樣的方式,因為多維空間要比一維空間稀疏得多,要想用一系列采樣值來表征一個多維分布,樣本量必須充分大,這在計算上是不可行的,因此本算法采用單步預測方式,避免了采樣帶來的問題。
5、deepar向前預測時間序列的未來值,本算法在給定序列值的前提下計算其“合理性”;
6、deepar要求序列未來時刻的協變量是必須是可預知的,本算法無此要求。
以下為將本算法應用於實時電機異常檢測的整體過程。
總體流程:
詳細過程:
原理: 本文提出一種基於編碼器、解碼器、概率層的三層神經網絡結構,對電機的狀態進行條件概率建模: 其中,Z代表要建模的目標變量,X代表協變量,下標代表時刻。 主要步驟如下:
原理框圖如下,其中各個變量的含義為: X:協變量 Z:目標變量,也即要進行概率建模的變量 t:當前時刻 k:序列長度 Encoded:對序列的編碼 miu:高斯分布的均值向量 covariance:高斯分布的協方差矩陣 Gaussian:高斯分布表示的概率層 P:目標變量概率密度的負對數 |