1. 程式人生 > >序列異常檢測

序列異常檢測

序列在現實世界中是非常常見的一種資料形式,即在時間維度上感測器採集的資料流。我們最常見的序列資料像語音,自然語言,視訊等訊號,它們的共同點就是有很強的上下文。一般而言,任何高階有效的模型在處理這種資料時都會考慮這種上下文關係,充分挖掘潛藏的時空相關性,以對資料進行建模,比如混合動態紋理模型。而異常呢,一般在不同場景中有不同的定義,比如一個心臟跳動的訊號,在平穩中突然跳動。那麼這個跳動就是異常,任何高階的系統都會捕捉到異常並報警。無論是哪種異常,在計算機的世界裡,無非就是在特徵維度張成的空間中,根據相應的度量形式尋找遠離簇的孤立點。其實,異常檢測在現實世界中有著廣泛的應用,並在各領域扮演著重要的角色,比如網路入侵,欺詐檢測,視訊監控等。
本文主要討論在序列資料中如何建立有效的非監督模型去發現異常。非監督的框架在現實世界中更加有效,因為資料的標籤很難有效得到。總之,這類問題有3個挑戰:

  • 噪聲:任何系統都存在噪聲,當然噪聲有不同的表現形式。正因為噪聲的存在,使得某些正常資料看似異常,給該類問題帶來挑戰。
  • 時間相干性:由於存在很強的上下文關係,因此異常檢測會面臨相關性挑戰。另外,序列資料一般會隨著時間不斷演變進化;更有甚者,異常/正常也會隨著時間演變。比如,心臟跳動訊號,平穩中出現跳動,跳動中突然平穩。
  • 資料維度:比如在視訊監控中,我們面臨的資料是高維的。設計的模型一方面能應對這種高維資料,一方面得有時間複雜度的把控。

下面介紹3篇文獻,學習他們的建模方法。其中,一篇基於傳統的類似混合動態紋理模型,另兩篇基於比較火的RNN和LSTM模型。
第一篇文獻是國內中山大學在視覺領域-前景檢測方面的研究成果,

Complex background subtraction by pursuing dynamic spatio-temporal models。總的來說,提出的方法最核心的思想即是在一個定義的隱空間中考慮時間相干性;並提出了模型在線上檢測中的更新機制。我們具體看一下建模過程:
V={v1,v2,,vn}表示在n個連續幀中相同位置處的資料,其中viRm表示在第i幀的當前位置處提取的特徵向量。該特徵向量是在以該位置為中心的小立方體(比如3×3×5 pixels)中提取類似於local ternary patterns (LTP)的特徵。在這個特徵向量空間中,作者採用了一組正交基
CRm×d
來表示其中的點,並刻畫序列資料的一致性:

vi=Czi+wi
其中zi為係數,wi為誤差項。在係數層這個隱空間中,作者採用了矩陣ARd×d來表徵資料的動態性,並刻畫序列資料的時間相干性:
zi+1=Azi+ni
最終的問題形式化為:
minC,A,Z12ni=1nviCzi22+ziAzi122
因此,解決這類問題的一個嚴峻挑戰-時間相干性,就轉化為了在觀測資料下,求解資料一致性矩陣C和時間相干性矩陣A。該問題的求解採用交替優化的策略,Z 和 (C,A)。比如在當前資料Vn下,求解Cn:
Cn=argminCn|VnCn[z1,,zn]|
上述問題可通過對Vn的奇異值分解求解。對於An:
An=argminAn|[z2,,zn]Cn[z1,,zn1]|
檢測部分:當有新的資料