文章目錄
簡介
本節是新加的內容,根據老師的描述Anomaly Detection就是要機器知道它不知道這件事情。
公式輸入請參考:在線Latex公式
Problem Formulation
Given a set of training data:
• We want to find a function detecting input 𝑥 is similar to training data or not.
這個事情如果從機器學習的角度來看,實際上是要機器去找一個function(藍色框框)
Different approaches use different ways to determine the similarity.
Anomaly Detection不一定是找不好的東西,例如novelty是找出新穎的對象。
下面來看什麼叫做異常?取決於數據,例如:
應用
• Fraud Detection
Training data: 正常刷卡行為, 𝑥: 盜刷?
Ref: https://www.kaggle.com/ntnu-testimon/paysim1/home
Ref: https://www.kaggle.com/mlg-ulb/creditcardfraud/home
• Network Intrusion Detection
Training data: 正常連線, 𝑥: 攻擊行為?
Ref: http://kdd.ics.uci.edu/databases/kddcup99/kddcup99.html
• Cancer Detection
Training data: 正常細胞, 𝑥: 癌細胞
Ref: https://www.kaggle.com/uciml/breast-cancer-wisconsin-data/home
如何做Anomaly Detection
思路1看做二分類的方法來弄。
二分類
Given normal data
Given anomaly
Then training a binary classifier ……就這樣結束?
不可以這樣玩,例如:
正常的數據是寶可夢:
那麼異常的數據是除了寶可夢之外的一切事物:
神奇寶貝、涼宮春日、茶壺。。。。這些東西cannot be considered as a class.
原因:
1、無法窮舉非寶可夢的對象,無法把異常視爲一個類別。
2、很難收集到anomaly 的數據。Even worse, in some cases, it is difficult to find anomaly example ……
看來二分類不行,那麼Anomaly Detection有幾種?
Categories
第一種:稱爲:Open-set Recognition,每一個訓練數據都有對應的標籤,那麼我們可以訓練一個Classifier(可以用NN,也可以用線性分類器),這個Classifier訓練好後,如果看到訓練數據中不存在的數據,那麼可以爲其打上【unknown】的標籤。
第二種:只有訓練數據,沒有標籤。這裏又分兩種情況:
- All the training data is normal.所有數據都是正常數據。
- A little bit of training data is anomaly. 有一些數據是異常數據。
下面分別對各個類別進行講解。
Case 1: With Classifier
Example Application
判斷卡通人物是否來自辛普森家庭
現在有數據及標籤:
然後要訓練分類器:
Source of model: https://www.kaggle.com/alexattia/the-simpsons-characters-dataset/
有人做了這個分類器,準確率還不錯:96%:
修改這個分類器,使其在輸入人物是屬於辛普森家庭中的哪一個,還要輸出對分類結果的信心分數。
然後根據信心分數來進行異常檢測:
估計信心分數
由於Classifier的輸出實際上是一個分佈(softmax),所以會有:
如果丟一張怪怪的圖片:
也就是說softmax輸出的最大值就是信心分數(上圖中的紅框)。
或者算分類機率的熵,熵越大說明越混亂,越無法確定分類。
其實用哪種方法沒有很大差別,這裏用第一種,方便:
由以上結果看到如果輸入是辛普森家族中的人物,信心分數會比較高,反之比較低。
但是也有例外:
老師說,但凡是出現機器識別錯誤的情況,一般都會把非辛普森家族人物識別爲柯阿三
因爲它是辛普森家族中唯一一個不是黃臉的人物,所以一旦出現非辛普森家族人物,機器認錯的話就會認爲是柯阿三。
上面的涼宮春日的頭髮是棕色,和柯阿三的臉顏色差不多,所以會出錯。
在網上發佈的辛普森數據集中,把所有數據丟到當前Classifier中得到的信心分數結果如下圖:
Confidence score distribution for characters from Simpsons :
可以看到結果是非常集中的,當然也有錯誤的地方(紅色)
Confidence score distribution for anime characters:
上面的丟隨意的動漫人物進去得到的結果,丟了1萬5千張,只有1400張左右是識別爲辛普森家族人物。多數輸入的信心分數比較低。
上面用分類器求信心分數的方法簡單實用,是實作的首選,當然還有更復雜的方法:
Outlook: Network for Confidence Estimation
文獻:Terrance DeVries, Graham W. Taylor, Learning Confidence for Out-of-Distribution Detection in Neural Networks, arXiv, 2018
• Learning a network that can directly output confidence
在訓練NN的時候就直接訓練NN輸出信心分數。(不展開)
Example Framework
小結一下辛普森家庭人物異常檢測模型的框架:
Training Set: Images of characters from Simpsons.Each image is labelled by its characters .
Train a classifier, and we can obtain confidence score from the classifier.
Dev Set: Images
Label each image is from Simpsons or not. (圖片x是要帶標籤的:是否來自辛普森家族)
We can compute the performance of .
Using dev set to determine and other hyperparameters.
訓練的時候數據是都來自辛普森家族,調參的時候都要有。
Testing Set: Image from Simpsons or not. #
Evaluation
上面的Dev Set部分要根據performance of 來調整 ,下面來看怎麼做:
100 Simpsons,5 anomalies(紅色).
雖然最右邊那個美女的信心分數是0.998,但是模型對於大多數的辛普森家族人物識別的信心分數是大於0.998的。
所以不是說有人物識別出來的信心分數很高就說這個分類器很爛,而是我們可以設置的閾值大於0.998,來確保其他人物的分類是非辛普森家族人物。
Cost的判斷
Accuracy is not a good measurement!
A system can have high accuracy, but do nothing.
因爲異常值比較少。例如上圖中的,如果5個異常值全部識別錯誤:
5 wrong, 100 correct. Accuracy:
因此我們要分開來看,如果現在在如下圖所示的位置:
那麼我們可以根據異常值和正常值,是否被發現來做表格:
Anomaly | Normal | |
---|---|---|
Detected | 1 | 1 (False alarm)正常判斷爲錯誤 |
not | 4 (Missing)錯誤未判斷 | 99 |
把換個地方
Anomaly | Normal | |
---|---|---|
Detected | 2 | 6 (False alarm)正常判斷爲錯誤 |
not | 3 (Missing)錯誤未判斷 | 94 |
這兩個系統哪個好要取決我們對False alarm或是Missing的容忍度。
我們可以把容忍度做Cost表格A:
Cost | Anomaly | Normal |
---|---|---|
Detected | 0 | 100 |
not | 1 | 0 |
意思是異常值Missing記1分,正常值False alarm記100分,那麼系統1的cost爲104,而系統2的cost爲603。系統1比較好
如果用另外一個Cost表格B:
Cost | Anomaly | Normal |
---|---|---|
Detected | 0 | 1 |
not | 100 | 0 |
意思是異常值Missing記100分,正常值False alarm記1分,那麼系統1的cost爲401,而系統2的cost爲306。系統2比較好。
Cost表格B比較適合懲罰Missing的情況,例如癌症未檢測比無並檢測爲癌症要嚴重。
Some evaluation metrics consider the ranking. For example, Area under ROC curve
其他問題
理想的分類器是這樣子的,下面是貓狗分類器:
如果有些動物沒有貓的特徵也沒有狗的特徵:
那我們會把這些東西放在邊界上,分數會比較低。
但是有些動物有雖然不是貓狗但是有貓狗的特徵,例如老虎和狼。而且老虎比貓還要像貓,狼比狗還要像狗。
所以老虎和狼在分類器上的信心分數比貓和狗還高。
回到辛普森分類的例子,如果把二次元人物和老師的頭像改變一下,結果是:
意思就是如果分類器是按黃色來進行區分是否辛普森家族人物的時候,如果有些圖片不是辛普森人物,但是也明顯帶有黃色的特徵,就會分類出錯,如何解決這個問題?(不展開)
就是教機器兩個事情(文獻:Kimin Lee, Honglak Lee, Kibok Lee, Jinwoo Shin, Training Confidencecalibrated Classifiers for Detecting Out-of-Distribution Samples, ICLR 2018):
1、正確的對象信心分數要越高越好;(這個之前就說了)
2、異常的對象信心分數要越低越好。Learn a classifier giving low confidence score to anomaly.
但是之前說了,異常對象不好收集。有人提出用訓練一個生成模型生成一些異常對象。(文獻:Mark Kliger, Shachar Fleishman, Novelty Detection with GAN, arXiv, 2018)
Case 2: Without Labels
Twitch Plays Pokémon
一款網絡遊戲,主角是由N個人同時操控,系統會選擇其中一個指令進行操作。
·Why is the game so difficult?
答:Probably because of “Troll”(網絡小白)
· Players that are not familiar with the game
· Just for fun .…
· Malicious players…
in all, the players who don’t want to complete the game.
假設想要通關的玩家的操作是正常數據,能否使用異常檢測找到Troll?
下面看如何解決這個問題
Problem Formulation
Given a set of training data: .
We want to find a function detecting input is similar to training data or not.
這裏的輸入信息 是一個玩家
也就是每一個玩家要先表示成一個feature vector,才能進行機器學習
例如第一維可以表示爲說垃圾話的頻率;
第二維可以表示爲無政府狀態下的發言頻率。(這裏系統操作角色有兩種模式,一種是取所有輸入操作中取操作最多的動作進行操作,例如:100個玩家有90個輸入←,那麼遊戲角色就向←走,一種是隨機模式(無政府狀態),不管輸入操作的多少,都隨機選一個進行操作。有研究表明,在無政府狀態下,troll傾向於發起操作。)
現在我們有大量的輸入,但是沒有標籤y,我們可以建立一個機率模型,用來表示某一個玩家操作發生的機率,然後根據來設置閾值看玩家是否是異常。
然後把所有玩家的和的分佈可視化出來:
從圖中可以看到,大的玩家可能是正常玩家(左上角的點),反之是異常玩家。
下面要像更加精確的用數字來表達這個事情,就要用的MLE:
Assuming the data points is sampled from a probability density function
• determines the shape of
• is unknown, to be found from data
要找使得PDF最大:
我們假設分佈是高斯分佈
這個分佈看上去很複雜,但是我們只需要把它看做是輸入爲向量x,輸出是這個向量x被sample到的機率。Input: vector x, output: probability density of sampling x.
which determines the shape of the function are mean and covariance matrix
公式(1)就可以寫成:
公式(2)可以寫成:
注:當然,也可以假設參數不是高斯分佈產生的,可以是更加複雜的網絡參生的(不展開)。
可以直接根據MLE的公式算出來,直接貼結果:
最後就可以把x代入下面的判斷條件,來決定是否是異常玩家。
可視化後:
The colors represents the value of ,顏色月紅越正常,越淺越異常。
由於我們是用向量來表示x,因此我們可以考慮不止兩個維度:
: Percent of messages that are spam (說垃圾話)
: Percent of button inputs during anarchy mode (無政府狀態發言)
: Percent of button inputs that are START (按 START鍵)
: Percent of button inputs that are in the top 1 group (跟大家一樣)
: Percent of button inputs that are in the bottom 1 group (唱反調)
下面給三個實例,由於一般比較小,所以在前面加上log。
除了使用高斯分佈來找異常數據,還有:
Outlook: Auto-encoder
原理:
Using training data to learn an autoencoder.
在測試階段,如果數據是正常的:
那麼數據可以還原。
如果數據是異常的:
那麼就無法還原。
其他方法
One-class SVM (Ref: https://papers.nips.cc/paper/1723-support-vector-method-for-noveltydetection.pdf)
Isolated Forest(Ref:https://cs.nju.edu.cn/zhouzh/zhouzh.files/publication/icdm08b.pdf)