李宏毅 机器学习 2016 秋:5、Classification:Probabilistic Generative Model
文章目錄
- 五、Classification:Probabilistic Generative Model
五、Classification:Probabilistic Generative Model
接下來我們要來進入新的主題,我們要來講分類這件事情,在分類這件事情呢,我們要找的是一個 function,它的 input 是一個 object x x x,它的 output 是這個 object 屬于哪一個 class,屬于 n n n 個 class 的哪一個,那這樣的 task 有很多的 application,信手拈來就一大堆,比如說,在金融上,他們可以用 classification 的 model,來決定要不要貸款給某一個人,你就找一個 function,它的 input 是某一個人的 income,他的 saving、工作啊、他的年紀啊,還有他過去 financial 的 record,他過去有沒有欠債啊,等等,那 output 就是要借錢給他,或是不借錢給他,這是 binary classification 的 problem, 也就是 accept 或是 refuse,那或者是拿來做醫療的診斷,比如說,input 就是某一個人的癥狀,還有他的年紀、性別,過去就醫的歷史啊,等等,或者是來做,手寫的是數字、文字的辨識,那 output 就是,他生的是哪一種病,自動來做醫療的診斷,比如說,你就手寫一個字給機器看,看到這張圖,這是 “金” 這樣子,output 就是這個字、這個 image,它是屬于哪一個 class,如果你是做中文的手寫辨識的話,那中文有至少 8000 個 character,那就是一個 8000 個 class 的 classification,你的 model 要從這 8000 個 class 里面,選一個 class 當作 output,或者是做人臉辨識,input 一個人臉,然后告訴他說,這個人臉是誰的,好,那我們要用的是怎么樣的 Example Application 呢?
其實這個也是寶可夢的例子啦,你可能以為說,我只有前面 predict CP 值那里,其實,我還有很多其他的例子這樣,好,我又做了一些有關寶可夢的研究,我這個研究是這樣子的,我們知道說寶可夢有不同的屬性,有幾種呢?有 18 種屬性,包括水、火、電啊,還有草、冰…等等,總共有 18 種屬性,到第六代為止,總共有 18 種屬性,我們現在要做的是一個分類的問題,這個分類的問題就是,要找一個 function,這個 function 的 input 就是某一只寶可夢,然后,它的 output 就是要告訴你說,這一只寶可夢,它是屬于哪一種 type,比如說,input 給它一只皮卡丘,它 output 就是雷,input 給它一個杰尼龜 ,它 output 就是水,input 給它一個妙蛙種子,output 就是草,所以是一個 classification 的問題,那要怎么樣做這個問題呢?
你現在的第一個問題,就是怎么把一只寶可夢當作,function 的 input,你要把一個東西當作 function 的 input,它得數值化,你要用數字來表示一只寶可夢, 你才能夠把它放到一個 function 里面,那我們要怎么把一只寶可夢用數字來表示呢?
一只寶可夢,其實它有很多的特性,這些特性是可以數值化的,比如說,它整體的強度,我先說一下,這并不是那個 Pokemon go 的那個東西,這個是那個 Pokemon 的電玩,你聽不懂我講這個就算了,就假設沒聽到這句話,那一只寶可夢,它其實可以用一組數字來描述它的特性,這組數字代表什么呢?
比如說,這個寶可夢,它 total 的 strong,就是它有多強這樣子,你可以用一組數字來表示它,它的生命值,你可以用數字來表示它,它的攻擊力,你可以用數字來表示它,它的防御力,你可以用數字來表示它,它的特殊攻擊力,就是它用特殊攻擊的時候,這我也不知道怎么解釋, 反正就是另外一個特殊攻擊的攻擊力,特殊攻擊的防御力,還有它的速度,速度可以決定說,就是兩只寶可夢相遇的時候,誰可以先攻擊,比如說,皮卡丘,它整體強的程度是 320,它 HP 是 35,攻擊力是 55,防御力是40,特殊攻擊力是 50,然后,它的特殊防御力是 50,速度是 90,所以一只皮卡丘,我們就可以用一個 vector 來描述它,這個 vector 里面總共有 7 個數值,我們現在要問的問題就是,我們能不能把 7 個數字,輸進一個 function,這個 function 就告訴我們說,它的 output 是哪一種種類的寶可夢,那你可能會問這樣的問題,這件事情的重要性,到底在哪里?
這件事情,是非常重要的,因為當兩只寶可夢相遇,在決斗的時候,他們之間是有屬性相克的關系,這個是 18 × 18 18 \times 18 18×18 的屬性相克表,因為,你知道說,總共有 18 種 type,所以是 18 × 18 18 \times 18 18×18 的屬性相克表,左邊代表這個是攻擊方,上面表示是防御方,所以,格斗系遇到一般的時候,他的攻擊力就乘 2,這樣,你看得懂這個圖了嗎?
所以,這個是很重要的,那你可能會問說,這個寶可夢屬性,不是寶可夢圖鑒上都有了嗎?綠色寶可夢屬性,有什么意義呢?這件事情是有很大的意義的,因為,你有可能在決斗中的時候,遇到,對方出的是圖鑒上沒有的,你沒有見過的寶可夢,如果你現在有這個預測的 model 的話,你就可以預測說,它出的寶可夢是哪一種屬性的,你就可以用正確的屬性來對付它,所以,這個是有非常廣泛地運用的,而且我發現說,寶可夢圖鑒,其實是有影像辨識的功能,它影像辨識的功能很強,照一張圖,它就可以告訴你說,它是哪一種寶可夢,我們應該要把這個 prediction 的 model 加到寶可夢的圖鑒里面,它就可以幫我們 predict 新的寶可夢。
那,怎么完成這個任務,首先,我們要先收集 data,比如說,你就說,我把寶可夢編號 400 以下的, 當作 training data,把編號 400 以上的,當作 testing data,你就假設說,因為它的寶可夢其實是越來越多的,我記得我小時候只有 150 只,后來發現,越來越多寶可夢,現在已經有 800 只了,所以寶可夢是不斷增加的,所以編號比較前面的,是比較早發現的那些寶可夢,所以,模擬說,我們已經發現那些寶可夢的情況下,如果看到新的寶可夢的時候,我們能不能夠預測說,它是屬于哪一種屬性的。
所以,你要收集 data,比如說我們的 data 就是一些 pair,告訴我們說 function 的 input, output 是什么,比如說,input 皮卡丘,就要 output 電,input 杰尼龜,就要 output 水,input 妙蛙種子,就要 output 草,那怎么解這個 classification 的問題?
有人會這么想,假設有人沒有學過 classification,他學過 Regression,他就說,Classification 就當作 Regression 的問題來硬解,怎么硬解呢?我們用 binary 的 classification 來當作例子,假設我們現在只要 output: input 的 x x x 屬于 class 1 或 class 2,那你就把他當作一個 Regression 的問題,task 1 就代表說它的 target,也就是 y ^ \hat y y^? 是 1,task 2 就代表說,它的 target 是 ? 1 -1 ?1,就這樣,你就當作 Regression 的 problem, 一直 train 下去,然后,train 完這個 model 以后呢,在 testing 的時候,因為 Regression 的 output 不會正好是 0 或是 1 啊,它是一個 number,它是一個數值,如果這個數值比較接近 1 的話,就說是 class 1,如果這個數值比較接近 ? 1 -1 ?1 的話,就說是 class 2,所以,你可以想成說,現在就是以 0 為分界,如果你的 Regression model output 是大于 0 的話,就比較接近 1,你的 model 就會說是 class 1,如果小于 0 的話,就比較接近 -1, 所以 model 會說是 class 2,如果你這么做的話,會遇到什么樣的問題呢?
你會遇到這樣的問題,假設說,我們現在的 model,input 和 output 的關系, y = b + w 1 x 1 + w 2 x 2 y = b + w_1x_1 + w_2x_2 y=b+w1?x1?+w2?x2?,所以,input 這兩個 feature,也就是 x 1 x_1 x1? 跟 x 2 x_2 x2?,我們現在有兩個 class,紅色是 class 1、藍色是 class 2,那如果你用 Regression 來想的話,藍色的那些 object,input 到這個 Regression 的 model,我們都希望它越接近 1 越好,紅色這些東西,input 到 Regression 的 model,我們都希望它越接近 -1 越好,這件事,可能是做得到的,如果你把這些 data,真的找出這個 b , w 1 , w 2 b, w_1, w_2 b,w1?,w2? 的話,那你會發現說呢, b + w 1 x 1 + w 2 x 2 b + w_1x_1 + w_2x_2 b+w1?x1?+w2?x2? 這個式子等于 0 的線,是綠色這條,也就是 class 1 和 class 2 的分界點,這看起來蠻好的,但是,你可能會遇到這樣的問題,假設,你今天 class 1 的分布不是這樣子,假設你 class 1 的分布是右邊這樣子,你就麻煩了,為什么?
因為,如果你用綠色的這條線,所代表的 model 的話,注意一下,這個是二維的,綠色這條線,只是代表說這個 model 的值是 0,就是這個 y y y 的值是 0,你的 Regression 的 output 是 0,左上角這邊,代表這個 Regression 的 output 是小于 0,右下角這邊,代表這個 Regression 的 output 是大于 0,那綠色這條線,會有什么問題呢?
綠色這條線的問題就是,左上角 < 0,右下角 > 0,越偏右下,它的值就越大,所以,如果今天是考慮右下角這些點的話,它用這個綠色的 model,它做 Regression 的時候,它的 output 可能會是遠大于 1 的,但是,如果你用 Regression 的話,你會希望,藍色的點都越接近 1 越好,太大也不好,它要越接近 1 越好,太小不行、太大也不行,所以變成說,這些遠大于 1 的點,它其實對 Regression 來說,是 error,是錯的,這些點是不好的,所以,你今天如果拿這樣兩群藍色的點跟紅色的點去做 Regression 的時候,你得到的線,不會是綠色這條,雖然綠色這條,你用直覺看、你用眼睛一看就會知道說,它是一個比較好的 boundary,但是,如果你用 Regression 做下去的話,不會是綠色這條,它會是紫色這條,因為,它會覺得說,我把綠色這條線,往右偏一點,這樣的好處就是,這邊這些藍色的點,它的值就沒有那么大,它的值就會壓小,就讓他們,比較接近 1。
結果,這樣子的 function 反而對 Regression 來說,是一個比較好的 function,也就是說,Regression 那個定義 function 好壞的方式,就 classification 來說,不適用,今天這個 problem,對 Regression 來說,紫色的,是一個好的 function,但是,顯然對 classification 來說, 綠色的才是一個好的 function,但是,如果你當作 Regression 的 problem 來做,套用到 Regression,一樣的作法的時候,你得到的結果會是不好的,因為 Regression 對 model 好壞的定義, 是不適合用在這個地方的,所以,如果你用 Regression 的話,你的 Regression model 它會懲罰那些,太正確、那些 output 值太大的那些點,這樣,反而你得到的結果是不好的。
那,還有另外一個問題,其實,這種硬把 Classification 當作 Regression 來做,我還看過有人會真的這么做,不果我勸你不要這么做,比如說,你今天有 Multiple class 的話,那你可能說,我把 class 1 當作 target 是 1,class 2 當作 target 是 2,class 3 當作 target 是 3,這樣子做事會有問題的,因為當你這樣子做的時候,你就假設說,class 3 和 class 2 是比較近的,它們有某種關系,class 2 和 class 1 是比較近的,它們有某種關系,但是,實際上,如果這種關系不存在的話,class 1, class 2, class 3 他們中間并沒有某種特殊的 relation,并沒有誰應該跟誰比較有關系的話,你這樣子把它當作一個 Regression 的問題來處理,你就沒有辦法得到一個好的結果,那我們這邊,應該要怎么做呢?
理想上的做法,是這個樣子,找一個 function,這個 function 里面呢,這在做 Regression 的時候,它的 output 是 real number,對不對?但是在 classification 的時候,它的 output 是 discrete,它是某一個 class,它是 discrete,那我要想辦法讓 model 做到這件事情,你當然可以有不同的想法,那一個可能的想法是,假如是二元分類的問題,是 binary classification 的話,我就說,我們要找的 function f f f 里面,內建另外一個 function g g g,希望它是自動,當然我們的 g g g 也是根據 training data 被找出來的,如果 g g g 代進 x x x, x x x 代進去的值大于 0 的話,那就說是 class 1,否則呢,就說是 class 2,那在 training 的時候,我們的 loss 應該怎么定義才好呢?
我們的 loss 應該定義成,如果我選了某一個 function f f f,它在我們的 training data 上面,predict 錯誤的次數,我們當然希望說,我們找出來的 function,它在 data 上的錯誤次數越小,代表它的 loss 越小,你就可以把這個式子寫成這樣,summation over 所有的 training example, δ ( f ( x n ) ≠ ( y ^ ) n ) \delta(f(x^n) ≠ (\hat y)^n) δ(f(xn)?=(y^?)n),就是如果 f ( x n ) f(x^n) f(xn) 的 output 跟 正確答案 ( y ^ ) n (\hat y)^n (y^?)n 不一樣的話,這個 δ \delta δ 就是 1,否則就是 0,如果你把它全部 sum 起來的話,就是你用這個 function f f f,在 training data 上面,它會分類錯誤的次數,那當然希望這個值,越小越好,但是,如果要你解這個 function,你現在八成不會,因為,我們學過的是 Gradient Descent,你可能會用 Gradient Descent 解,但是,這個沒辦法微分啊,不知道怎么做。其實,這個是有方法,比如說,Perceptron 就是一個方法,SVM 就是一個方法,那我們今天先不講這個方法,我們今天先來講另外一個 solution。這個 solution,我們先用機率的觀點來看待它,之后我們會說,這樣的 solution,也是跟 machine learning 的 3 個 step,其實是一樣的。
我們先這樣看,就是有兩個盒子,盒子一里面有藍球和綠球,盒子二里面也有藍球跟綠球,假設我不告訴你說,我從哪一個盒子里面, 挑一顆球出來,但是,我告訴你說,我從這兩個盒子的某一個盒子里面,隨機抽取一顆球出來,它是藍色的,那這顆藍色的球,它從盒子 1,跟從盒子 2 抽出來的機率,分別是多少?
假如說,你從盒子 1 里面,抽一顆球的機率是 2/3,你從盒子 2 里面,抽一顆球的機率是 1/3,再告訴我說,在盒子 1 里面,藍球占 4/5,綠球占 1/5,盒子 2 里面,藍球占 2/5,綠球占 3/5,那你就可以輕易計算說,如果我今天得到一顆藍球,他從盒子 1 里面,抽出來的機率,這個機率就是 P ( B 1 ∣ Blue ) P(B_1|\text{Blue}) P(B1?∣Blue),這樣,那這個跟分類,有什么關系呢?
如果我們把盒子換成分類的話,把盒子 1 跟盒子 2,換成類別 1 跟類別 2,這個時候呢,給我一個 x x x,就是,我們要分類的那個對象,比如說,今天我們的例子就是,分類一只寶可夢,給我一只寶可夢,他從某一個 class 里面,sample 出來的機率是多少呢?那我們需要知到哪些值?
我們需要知道 我從 class 1 里面,抽一個 x x x 出來的機率,我們要知道從 class 2 里面,抽一個 x x x 出來的機率,我們要知道說,從 class 1 里面,抽出我們現在考慮的這個 x x x 的機率,我們要知道從這個 class 2 里面,抽出我現在考慮的這個 x x x 的機率,如果有這些,當給我們一個 x x x 的時候,有了這 4 個數值,我們就可以計算這個 x x x 是屬于 C 1 C_1 C1? 的機率,怎么算呢?
x x x 屬于 C 1 C_1 C1? 的機率,就是 case 1 本身的機率,乘上 case 1 sample 一個 object 出來,是 x x x 的機率,再除掉 case 1 本身的機率,乘上 case 1 sample 一個 object 出來,是 x x x 的機率,加上 case 2 本身的機率,乘上從 case 2 里面 sample 出一個 object ,是 x x x 的機率,所以,我們現在的問題就是,如果我們知道這個機率的話,問題就解決了,因為給我一個寶可夢 x x x,我就可以看說,它從哪一個 case 來的機率最大,那機率最大那個 case,就是正確答案,那現在的問題是,我們如果要算這個值,那我們就要算這 4 個值,假設我們是考慮一個二元分類問題的話,那這 4 個值怎么來呢?
我們就希望從我們的 training data,去把這些值估測出來,那這一整套想法,叫做 Generative model,為什么它叫做 Generative model 呢?因為有這個 model 的話,你可以拿它來 generate 一個 x x x,什么意思呢?你可以計算,某一個 x x x 出現的機率,如果你可以計算每一個 x x x 出現的機率,你就知道 x x x 的 distribution,你就可以用這個 distribution 來產生 x x x、sample x x x 出來,這一個機率是什么呢?
這個機率很簡單,它就是你從 C 1 C_1 C1? 里面,挑一個 x x x 出來的機率,乘上 C 1 C_1 C1? 挑出 x x x 的機率,加上你從 case 2 里面,挑一個 x x x 的機率,乘上 case 2 產生 x x x 的機率,你有這些機率, 你就可以算某一個 x x x 出現的機率,你就可以自己產生 x x x,所以,這個東西,叫做 Generative model。
我們先來算一下 P ( C 1 ) P(C_1) P(C1?) 跟 P ( C 2 ) P(C_2) P(C2?) 它出現的機率,那這個機率呢,叫做 Prior,他們呢,是比較好算的,假設我們今天考慮的這兩個 class 呢,分別是水系跟一般系,class 1 就是指水系的神奇寶貝,class 2 就是指一般系的神奇寶貝,另外 16 只寶可夢,我們就無視它,先考慮一個二元分類的問題,那我們現在呢,把編號 ID,在圖鑒里面編號 < 400 的,水系的和一般系的,就當作是 training data,剩下的當作是 testing data,如果你想要做的更嚴謹一點的話,你可以再把 training data 里面切一份 validation data 出來,好,那 training data 里面呢,總共有 79 只是水系的,總共有 61 只一般系,你可能會問說,為什么選水系跟一般系當作二元分類問題,因為我其實統計了一下 18 種寶可夢,每個種類的數目,水系跟一般系是最多的,所以,我們就先選水系跟一般系,不過,我試了一下,如果你要把 18 種都分類正確,好像是做不太出來的,你就先考慮,分兩個 class 就好。
如果我們現在知道說,training data 里面,那從這個第一類里面,從 class 1 里面,sample 出一只寶可夢的機率是多少呢,是不是就是 79 / ( 79 + 61 ) 79 / (79+61) 79/(79+61),算出來是 0.56,那從 class 2,sample 出一只寶可夢的機率,就是 61 / ( 79 + 61 ) 61 / (79+61) 61/(79+61),就是 0.44,這個是比較容易、比較簡單可以理解的。
好,那再來我們的問題是這樣子,怎么計算說,如果給我某一個 class,某一只寶可夢,是從這個 class sample 出來的機率,比如說,如果給你一個海龜,我也不知道這個海龜應該叫什么名字,那從水系的神奇寶貝里面,挑一只神奇寶貝出來,它是海龜的機率,到底應該有多大呢?
那我們現在的 training data 是長這個樣子,屬于水系的神奇寶貝有 79 只,所以有杰尼龜、可達鴨、蚊香蝌蚪之類的,這只海龜它不在這 79 只里面,那我到底要怎么算說,從水系的神奇寶貝里面挑一只出來,是海龜的機率呢,你可能會想說,這 79 只神奇寶貝又沒海龜,所以挑一只出來,是海龜的機率根本是 0 啊,可是這海龜是水系的,我一看它的臉,我就知道它是水系的 XD,那它就是水系的,所以,你說,它從水系的里面挑出來是 0 也不對啊,所以怎么辦?
首先就是,每一只寶可夢,我們剛才講過說,它都用一個向量來描述,這個向量里面的值,就是它的各種的特征值,所以,這個 vector,我們又稱之為一個 feature,所以,每一個寶可夢,都是用一堆 feature 來描述它。
然后呢,我們就真的把那些水系的寶可夢,它們的防御力和特殊防御力畫出來,其實,每一只寶可夢有 7 個不同的數值啊,不過 7 個沒辦法畫,我就先畫防御力跟特殊防御力就好,值得強調的是,這邊的是真正的 data 這樣,如果你想要下載完整的寶可夢的 data 的話,下載鏈接在這里,你是可以載到完整的 data,那我們就把 79 只寶可夢,它的防御力跟特殊防御力,都先畫在這張圖上,所以在這二維的平面上,每一個點,就代表了一只寶可夢,比如說,這個點是可達鴨,它的防御力是 48,特殊防御力是 50,這個點是杰尼龜,它的防御力是 65,特殊防御力是 64,可是,現在的問就是,如果給我們一個新的點,這個點是代表一只沒有在我們的 training data 里面的寶可夢,是我們沒有看過的寶可夢,比如這只海龜,它的防御力是 103,特殊防御力是 45,它的位置大概在這個地方,從水系里面,挑到這只神奇寶貝,它是海龜的機率到底應該是多少,那你不可以說它是 0 ,你不能說,這個 training data 里面從來沒有出現這只海龜,所以它的機率就是 0,這樣顯然是不對的,你要想個辦法估測說,從這些我們已經有的神奇寶貝里面,估測說,如果從水系的神奇寶貝里面,挑一只出來,它是這個海龜的機率到底有多少?好,那怎么辦呢?,你可以想像說,這 79 只神奇寶貝,其實只是冰山的一角,就是水系的神奇寶貝,是從一個機率的分布里面,水系神奇寶貝它的防御力跟特殊防御力,是從一個 Gaussian 的 distribution 里面,sample 出來的,我們只是 sample 了 79 個點以后,得到的分布長這個樣子,但是,從 Gaussian 的 distribution 里面,sample 出這個點的機率不是 0,我們假設說,這 79 個點是從一個 Gaussian 的 distribution 里面 sample 出來的,再來,我們要做的事情就是,如果給我這 79 個點,我們怎么找到那個 Gaussian 的 distribution,那我這邊還做了幾頁投影片要說 Gaussian distribution。
假設你不知道 Gaussian distribution 是什么的話,你就想成它是一個 function,這個 function 的 input 就是一個 vector x x x,在這邊呢,代表某一只寶可夢的數值,它的 output 就是這一只寶可夢,這一個 x x x 從這一個 distribution 里面, 被 sample 出來的機率,其實嚴格說起來,這個東西并不是機率,它是 probability 的 density,它跟機率是成正比的,但它并不 exactly 就是機率,但是這邊,為了讓大家不要太混亂, 我們就假設它是機率,好,那這個機率的分布呢,它是由兩個東西決定,一個東西,叫做 mean,這邊寫成 μ μ μ,另外一個東西,叫做 variance,寫做 Σ Σ Σ,它是一個 matrix,mean 是一個 vector, Σ Σ Σ 是一個 matrix,所以你把 μ μ μ 跟 Σ Σ Σ 代入這個看起來有點復雜的 function,那它就會有不同的形狀,同樣的 x x x,如果有不同的 μ μ μ 跟 Σ Σ Σ,那你代進同樣的 x x x,它 output 的機率分布就會是不一樣的。下面呢,就舉幾個例子,比如說,同樣的 Σ Σ Σ、不同的 μ μ μ,代表說他們機率分布最高點的地方,是不一樣的。
比如說,同樣的 μ μ μ、不同的 Σ Σ Σ,代表說機率分布的最高點是一樣的,但是,它們的分布,散的程度是不一樣的。
那接下來的問題就是,我們假設有一個 Gaussian 存在,從這個 Gaussian 里面 sample 出這 79 個點,那到底這個 Gaussian長什么樣子呢?如果我們可以找到這個 Gaussian 的話,假設我們可以根據這 79 個點,估測出這個 Gaussian 的 μ μ μ (mean),應該在這個位置,是 [75, 71.3],它的 Σ Σ Σ 應該是這樣的分布,那給我們一個新的點 x x x,它是我們過去從來沒有看過的點,它不在這 79 個 sampling 里面,但是,如果我們知道 μ μ μ 跟 Σ \Sigma Σ 的話,我們就可以把 Gaussian distribution 的 function 寫出來,這個 function 是 depend on μ μ μ 跟 Σ \Sigma Σ 的,所以,我們把它寫成 f μ , Σ ( x ) f_{\mu, \Sigma}(x) fμ,Σ?(x),你把這個 x x x 代進去,經過一串復雜的運算以后,那你就可以算出呢,某一個 x x x 從這個 Gaussian 里面,從這個 mean 是 μ μ μ、它的 covariance matrix 是 Σ Σ Σ 的 Gaussian 里面,被 sample 出來的機率,那如果你對這個 function 沒什么概念的話呢,你就可以想像說,如果 x x x 越接近中心點,越接近 μ μ μ 這個地方,它 sample 出來的機率當然是比較大的,像這個 x x x 在這么遠的地方, 它 sample 出來的機率就是比較小的,那再來有一個問題就是,怎么找這個 μ μ μ 跟怎么找這個 Σ Σ Σ ?
這邊用的這個概念呢,叫做 Maximum Likelihood,你可以想像說,這 79 個點,其實可以從任何一個 Gaussian 里面被 sample 出來,對不對?任何一個 Gaussian 都有可能 sample 出這 79 個點,因為你從 Gaussian 里面 sample 出一個 point,它可以是整個空間上的任何一個點,只是有些地方機率很低,有些地方機率很高,但沒有一個地方的機率是 exactly 等于 0 的,所以,雖然說,右上角這個 Gaussian 它 sample 出左下角這個點的機率很低,但是,并不代表說,這個機率是 0。
雖然說每一個 Gaussian 都有可能 sample 出這 79 個點,但是,他們 sample 出這 79 個點的可能性是不一樣的,他們 sample 出這 79 個點的 Likelihood 是不一樣的,顯然說,如果你的 Gaussian 是左下角這個的話,他 sample 出這 79 個點的 Likelihood 就比較高,如果你的 Gaussian 是右上角這個的話,他 sample 出這 79 個點的機率是比較低的,所以說,今天給我們某一個 Gaussian 的 μ μ μ 跟 Σ Σ Σ,我們就可以算這個 Gaussian 的 likelihood,也就是說,給我一個 Gaussian 的 μ μ μ 跟 Σ Σ Σ,我們就可以算這個 Gaussian sample 出這 79 個點的機率,那這個 likelihood、這個可能性呢,我們可以把它寫成這樣一個式子,這個可能性我們也用了 L L L,因為我想不到更好的 notation,可能會跟 loss function 有點混淆,但是,Likelihood 用別的 notation 又很怪,還是用 L L L,那這個 L L L,它的 input 就是,Gaussian 的 mean( μ μ μ) 跟 covariance ( Σ Σ Σ), L L L 做的事就是把這個 μ μ μ 跟 Σ Σ Σ, 代到這個 likelihood 的 function 里面,那它會告訴我們說,這個 μ μ μ 跟 Σ Σ Σ,它 sample 出這 79 個點的機率,到底有多大?那這個東西怎么算?
這個點,這個東西就是這樣算,因為所有的 79 個點是獨立被 sample 出來的,所以,今天這個 Gaussian,它 sample 出這 79 個點的機率,就是,這個 Gaussian sample 出第 1 個點的機率,乘上 sample 出第 2 個點的機率,乘上 sample 出第 3 個點的機率,一直到 sample 出第 79 個點的機率。
我們接下來要做的事情,就是,找到那一個 Gaussian,它 sample 出這 79 個點的機率,是最大的,它 sample 出這 79 個點的 Likelihood 是最大的,那這個 Gaussian,我們寫作 ( μ ? , Σ ? ) (μ^*, Σ^*) (μ?,Σ?),所以,我們現在要做的事情是這樣,Likelihood 的 function 寫做這樣子,那這每一個 f f f,如果你想知道的話,它很復雜,是寫成這個樣子,你就把這個 x x x 代進去,然后呢,我們要窮舉所有的 μ μ μ,窮舉所有的 Σ Σ Σ,看哪一個可以讓上面的 likelihood 的式子最大,它就是我們要找的 μ ? μ^* μ? 跟 Σ ? Σ^* Σ?,它就是我們認為最有可能產生這 79 個點的 μ ? μ^* μ? 跟 Σ ? Σ^* Σ?,我們就當作這 79 個點,是從這個 μ ? , Σ ? μ^*, Σ^* μ?,Σ? sample 出來的,這個東西,怎么做呢?
你就用微分解一下,找那個極值的地方這樣,你也可以背個公式解,怎么秒解,就是,哪一個 μ ? μ^* μ? 可以讓這個最大呢?這個結果是很直覺的,就是平均值可以讓它最大,所以,你就把 79 個 x x x 平均起來,你就把 79 個 x x x 當作是 vector 加起來,除 79,就得到 μ ? μ* μ?,如果你不爽的話,你就把這個式子取個微分啊,對 μ μ μ 取個微分,然后找它微分是 0 的點,解出來就是你的 μ ? μ* μ?。那 Σ ? Σ* Σ? 是什么呢?你先把 μ ? μ* μ? 算出來,然后對所有的 x n x^n xn,你都算 ( x n ? μ ? ) (x^n - μ^*) (xn?μ?),乘 ( x n ? μ ? ) T (x^n - μ^*)^T (xn?μ?)T (的 transpose),那如果你不爽的話,就把這些值對 Σ ? Σ^* Σ? 做微分,然后解它微分是 0 的點,你就解出來這個。
有了這些以后,我們就真的去算一下,這個是真正的結果,算出來的 μ μ μ 是這樣子,算出來的 Σ Σ Σ 是這樣子,也就是說呢,假設這 79 只水系的神奇寶貝,是從這個 Gaussian sample 出來的話,那最有可能 sample 出這 79 個點的 Gaussian,它的 mean 是 μ 1 μ^1 μ1,它的 covariance 是 Σ 1 Σ^1 Σ1,那如果你看 class 2 的話,class 2 是一般系的神奇寶貝,有幾只呢?有 61 只,那我們一樣算它的 mean 跟 variance,這 61 只一般系的神奇寶貝,最有可能 sample 出它的 Gaussian,它的 mean 是長這樣,它的 variance 是長這樣,有了這些以后,就結束了,我們就可以做分類的問題了,怎么做呢?
我們說要做分類的問題,我們只要算出 P ( C 1 ∣ x ) P(C_1|x) P(C1?∣x),給我一個 x x x,它是從 C 1 C_1 C1? 來的機率,那這整項可以寫成這樣子,只要我們最后算出來這一項,大于 0.5 的話,那 x x x 就屬于 class 1,那 P ( C 1 ) P(C_1) P(C1?) 很容易算,就是這么回事,那 P ( C 2 ) P(C_2) P(C2?) 我們算過,就是這么回事, P ( x ∣ C 1 ) P(x|C_1) P(x∣C1?) 怎么算呢?我們已經假設說這個東西,它就是一個 Gaussian distribution,這個 Gaussian distribution 的 mean 跟 variance,分別就是 μ 1 μ^1 μ1 跟 Σ 1 Σ^1 Σ1,這我們剛才已經算出來過了,因為我們剛才已經根據,class 1 所有的那 79 只寶可夢的分布,知道說,他們是從一個,mean 是 μ 1 μ^1 μ1,covariance 是 Σ 1 Σ^1 Σ1 的 distribution 里面 sample 出來的,那 P ( x ∣ C 2 ) P(x|C_2) P(x∣C2?),那我們也知道說, 它的這個 Gaussian distribution,它是從 mean 是 μ 2 μ^2 μ2, covariance 是 Σ 2 Σ^2 Σ2 的 distribution 里面 sample 出來的,有了這些以后,問題就解決了,那結果怎么樣呢?
我是真的有做的,這個橫軸跟縱軸,分別就是防御力跟特殊防御力,藍色的點,是水系的神奇寶貝的分布,紅色的點,是一般系的神奇寶貝的分布,看到這個結果,我有點緊張,因為覺得分不出來,我用人眼看就知道不太 ok,那我們就真的計算一下,在這個二維平面上,每一個點,我都當作一個 x x x,進去我都可以算一個,它是 C 1 C_1 C1? 的機率,那這個機率呢,用顏色來表示,紅色就代表說,在這個區域呢,是 class 1,是水系神奇寶貝的機率是比較大的,在藍色這個地方呢,水系神奇寶貝的機率是比較小的,你看這很合理嘛,因為,水系神奇寶貝在紅色這邊的分布還是比較多,所以這個地方機率是比較大的,那現在,因為我們處理的是分類的問題,我們算這個機率,我們是要 output 說是哪一類,所以我們說,機率大于 0.5,就是類別一,也就是紅色這個區間,機率小于 0.5,就是藍色這個區間,他們就是類別二。
你會發現說,有點難搞,因為他們中間沒有一個明確的 boundary,那把它 apply 到 testing set 上,現在,testing set 就是編號大于 400 那些寶可夢,把他們整個 class 1 跟 class 2 的寶可夢畫在這個二維平面上,那 boundary 是一樣的,你會發現說,分的不太好,正確率是 47 %,那你有一點擔心,會不會是這題有可能分不出來,這也是有可能的,但是我想說我們現在只看了二維的空間,對不對,機器學習厲害的地方就是,因為我們讓機器處理這個問題,所以高維空間也可以處理,不是只處理二維的空間而已,所以我們看一下高維的空間,事實上,每一只神奇寶貝(寶可夢呢),它是分布在一個七維的空間里面,如果只用二維的空間分不出來, 可是搞不好七維分的出來啊,就是這個紅色跟藍色搞不好在高維的空間上看到,一個是這樣,一個是這樣,現在從上面往下看,就覺得疊在一起,搞不好在七維空間上,是分開的,所以,每一個寶可夢都是存在七維空間中的一個點,我們一樣可以算 class 1 跟 class 2 在七維空間中,sample 出那些點的 μ 1 μ^1 μ1 跟 μ 2 μ^2 μ2, μ 1 μ^1 μ1 跟 μ 2 μ^2 μ2 都是七維, Σ 1 Σ^1 Σ1 跟 Σ 2 Σ^2 Σ2 都是 7 × 7 7 \times 7 7×7 的 matrix,然后你就做一發,正確率就 54%,很糟,這樣就跟你 random 猜,大概也是這個樣子,然后就 so sad。那怎么辦呢?
那其實呢,當你用這樣子的 probability generated 的 model 的時候,是比較少見的,其實你不??吹?#xff0c;給每一個 Gaussian 都有自己的 mean 跟自己的 variance,class 1 有一個 μ 1 , Σ 1 μ^1, Σ^1 μ1,Σ1,class 2 有一個 μ 2 , Σ 2 μ^2, Σ^2 μ2,Σ2,比較常見的做法是,不同的 class,可以 share 同一個 covariance 的 matrix。首先,你想想看,covariance matrix,它其實是跟你 input 的 feature size,是跟它的平方成正比的,所以,covariance matrix 當你的 feature size 很大的時候,它的增長呢,其實是可以非常快的,所以在這個情況下呢,如果你把兩個不同的 Gaussian 都給它不同的 covariance matrix,那你的 model 參數可能就太多了,model 參數多,variance 就大,也就是容易 overfitting,所以,如果我們要有效減少參數的話,我們可以給這兩個 class,就是屬于水系的神奇寶貝和屬于一般系的神奇寶貝,它們的描述這兩個 class 的 feature 分布的 Gaussian,故意給他們同樣的 covariance matrix,強迫他們共用 covariance matrix,這樣子呢,你就只需要比較少的 parameter,就可以來 model 這一個模型了,這什么意思呢?
也就是說,現在我們有 79 只水系的寶可夢,我們假設它是從一個 mean 是 μ 1 μ^1 μ1,covariance 是 Σ Σ Σ 的 Gaussian 所 generate 出來的,另外 61 只是屬于一般系的寶可夢,這邊給它編號從 80 到 140,我們假設這些寶可夢他們的屬性的這個分布呢,是從另外一個 Gaussian 所 generate 出來的,另外一個 Gaussian,它的 mean 是 μ 2 μ^2 μ2,但是它的 covariance matrix,跟 generate 水屬性的寶可夢,他們用的 covariance matrix 是同一個,這兩個 class 他們 share 同一個 covariance matrix,如果這樣子的話,你怎么計算 Likelihood 呢?
如果你現在要計算,某一組 μ 1 , μ 2 μ^1, μ^2 μ1,μ2 和 Σ Σ Σ,generate 這總共兩個 case 合起來,你就像下面這樣計算,那在這個式子里面,你要怎么算 μ 1 , μ 2 μ^1, μ^2 μ1,μ2 呢?你要怎么找一個 μ 1 , μ 2 , Σ μ^1, μ^2, Σ μ1,μ2,Σ 讓這個 Likelihood 的 function 最大呢?那 μ 1 , μ 2 μ^1, μ^2 μ1,μ2 的算法,跟我們之前沒有把 class 1 跟 class 2 的 covariance,tight 在一起的時候,那個算式是一模一樣的,你就只要把 class 1 里面的 x x x 平均起來就變 μ 1 μ^1 μ1,class 2 里面的 x x x 平均起來就變 μ 2 μ^2 μ2,唯一不一樣的是 Σ Σ Σ,因為我們現在 Σ Σ Σ 要同時考慮這兩個 class,所以它當然是不一樣的,那這個 Σ Σ Σ 的式子應該長什么樣子呢?這個 Σ Σ Σ 的式子,這個結果非常的直觀,如果你想要看它的推導的話,我這邊引用的就是 Bishop 這本教科書,以后如果要引用的話,盡量引 Bishop,為什么呢?因為它在網路上,有 available 的版本。你就把原來我們根據這些 data 所算出來的 covariance matrix ( Σ 1 Σ^1 Σ1),跟根據這些 data 所算出來的 covariance matrix, Σ 2 Σ^2 Σ2,weighted by 他們 element 的數目,你這個 class 1 有 79 個,所以你就把 Σ 1 ? 79 Σ^1 * 79 Σ1?79,class 1 有 61 個,所以你就把 Σ 2 ? 61 Σ^2 * 61 Σ2?61,再取平均,你就把原來這兩個 Gaussian,各自算的 covariance matrix,加權平均,就會得到,如果你要求他們用共同的 Gaussian 的時候,所得到的 covariance matrix,那我們來看一下結果。
假設我們仍然是用兩個 feature,用 Defense 跟 SP Defense 的話,后來我發現,我這兩個 example 選的不是很好,因為如果你看 Defense 跟 SP Defense,你是沒有辦法把水系跟一般系的神奇寶貝分開,后來我研究了一下,我覺得,好像用一般攻擊力和一般防御力,合起來呢,就可以分的蠻開的這樣子。
那如果我們今天共用 covariance matrix 會發生什么事?在沒有共用之前,class 1 跟 class 2 的 boundary,是這條,是這個曲線,如果我們今天共用同一個 covariance matrix 的話,你會發現說,他們的 boundary,變成是一個直線,假設你把這兩個不同的 class,強迫他們的 covariance matrix 必須共用同一個的話,那你今天在分類的時候,你的 boundary 就會變成是一條直線,所以,像這樣子的 model,我們也稱之它為 linear 的 model,你可能會想說,Gaussian 什么的不是 linear 的啊,但是,它分兩個 class 的 boundary 是 linear 的,所以,這樣的 model,我們也稱它為 linear 的 model,如果今天兩個 class, 你用不同的 covariance matrix 的話呢,它們就不是 linear 的 model,如果,我們考慮所有的 feature 會怎么樣呢?如果我們考慮所有的 feature 的話,原來我們只得到 54% 正確率,但是,神奇的是,當我們共用 covariance matrix 的時候,我們就得到 79% 的正確率了,顯然是有分對東西,那你說,為什么會做到這樣子呢,那這就很難分析了,因為,這個是在高維空間中發生的事情,是在 7 維空間中發生的事情,我們很難知道說,這個 boundary 是怎么切的,但是,這個就是 machine learning fancy 的地方,就是,人沒有辦法知道怎么做,但是,machine 可以幫我們做出來,如果今天 feature 很少,人一看就知道怎么做,那其實可以不用用上 machine learning,對不對?
我們來回顧一下,我們講得這個機率的模型,那我們講說 machine learning 就是 3 個 step,那這個機率模型呢,它其實也是 3 個 step,首先,你有一個 model, 這個 model 就是你的 function set,這個 function set 里面的 function 都長什么樣子呢?
這個 function set 里面的 function 都長下面這個樣子,input 一個 x x x,我們有 class 1 的 required probability,class 2 的 required probability,class 1 產生 x 的 probability distribution,class 2 產生 x 的 probability distribution,這些 required probability 和 probability distribution,就是 model 的參數,你選擇不同的 probability distribution,你就得到不同的 function,那你把這些不同的 probability distribution,就像 Gaussian 你選不同的 mean 跟不同的 covariance matrix,你就得到不同的 probability distribution,你把這些不同的 probability distribution 積分起來,就是一個 model,就是一個 function set,那怎么決定是哪一個 class 呢?如果 P ( x ∣ C 1 ) P(x|C_1) P(x∣C1?) 這個 posterior probability > 0.5 的話呢,就 output class 1,反之呢,就 output class 2,這個是 function 的樣子,接下來呢,我們要找,evaluate function set 里面每一個 function 的好壞,那怎么 evaluate 呢?
在這個機率模型里面,假設我們今天使用 Gaussian 的話,那我們要 evaluate 的對象, 其實就是 Gaussian 里面的參數,也就是 mean 跟 covariance matrix,那今天呢,我們就是說,如果一個 mean 跟一個 covariance matrix,你用這些參數來定義你的 probability distribution,而它可以產生我們的 training data 的 likelihood,就是這組參數的好壞,所以,我們要做的事情就是,找一個 probability distribution,它可以最大化產生這些 data 的 likelihood,這個是定義 function 的好壞,定義一組參數的好壞,最后,怎么找出一組最好的參數呢?你就看看前面的投影片,它的結果是很 trivial 的。
那有人就會問說,為什么要用 Gaussian,為什么不選別的這樣子?簡單的答案就是,如果我選了別的機率模型,你也會問我同樣的問題,其實你永遠可以選一個你自己喜歡的,這個 probability distribution,這個是你自己決定的,這個不是人工智慧,是你人的智慧,去決定說你要選哪一個人的模型,是比較適合的,那你選擇比較簡單的機率模型,參數比較少的,那你的 bias 就大、variance 就小,那你選擇復雜的,你 bias 就小、variance 就大,那你可能就要用 data set 決定一下,你要用怎么樣的機率模型,是比較好的。
那我們有另外一種常見的假設是這樣,假設我們的這個 x x x,我們知道 x x x 是由一組 feature 來描述它的,那剛才在寶可夢的例子里面, x x x 可以有 7 個數值,那我們假設,每一個 dimension,它從機率模型,產生出來的機率是 independent 的,所以,這個 x x x 產生的機率,可以拆解成, x 1 x_1 x1? 產生的機率,乘上 x 2 x_2 x2? 產生的機率,乘上 x k x_k xk? 產生的機率,一直到乘上 x k x_k xk? 產生的機率,如果我們假設,這些機率分布是 independent 的話,每一個 dimension 分布是 independent 的話,我們可以做這樣子的假設,那今天你可以說,每一個機率,就是 x 1 x_1 x1? 產生的機率、 x 2 x_2 x2? 產生的機率, x k x_k xk? 產生的機率,他們分別都是一維的 Gaussian。如果你這樣假設的話,等于是說,我們之前討論的都是 multi-variable 的 Gaussian 嘛,都是多維度的 Gaussian,如果你假設說,每一個 dimension 分開的 model,他們都是一維的 Gaussian 的話,意思就是說,原來那個高維度的 Gaussian,它的 covariance matrix 變成是 diagonal,在不是對角線的地方,值都是 0,只有對角線的地方,有值,這樣你就可以更減少你的參數量,你就可以得到一個更簡單的模型,那如果試一下這個,試一下這個結果是壞的,所以看來這個模型太簡單了,model 不同的 feature 間的 covariance,我看也是必要的,我覺得,比如說,像是戰斗跟防御力是有正相關的,他們這個 model 之間的 covariance,看來還是必要的,那你也不一定要用 Gaussian,有很多時候你憑直覺就知道應該用 Gaussian,比如說,今天假設你有某個 feature,它是 binary 的,有某個 feature,它代表的是:是或不是,或是它的 output 就是 0 跟 1 這樣,比如說,有一只寶可夢,它是神獸還是不是神獸之類的,這個就是 binary 的 feature,如果是 binary 的 feature 的話,你說它是用 Gaussian distribution 產生的,就太自欺欺人了,所以,它應該不太可能是用 Gaussian 所產生的,這個時候,你就會假設別的 distribution,比如說,假設你的 feature 是 binary 的,它 output,要么是 0,要么是 1,這個時候,你可能就會選擇說, 它是一個 Bernoulli distribution,而不是一個 Gaussian distribution,如果我們今天假設所有的 feature,它都是 independent 產生的,我們不 model feature 和 feature 間 covariance 的關系,那我們用這種方法做分類的話,我們叫做用 Naive Bayes Classifier,它前面有一個 Naive,因為它真的很 naive,它真的很簡單,這樣,那你可能會常聽到,有人說 Naive Bayes Classifier 很強,其實它強不強是 depend on 你的假設是不是精準的,如果你今天假設不同的 dimension 之間是 independent,這件事情是很切合實際的,那 Naive Bayes Classifier 確實可以給你提供很好的 performance,那如果這個假設是很不成立的話,那 Naive Bayes Classifier 它的 bias 就太大了,它就不是一個好的 Classifier。
接下來呢,我們要做的分析是,我們要分析這項 Posterior Probability,我們在做一些整理以后,我們會發現一些有趣的現象,化簡過程如上。那我們假設,這一項啊,這一項取 natural log 以后,它等于 z z z,那我們就可以把這個 Posterior Probability,把這個 z z z 放進去,乘負號,就是上下顛倒,再取 exponential,把 exponential 跟 natural log 抵銷,你就得到這一項,然后你就得到 Posterior Probability,這個 function,它的 input 是 z z z,這個 function,叫做 sigmoid function,如果你把它 output 對 z z z 的關系作圖的話,你就會發現是這個樣子,也就是 z z z 趨近無窮大的時候,它的 output 就趨近于 1, z z z 趨近負無窮大的時候,它的 output 就趨近于 0。
接下來,我們要做的事情是,我們要把這個 z z z 算一下,它到底應該長什么樣子?我們把相乘的部分,取 ln,所以就變成相加,那 P ( C 1 ) / P ( C 2 ) P(C_1) / P(C_2) P(C1?)/P(C2?) 是什么呢?我們都知道說,這邊 N 1 N_1 N1? 代表 Class 1,它在 training data 里面出現的數目, N 2 N_2 N2? 代表 Class 2,它在 training data 里面出現的次數,所以, P ( C 1 ) P(C_1) P(C1?) 就是 N 1 / ( N 1 + N 2 ) N_1 / (N_1 + N_2) N1?/(N1?+N2?), P ( C 2 ) P(C_2) P(C2?) 就是 N 2 / ( N 1 + N 2 ) N_2 / (N_1 + N_2) N2?/(N1?+N2?),分母的地方消掉,所以得到 N 1 / N 2 N_1/N_2 N1?/N2?,那 P ( x ∣ C 1 ) P(x|C_1) P(x∣C1?) 是什么呢?我們說它是一個 probability distribution,這個 Gaussian 的 distribution, P ( x ∣ C 2 ) P(x|C_2) P(x∣C2?) 是另一個 Gaussian 的 distribution,如果我們把它相除,再取 ln,會得到什么式子呢?
就得到這樣子,那這一項跟 distribution 是沒關系的,就把它消掉,然后,這一項把它提出來,相乘變相加,然后這個 exp 的部分呢,相除等于 exp 里面的相減,這個,也沒什么特別的,得到這樣,那接下來呢?
接下來你就,做一些運算,把它展開,你可能想要知道說 ( x ? μ 1 ) T ( Σ 1 ) ? 1 ( x ? μ 1 ) (x - μ^1)^T (Σ^1)^{-1} (x - μ^1) (x?μ1)T(Σ1)?1(x?μ1),它應該長什么樣子,把它展開,如圖所示。
但是,我們剛才有說過呢,一般我們會假設,covariance matrix 是共用的,所以, Σ 1 = Σ 2 = Σ Σ^1 = Σ^2 = Σ Σ1=Σ2=Σ,在這個情況下,我們就可以簡化上面這個式子,我們就可以簡化成上式。然后,你會發現說,只有其中兩項,是跟 x x x 有關的,另外三項,是跟 x x x 無關的,所以,先把這兩項集合起來,把它的 x x x 提出來, 就變成 ( μ 1 ? μ 2 ) T Σ ? 1 x (μ^1 - μ^2)^T Σ^{-1} x (μ1?μ2)TΣ?1x,剩下這三項,就把它原封不動地擺在后面。
接下來呢,我們假設說,這個東西, ( μ 1 ? μ 2 ) T Σ ? 1 (μ^1 - μ^2)^T Σ^{-1} (μ1?μ2)TΣ?1,它合起來就是一個 vector,假設你把 μ 1 μ^1 μ1 算出來,把 μ 2 μ^2 μ2 算出來,把 Σ Σ Σ 算出來,那你再代到這個式子里面,把 Σ Σ Σ 做 inverse,把 ( μ 1 ? μ 2 ) (μ^1 - μ^2) (μ1?μ2) 做 transpose,那你就得到一個 vector,把那個 vector 叫做 W T W^T WT,后面這項,你可覺得看起來很可怕,但它其實很簡單,因為,我們從這邊開始看,這是一個 vector,這是一個 matrix,這是一個 vector,把他們三個乘起來以后,你得到的其實就是一個 scalar,那它其實不是什么復雜的東西,它是一個數字,你把這一項乘這一項乘這一項,你把 vector 的 transpose 乘上 matrix 的 inverse,再乘上一個 vector,它也是一個 scalar,那這個 l n ( N 1 / N 2 ) ln (N_1/N_2) ln(N1?/N2?),它也是一個 scalar,所以你只是把這 3 個數字加起來而已,它就是個數字,所以我們就拿 b b b 來代表這個看起來很復雜的數字,假設你知道 μ 1 , μ 2 , Σ μ^1, μ^2,Σ μ1,μ2,Σ,那這一項其實就是個 vector,這一項其實就是個 scalar,它就是一個數字而已,所以呢,我們知道說,我們可以把 posterior probability,這項機率呢,寫成 σ ( z ) σ(z) σ(z), z z z 呢,又可以寫成這樣子,所以,我們其實可以把這個 posterior probability,就簡單寫成 σ ( w ? x + b ) σ(w * x + b) σ(w?x+b), w w w 跟 x x x 的 inner product,再加上一個常數 b b b,我們可以把 z z z 寫成 w w w 跟 x x x 的 inner product,再加上一個常數 b b b,其實這個 posterior probability,它根本就沒有這么復雜,它寫起來呢,就是這個樣子,所以,從這個式子,你就可以看出來說,為什么我們今天把 Σ 1 Σ^1 Σ1 跟 Σ 2 Σ^2 Σ2 共用的時候,假設 Σ 1 Σ^1 Σ1 必須等于 Σ 2 Σ^2 Σ2 的時候,你的 class 1 跟 class 2 的 boundary 會是 linear,你從這個式子呢,就可以很明顯地看出這件事,那再 generative model 里面,我們做的事情是,我們用某些方法,去找出上面這個式子里面的, N 1 , N 2 , μ 1 , μ 2 , Σ N_1, N_2, μ_1, μ_2, Σ N1?,N2?,μ1?,μ2?,Σ,找出這些以后,你就算出 w w w,你就算出 b b b,你把它代進這個式子,你就可以算機率,但是,如果你看到這個式子的話,你可能就可以有一個直覺的想法,為什么要這么麻煩呢?假設我們最終的目標,都是要找一個 vector w w w,都是要找一個 constant b b b,我們何必先去搞個機率,算出一些 μ , Σ μ, Σ μ,Σ 什么的,然后再把它搞起來,再得到 w w w 跟 b b b,這不是舍近求遠嗎?做一件你根本就不需要做的事,最后你只需要 w w w 跟 b b b 嘛,所以,我們能不能夠直接把 w w w 跟 b b b 找出來,這個呢,就是我們下一份投影片要講的東西。
總結
以上是生活随笔為你收集整理的李宏毅 机器学习 2016 秋:5、Classification:Probabilistic Generative Model的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软考-高项-论文-信息系统项目的质量管理
- 下一篇: 读书笔记《Effective C++》条