科技#time-series#anomaly-detection#deep-learning#architecture

時間序列異常偵測:底層拆解

卓伊工程師卓伊工程師|2026年6月13日|5 分鐘閱讀
時間序列異常偵測:底層拆解

在資料中心裡運作的時間序列異常偵測器,本質上是三個東西穿著一件大衣。一個滑動視窗變成張量;張量通過一個模型,輸出重建值或預測值;第二段再把這個輸出跟真實訊號比對,偏離太遠就標記。每一層都有自己的故障模式。趨勢轉變會讓一個在平穩資料上訓練的預測器錯亂;雜訊太多的訓練資料會污染重建模型對「正常」的認知;門檻值設得不好,儀表板就會被假警報淹沒。

系統全貌

核心來說,這個系統只回答一個問題:這一段時間的資料,看起來像不像之前發生過的事?答案從來不是簡單的是或否。模型會替每個點或每個視窗產出一個異常分數,然後由人——或上游的規則——決定在哪裡畫線。大多數深度學習的做法可以分成兩大陣營。預測型模型會預測接下來幾個時間步的數值,當實際值跟預測差太遠時就大叫。重建型模型則是把一段視窗壓縮成潛在表徵,再展開回來,凡是沒能順利完成這趟來回的視窗,就標記為異常。最近有一篇回顧論文就是用這種方式來分類架構,並指出選擇預測還是重建,往往是第一個分岔路口。

逐層拆解

感應器:原始訊號

在任何模型看到資料之前,某個實體的東西——一支熱電偶、一個網路介面計數器、一筆銷售資料庫查詢——會產出一個數字。這個數字本身就帶有故障模式。一個卡住的感應器會連續好幾小時回報同樣的數值;一個重新取樣的指標會藏住收集器當機造成的資料空缺;日光節約時間的跳變看起來像突然的尖峰。如果在前處理階段沒有處理好這些狀況,模型就會學著把它們當成正常。垃圾進、垃圾出在這裡不是陳腔濫調,而是第一個設計決策。

模型:學習核心

一旦訊號被切成視窗並正規化,就會進入模型。預測型架構常用遞迴網路,或者最近更常見的,Transformer。Transformer 拿掉了序列處理的瓶頸,讓每個時間步都能關注到其他所有時間步,這在異常橫跨長距離脈絡時特別有幫助。有一篇論文提出只用編碼器的 Transformer 來對多變量時間序列進行非監督式表徵學習,結果顯示在分類和迴歸任務上勝過先前的方法。重建型架構則倚賴自編碼器,有時搭配卷積或殘差區塊。一個帶有跳躍連接的 ResNet 風格編碼器,可以保留普通卷積堆疊可能會洗掉的細緻模式;當異常是微妙的形狀變化,而不是幅度上的尖峰時,這件事就很重要。

一種較新的設計,稱為自編碼器加迴歸(AER),試著擷取兩邊的優點。它把重建損失跟一個預測未來值的迴歸頭耦合在一起,然後再融合這兩種異常分數。作者還引入了雙向評分——對視窗分別向前和向後跑模型——來清除序列開頭的假警報。這種技巧,只有當你盯著夠多儀表板,恨透每個警報最前面那幾個點的時候,才會覺得它重要。

應用層:決策環節

模型輸出一個數字;應用程式必須判斷這個數字是否代表有意義的事。靜態門檻值在工作負載改變之前都有效。動態門檻值——基於百分位數、自適應的——有效,直到它們適應了異常本身。遮罩是一個小巧但有效的附加功能:如果平滑函數剛好在序列邊緣產生一個尖峰,系統可以把它壓掉,因為邊緣假影很少是真實事件。AER 論文對每個基線都施加遮罩,並看到一致的改善,這暗示很多偵測器都在視窗邊界上亂叫狼來了。

邊界案例

有趣的問題都住在假設破裂的地方。一個只在午夜到清晨六點流量上訓練的預測模型,當白天的批次作業啟動時,會完全失靈。一個只看過健康機器振動的重建模型,會把破裂的軸承重建得好像它很正常,因為破裂也出現在訓練資料裡了。多變量序列則增添了組合上的複雜度:異常可能只存在於兩個訊號之間的關係,單看任何一個都看不出來。基於距離的方法,把時間序列當成轉換後空間中的向量,可以抓到這類異常,但它們需要一個尊重時間順序的相似度量測——這個細節很容易被忽略,直到假陰性的報告躺到你桌上為止。

哪些地方會壞

序列開頭的假警報是最惱人的故障模式,因為每次系統啟動或視窗滑動時都會觸發。遮罩有幫助,但根本原因往往是模型缺乏左側脈絡,只能從雜訊中外推。另一種壞法是概念漂移:世界變了,訓練資料沒變,異常偵測器就慢慢變成變化偵測器。排程重新訓練是常見的解法,但那個排程本身就是一個你可能會設錯的超參數。最後,對抗性的沉默——攻擊者或程式錯誤讓訊號維持在正常範圍內,同時造成傷害——會擊敗任何只看幅度的模型。變化率特徵或頻域轉換可以讓這類問題浮現,代價是更高的複雜度和更多需要調校的旋鈕。

這一切都不是魔法。它是一連串選擇構成的管線,每個選擇都有故障模式,而最好的結果不是零假警報,而是一個你夠了解其故障模式、足以繞過它們的系統。

參考資料

相關文章