這篇文章是李宏毅老師的在線課程https://www.youtube.com/watch?v=gDp2LXGnVLQ 的筆記內容,推薦大家去看原視頻。
異常檢測,簡單的說,就是給定一個訓練集
我們希望可以找到一個函數,是的可以檢測Input x是否和訓練集相似。
我們找出來的內容是與訓練數據集不太一致的內容。
異常檢測有很多應用,比如
一個很直覺的想法是收集一堆異常數據,收集一堆正常數據,然後來做二分類?問題沒有那麼簡單。一般來說,收集異常的資料比較困難。比如就信用卡偵測,多數的資料都是正常的交易,而異常的數據非常難收集。針對這些問題,會有各種各樣的上採樣、下採樣方法,數據增量的策略。不過這篇文章先不涉及這些啦,之後再慢慢解釋。
異常檢測會有三種,一種是每一筆數據都有label,但是當遇到新數據時,如果說新數據不屬於之前的任何一類,分類器要能夠把這一類標註為"unknown",一個是所有的訓練數據都是正例。第三種是手上的資料都是正常的,但是有一部分是異常的混了進來。
最常用的異常檢測方法,就是使用分類器來做異常檢測的原理是,分類器不但需要輸出類別,還會輸出一個置信度c,然後異常檢測的時候
像下面這張圖片,這個分類器是用來判斷圖片是否是辛普森家庭的。根據最大的類別的分數,可以確定是否是異常。
那麼這就是論文Network for Confidence Estimation的內容啦,就是用分類器產出置信度
比如說我們看看下圖,雖然說貓貓和狗狗的確可以通過分類器辨別開,但是接收到一些新事物,比如說老虎,狼等具有和分類器能辨別的類別類似的對象時,可能會產生誤判。
針對這點,現在的理論說通過GAN的方式來生成一些異常的數據。
假設我們的數據是沒有標籤的,那麼異常檢測又怎麼做呢?
我們的做法是,假設我們的數據是從一個分佈 sample出來的,我們需要找到一組 參數 ,使得在這組參數下,這個分佈能夠產生出這組數據的可能性最大。也就是計算這組數據的最大似然:
我們要找到一組 ,讓上式中的 最大,也就是找到 , 使得
那麼 又長什麼樣呢?我們常用的一個是高斯分佈,也就是:
這個公式可以看成輸入一個向量x, 輸出的是該條件分佈產生x的概率。這個公式是由 這兩個參數來決定的,這兩個參數也就是上文我們說的 。也就是說,上式中的最大似然計算公式變為:
然後我們窮舉所有找到的 ,看看那一組可以使得 最大,也就是:
如果是下圖,則可以看到在密集區域的 的最大似然會比在稀疏區域找到的 會有更大的最大似然
一般來說,其實 的計算是有公式的啦。這一塊的內容涉及概率統計,有興趣的同學可以再去看看。
我們找到了這組參數後,就可以來做異常檢測了。 其實和有監督的異常檢測是類似的。
還有一些別的方法,比如說Auto-Encider等。訓練的時候,同時訓練Encoder 和Decoder,就是把輸入進行Encoder解碼成一個向量後,再通過Decoder解回來。如果是異常的圖片,還原度就會很低,如果是正常的圖片,則還原度會高。
異常檢測的case中,往往數據集非常不均衡。異常的資料要遠少於正常的資料。如果用常用的分類指標accuracy來衡量的話,那麼一個把所有的內容都判別為正例的系統(其實完全沒有起作用)也能有很高的accuracy。所以一般我們會用TPRFPR的指標來看,而真正例和假正例會根據系統的不同狀況乘上不同的權重。比如說如果做癌症檢測,那麼查全率更加重要。當然還有ROC curve這樣的指標也很常用。