機器學習2021 — 異常偵測
機器學習2021 — 異常偵測¶
異常偵測介紹:讓機器知其所不知 (Anomaly Detection: Enabling Machines to Know What They Don’t Know)
異常偵測,如果翻譯成中文,就是「異常偵測」。這項技術的核心目標,如同古人所言「知之為知之,不知為不知,是知也」,是讓機器能夠知道它不知道的事情。
在機器學習的範疇中,異常偵測的目標是找到一個函數。當給予一個新的輸入 x 時,這個函數必須決定該輸入與訓練資料集 x1 到 xn 相比,是相似(正常的資料)不相似(異常的東西,anomaly)。
值得強調的是,雖然「異常」一詞通常帶有負面含義,但異常偵測不一定是尋找不好的東西。它只是尋找與訓練資料不一樣的東西。因此,異常的結果可能特別好,也可能特別壞。
在不同領域中,異常偵測可能有不同的名稱:
• 離群值偵測 (Outlier Detection)
• 新穎性偵測 (Novelty Detection),通常帶有比較正面的意涵,意指找到新的東西
• 例外偵測 (Exception Detection)
異常的定義與訓練資料的影響
「什麼是異常」完全取決於您提供給機器的訓練資料。
例如,若您給予大量的雷丘作為訓練資料,那麼皮卡丘就會被視為異常。若您給予許多寶可夢(如皮卡丘、雷丘、水箭龜)作為訓練資料,那麼非寶可夢的東西(例如數碼寶貝中的亞古獸)就會是異常的。
異常偵測方法的核心挑戰在於,不同的方法會用不同的方式來定義「什麼叫像」以及「什麼叫做不像」訓練資料。
異常偵測的實際應用
異常偵測的技術具有非常多有用的應用:
-
詐欺偵測 (Fraud Detection):訓練資料是正常的刷卡行為或交易紀錄。透過異常偵測,系統可以判斷新的交易紀錄是否具有詐欺嫌疑,例如金額特別高或在短時間內連續發生高額消費。
-
網路系統入侵偵測:訓練資料是正常的連線。系統藉此自動決定新的連線是否屬於攻擊行為。
-
醫療應用:例如癌細胞偵測。訓練資料是正常的細胞的資料(如細胞核大小、分裂頻率等)。系統可藉此判斷新的細胞是有問題的癌細胞還是正常的細胞。
為什麼異常偵測並非單純的二元分類?
雖然直覺上可以將正常資料視為 Class 1,異常資料視為 Class 2,並套用已經學過的二元分類(Binary Classification)技術,但此問題的複雜性使其成為一個獨立的研究主題。
主要有兩大原因無法將其視為普通的二元分類問題:
-
異常資料的變化性太大 (Class 2 無法窮舉):世界上「不是正常資料」的東西太多了,異常的資料的分佈無法被窮舉。例如,如果寶可夢是正常的資料,那麼數碼寶貝、涼宮春日、甚至是茶壺都是異常資料。異常資料的變化太大,因此不應該將其視為一個單一的類別。
-
異常資料難以蒐集:通常蒐集正常的資料比較容易,而蒐集異常的資料往往比較困難。例如在詐欺偵測中,多數交易都是正常的,銀行很難蒐集到足夠的異常(詐欺)資料。
由於上述原因,異常偵測需要思考其他方法。
異常偵測問題的分類
異常偵測問題可大致分為兩類:
- 訓練資料具備標籤 (With Labels)
這類問題的訓練資料 x1 到 xn 附帶有特定類型的標籤 y^1 到 y^n。這些標籤中不包含「未知物」(unknown)的標籤。
此時,我們訓練一個分類器。我們期望這個分類器在看到訓練資料以外的東西時,有能力將其標註為未知物 (unknown)。這種方法也稱為開放集辨識 (Open Set Recognition)。
- 訓練資料不具備標籤 (Without Labels)
在這種情況下,只有一堆資料輸入,沒有額外的標籤。系統只能在這種情況下判斷新資料與訓練資料的相似性。
此類問題又分為兩種狀況:
• 資料乾淨 (Clean Data):所有訓練資料通通都是正常的資料。
• 資料被污染 (Contaminated Data):訓練資料中混雜了少量(例如 0.1% 到 1%)其實是異常的東西。例如,銀行蒐集的交易紀錄中可能混雜了銀行當時未知的詐欺行為。
異常偵測的兩種主要技術框架
框架一:利用分類器的信心分數 (Classifier Confidence)
此方法適用於有標籤的狀況(Open Set Recognition)。
核心機制: 訓練一個分類器來進行分類。除了分類結果,我們要求分類器輸出一個信心分數 c (Confidence Score)。
- 判斷標準:設定一個閾值 λ (Threshold)。
◦ 若信心分數 c>λ,判定為正常資料。
◦ 若信心分數 c<λ,判定為異常資料。
信心分數的取得: 分類器的輸出通常是一個機率分佈。
• 如果輸入是正常的資料(訓練時看過的),輸出分佈中某一類別的分數會特別高,表示機器非常有信心。
• 如果輸入是奇怪的、未曾看過的圖片(異常資料),輸出分佈的分數會特別平均(高亂度/Entropy),表示機器比較沒有信心。
計算方法: 最直覺且常用的方法是:將分佈中最高的數值作為信心分數。 另一種方法是計算分佈的亂度 (Entropy),Entropy 越大,分佈越平均,代表信心分數越低。
實作考量: 雖然這是非常簡單的方法,但在實作中往往能得到不錯的結果,因此建議作為解決異常偵測問題時的首個嘗試基準 (baseline)。
潛在問題與進階解法:
• 特徵依賴性:分類器可能過度依賴某些特徵(例如辛普森家族的人物分類器過度依賴「黃色的臉」)。異常資料可能因為帶有異常強烈的「正常特徵」(例如老虎比貓更像貓),反而讓分類器給出高信心分數。
• 進階訓練:可以在訓練神經網路時,直接教導模型同時輸出分類和信心分數。
• 合成異常資料:如果難以蒐集異常資料,可以利用生成模型(如 GAN)來生成一些「有點像但又不完全像」真實資料的合成異常資料,用於訓練分類器,明確告知模型看到這些異常數據時應給予低信心分數。
框架二:利用機率模型與可能性 (Likelihood Model)
此方法適用於無標籤的狀況。
核心機制: 在沒有分類器的情況下,我們建立一個機率模型 P(X)。這個模型告訴我們特定行為發生的機率 (或密度值)有多大。
- 判斷標準:如果一個新輸入 x 經模型算出的機率大於某個閾值 λ,則為正常;若小於 λ,則為異常。
機率模型建立 (以高斯分佈為例):
-
假設生成分佈:假設我們觀察到的訓練數據 x1 到 xn 是由某個機率密度函數 fθ(x) 生成出來的。
-
最大化可能性 (Likelihood):任務是找出該函數的參數 θ,使得觀察到整個訓練數據集的可能性 L(θ) 最大化。 L(θ)=fθ(x1)×fθ(x2)×⋯×fθ(xn)
-
選擇模型:常用的機率密度函數是多元高斯分佈 (Multivariate Gaussian Distribution)。它的形狀由平均值向量 μ 和協方差矩陣 Σ 所控制。
-
參數求解:通過最大化可能性,我們可以得到最佳參數 μ∗ 和 Σ∗。在 Gaussian Distribution 假設下,μ∗ 是所有訓練資料的平均值。
-
異常評分:將新的輸入 x 帶入 fμ∗,Σ∗(x) 計算數值。這個數值越高,代表越可能是正常資料(例如在分佈高密度區域內)。
應用範例: 在 Twitch Plays Pokémon (TPP) 的案例中,我們可以將玩家的行為(如說垃圾話的頻率、在無政府狀態下發言的比例)表示為向量 x。透過高斯分佈模型,我們可以找出常態玩家的行為模式(高 f(x) 區域),並將行為落在低 f(x) 區域的玩家(罕見行為)判定為異常玩家。
深度學習方法 (範圍外簡述): 雖然超出本課程範疇,但異常偵測也可以使用深度學習模型,如 Auto-encoder。訓練 Auto-encoder 讓它學會完美重建正常的訓練資料。若輸入異常資料,Auto-encoder 將無法良好地還原圖片,還原度越低,越可能是異常。
其他技術還包括 One-class SVM 和 Isolated Forest。
異常偵測系統的效能評估
在異常偵測任務中,傳統上用於分類問題的正確率 (Accuracy) 並不是一個好的評估方式。
這是因為異常資料與正常資料的比例分佈極度懸殊。例如,若異常資料只佔 5%,一個將所有東西都判定為正常的系統,正確率仍可高達 95% 以上,但卻是個毫無作用的系統。
因此,我們需要分析兩種主要錯誤:
-
誤判 (False Alarm/False Positive):將正常的資料判斷成異常的資料。
-
漏檢 (Missing/False Negative):將異常的資料判斷成正常的資料。
成本表 (Cost Table) 的重要性: 判斷一個異常偵測系統的好壞,取決於您認為「誤判」和「漏檢」哪一種錯誤更為嚴重。系統需要根據不同的任務情境(例如癌症檢測通常認為漏檢的成本更高)來制定一個成本表。您的閾值 λ 必須依據發展集 (Development Set) 和成本表來調整,以找到能使系統總成本最低的參數。
無須閾值的評估方法: 在文獻中,也有許多評估方法不需要決定閾值。例如:
- AUC (Area Under ROC Curve):它根據所有測試結果的分數排序,直接評估系統將最可能異常的樣本排在最前面(高分)的能力。
參考資訊
Comments
Loading comments…
Leave a Comment