back to index
Anomaly Detection (5/7)

link |
剛才講的是第一個例子,接下來我們講第二個例子。在第二個例子裏面,我們就沒有classify,我們只能夠收集到資料,但我們沒有這些資料的label。
link |
這邊我一樣是舉了一個真實的例子,Twitch Plays Pokemon。這是2014年2月開始的一個很多人都知道的活動,很多同學都知道,很多同學不知道,我就說明一下這個活動在做什麼。
link |
這個活動是這樣子的,有人在Twitch上開了一個寶可夢的遊戲,然後全世界的人都可以連上去,大家一起玩這個寶可夢的遊戲。
link |
你來看右邊,每一個人都在輸入指令,你可以輸入上下左右A、B、START等等,然後這個時候你就可以操控這個遊戲。
link |
不過這個遊戲同時會有,據說最多的紀錄好像是數萬個人、八萬個人在同時玩這個遊戲,差不多有上萬玩家在玩這個遊戲。所以你可以想想看,當大家同時想要操控同一個角色的時候,你玩起來其實是相當崩潰的。
link |
我不管怎麼講都沒有辦法表示出當時的人們有多麼的崩潰。其實有人寫了一首歌,我等一下來聽一下這一首歌,你就會知道說當時的人們有多麼的崩潰。
link |
但是在聽這首歌之前,我想要講一下前情提要。在這首歌裡面,他一直提到一個東西,就是Helix,他一直提到螺旋。
link |
為什麼他一直提到螺旋呢?是因為大家在玩的時候就一直亂按嘛,那很常被按到的一個組合就是,主角從背包裡面拿出一個螺旋化石,然後完全沒有任何作用,那螺旋化石完全沒有任何作用,就常常按到那個。
link |
所以後來人們就開始腦補說,那個主角他是一個螺旋教的教主,那個螺旋化石就是他的守護神,所以要不斷拿出那個守護神來請示守護神的意見,我們的旅途才有辦法繼續。
link |
所以你看到這首歌裡面,不斷地在歌頌那個守護神。
link |
我們來聽一下這首歌。所以人們玩的時候就覺得非常的崩潰,那人們就開始想說崩潰的原因是什麼呢?
link |
一個可能的原因就是因為有這個網路小白,網路小白英文翻譯叫做Troll,Troll的英文其實是山怪的意思,山怪其實在哈利波特裡面也有出現,小白通常長這個樣子。
link |
有一些人根本就不會玩,他心裡想的這個遊戲跟大家不一樣,他有他自己的玩法,所以反而害大家沒有辦法玩下去,或者是他覺得亂案很有趣,或者是出於不知名的惡意,他就是不想讓大家結束這個遊戲。
link |
總之就是人們相信有一些小白潛藏在人們之中,然後他們想要阻撓這個遊戲的進行。所以我們今天可以做的事情是什麼呢?
link |
我們就可以用異常偵測這個技術,我們假設說多數的玩家他都是想要破關的,多數玩家都是正常的玩家,他們就是我們的訓練資料。
link |
我們可以從多數玩家的行為去知道正常玩家的行為應該是什麼樣,然後偵測出異常的玩家,偵測出那些想要阻撓大家破關的網絡小白,那大家就可以比較順利地破關。
link |
至於偵測出來以後到底要給那些小白做什麼,那個就是一個還需要再討論的問題,因為甚至有人說小白只是人們的幻想。
link |
為什麼會這麼說呢?就有人有這樣的想法,他說也許實際上根本就沒有人在阻撓這個遊戲的進行,只是因為大家同時在玩這個遊戲的時候,本來每個人的想法就都會不一樣,本來玩起來就會非常的糖。
link |
而且甚至有人說如果沒有網絡小白的話,大家其實根本就沒有辦法玩下去。為什麼會這麼說呢?因為在這個遊戲裡面同時可能會有非常多的指令被輸入,而那個系統一次只會pick一個指令,所以多數的時候你的指令根本就沒有被選到。
link |
如果所有人的想法都是一致的,所有人都輸入同樣的指令,只有某一個人的指令被選到,那你就會覺得說玩這個有什麼好玩,反正我也沒有在操控那個角色。
link |
但是今天就是因為大家相信有網絡小白的存在,大家覺得說要所有人聯手起來,用大量的vote,用多數決,才能夠抵擋小白的攻擊,
link |
會讓你覺得說,我投了這一票,就算最後系統沒有選到我的決策,但至少我降低了小白被選到的決策,所以讓大家可以繼續玩下去。
link |
所以甚至有人說,也許從來都沒有小白出現,根本沒有人無聊到要去破壞那群人玩的那場遊戲,只是那群人幻想出來說,有人想要破壞他們的遊戲。
link |
無論如何,這個是真的可以做的,所以我們就需要一些訓練的資料。
link |
這邊所謂的訓練資料的X是什麼呢?這邊的每一個X就是一個玩家。如果我們今天要用訓練的方法來解這個問題,首先每一個玩家必須要能夠被表示成一個feature vector。
link |
我們之前有說過說,如果我們要做deep learning,或者我們要做binary classification,我們需要把我們的東西表示成一個向量,我們才能夠把它放到我們的network或者是其他的model裡面去。
link |
所以今天每一個人、每一個玩家的X都要被表示為一個向量。
link |
我把一個玩家表示成一個向量,舉例來說,我們可以說向量的第一位是他說垃圾話的頻率。垃圾話的意思就是說,在這個遊戲裡面只有某些輸入可以影響、可以操控那個遊戲,比如說上下左右A、B、Start可以操控這個遊戲,其他的都是多餘的,都是垃圾話。
link |
所以我們可以統計一個玩家,他在過去某一段時間內說垃圾話的頻率,或者是說他在這個遊戲裡面有兩個mode,一個mode是民主狀態,一個mode是無政府狀態。
link |
你可以想像說,民主狀態就是每隔二十秒,機器統計說在這二十秒內最多人輸入的指令,然後執行那個指令。
link |
無政府狀態就是機器統不斷地選他現在看到輸入的指令,隨機選一個他可以process的,然後就process下去。
link |
我們可以統計一個人在無政府狀態的時候的發言,也許有人會想像說,他越喜歡在無政府狀態下發言,也許他就越有可能是來搗亂的人。
link |
這個其實是一個熱門的研究問題,你可以在網上google一下,滿坑滿谷的人在研究這個問題。
link |
而且是有資料的,我就是從GitHub上找來的資料,這個是一個叫Albert的人提供的,他是李飛飛的學生,這應該是他在念史丹佛之前做的,這可能是在大學或碩士的時候做的。
link |
我們現在的問題是這個樣子,我們現在只有大量的X,但是我們沒有Y,剛才我們可以說我們有一個classify,根據classify confidence判斷是不是一個異常的資料,但我們現在已經沒有classify了,怎麼辦呢?
link |
在沒有classify的情況下,我們可以建立一個模型,這個模型是拿來告訴我們P of X的機率有多少,根據我們這些訓練資料,我們可以找出一個機率模型,這個機率模型告訴我們說某一種使用者這樣的行為發生的機率到底有多大。
link |
如果今天有一個使用者,有一個玩家,他的機率大於某一個threshold,那我們就說他是正常,如果他的機率小於某一個threshold,我們就說他是異常。
link |
我們現在沒有confident,我們把confident換成機率模型算出來的機率。
link |
這邊是有真實的資料的,我們現在就假設每一個玩家他可以用一個二維的向量來描述他,這兩個維度分別就是一個是說垃圾話的機率,另外一個是無政府狀態下的時候發言的機率,那位是機率,所以這個值都是0到1之間,在他所有發言過的說過的話裡面有百分之多少是說垃圾話。
link |
我們就可以把這個二維的向量,把所有收集到的玩家都畫在一個二維的平面圖上,如果我們只看說垃圾話那一維的話,他的分佈其實是這個樣子,你就發現說其實並不是完全不說垃圾話的人出現的是最多的,並不是完全不說垃圾話的玩家是最多的,其實人多或少都會說一些垃圾話,所以大概是1%到2%之間說垃圾話的玩家是最多的。
link |
左邊這邊是無政府狀態下發言的比例,就是你有多少比例的發言是在無政府狀態下進行的。很多人會想像說,也許多數人都是在民主狀態下發言,民主狀態的時候你才會特別想要發言,混亂的時候,無政府狀態的時候你就不會想發言。
link |
但是實際上,這個統計的結果跟你直覺的想像其實是不一樣的,你會發現說多數人都有大概八成左右的時間是在無政府狀態發言。為什麼呢?因為這個遊戲最後多數時間都是在無政府狀態下進行的。
link |
這個遊戲進行到某一個地方以後,官方決定加入了民主機制,因為實在是玩不下去了。民主機制就是,在二十秒內,最多人選擇的那個行為才是你控制的那個角色所採取的決策。
link |
但是,這一個聽起來好像是很棒的主意,馬上就遭到大量的反對。在那個遊戲裡面,你也要投票決定說,我們現在要無政府還是民主狀態,就是你可以輸入無政府或者輸入民主,然後如果很多人都輸入無政府狀態的話就會進入無政府狀態。
link |
多數人,基本上還有很多人是強烈支持無政府狀態與強烈反對民主狀態的,所以這個遊戲最後多數時間都是在無政府狀態進行的。
link |
所以假設一個玩家並不特別考慮他要在什麼樣的狀態下發言的話,多數人都大概有八成的時間是在無政府狀態的時候發言的。
link |
所以,你如果都專門挑在民主狀態下發言的時候,反而是特別有問題的。事實上,有人甚至覺得說,其實多數小白都是在民主狀態下發言,就是因為進入了民主狀態,所以他必須要多發言才能夠讓他的行為被選掉,才能夠洗掉別人的投票。
link |
所以小白鬧事的人反而特別喜歡在民主的時候發言。從這個圖上,你可以很明顯地看到說,就算我們還沒有講任何機率的模型,
link |
你也可以很直覺地說,假設一個玩家是落在這個地方,就是說垃圾話的機率低,他通常都在無政府狀態下發言,
link |
那這樣的玩家出現的機率顯然是高的,他顯然比較有可能是一個正常的玩家。如果今天有些玩家是落在這個地方或落在這個地方,
link |
那他算出來的機率顯然是低的,他顯然比較可能是一個不正常的玩家,他顯然比較有可能是一個奇怪的玩家。
link |
雖然我們直覺上知道這件事情,但是我們仍然希望說有一個數值化的方法來告訴我們說,如果比較這個玩家跟這個玩家,一個是說有60%的時間在說垃圾話,
link |
但都在無政府狀態的時候,但有八成時間在無政府狀態發言,跟一個有五成機率說垃圾話,只有兩成時間在無政府狀態發言的這兩個玩家,
link |
到底誰比較異常?所以我們還是希望有一個數值化的方法來給每一個玩家一個分數。