李宏毅——異常檢測anomaly detection
異常檢測
問題
已知訓練數據
找到一個函數,判斷輸入x是否與訓練數據相似
(anomaly 不一定是不好的,也被稱爲novelty ,outlier,exceptions detection)
什麼是anomaly
取決於訓練的數據,與訓練數據不同的就是異常的。
應用
fraud detection
訓練數據:正常刷卡行爲
x:盜刷
network instrusion detection
訓練數據:正常連線
x:攻擊行爲
cancer detection
訓練數據:正常細胞
x:癌細胞
如何做異常檢測
binary classification?
類1:正常數據
類2:異常數據
不能解決
原因1:異常數據太多,無法窮舉
原因2:異常數據不好收集
分類
- 訓練數據有標籤,沒見過的東西輸出unkown(open-set recognition)
模型是open的,能夠對沒見過的東西進行判斷 - 訓練數據沒有標籤
- 乾淨的數據
- 數據有髒東西(anomaly)
with label
例子
辛普森一家分類器
方法
使用現成分類器
訓練一個分類器,給出每個類別的confidence。
設置一個閾值,大於該閾值是辛普森,小於該閾值是異常。
可行的方法:
confidence:給出最大的confidence
entropy:給出亂度,entropy越大說明分佈平均,不確定是哪個類別。
訓練一個可以直接輸出confidence的網絡
框架
訓練集:辛普森一家的圖片,每個圖片x有標籤y。訓練分類器。獲得confidence,根據是否超過閾值判斷是否爲anomaly
驗證集(模仿測試集):圖片中有辛普森一家的人,也有不是的。
可以通過驗證集來計算f(x)的表現,確定超參數的值(比如閾值)
測試集:輸入圖片x,判斷是不是辛普森一家。
評估
方式:在dev set上對模型評價
注意:使用正確率不是一個好的指標。因爲正負樣本的比例懸殊。
一個系統可能正確率很高,但是並沒有意義。
False alarm:正常被偵測爲異常。
mising:異常被偵測爲正常。
一個系統的好與壞,取決於False alarm比較重要,還是mising比較重要。
可以利用cost table來衡量系統的好壞。
比如癌症檢測,傾向於cost tableB。
還有一些其他的衡量策略,比如AUC。
直接用分類器可能會遇到的問題
比如一個貓狗分類器
會有比貓更像貓的,比狗更像狗的
辛普森分類器
根據臉黃不黃判斷
解決方法
學習一個異常confidence低的分類器
生成異常數據
without labels
例子
twitch plays pokemon
很多人在線玩這個遊戲,因爲有小白,有人故意的不好好玩,所以非常難玩
假設:多數玩家都是正常的,檢查出異常玩家
問題形式化
測試數據:{x1,x2,…xn}
找到一個函數,能判斷輸入x與訓練數據是否相似
說垃圾話(民主狀態,通過vote決定),無政府狀態(隨機選)
問題:
只有大量的x,沒有y
做法:
找到一個機率模型,判斷是否是異常。超過閾值爲正常,低於閾值爲異常。
假設每個發言都是二維的,用圖表示概率。
通過likelihood來決定。
常用的概率密度模型爲高斯模型
可能爲其他模型,但是還沒有涉及
高斯模型的最優解爲
然後可以用這個模型來判斷是否爲異常,圖中的等高線就是閾值
可以在更多的featrue上建模,不止是二維的圖像。
其他方法
auto-encoder
正常還原度高,異常還原度低