機器學習「判定模型」和「生成模型『有什麼區別?
首先區分生成/判別方法和生成/判別模型。
有監督機器學習方法可以分為生成方法和判別方法(常見的生成方法有混合高斯模型、樸素貝葉斯法和隱形馬爾科夫模型等,常見的判別方法有SVM、LR等),生成方法學習出的是生成模型,判別方法學習出的是判別模型。接著對生成模型和判別模型做更詳細一點的解釋。
這裡定義訓練數據為(C,X),C={c1,c2,....cn}是n個訓練樣本的label,X={x1,x2....xn}是n個訓練樣本的feature。定義單個測試數據為(,),為測試數據的lable,是測試樣本的feature。1)訓練完畢後,輸入測試數據,判別模型直接給出的是,即輸出(label)關於輸入(feature)的條件分布,實際上,這個分布的條件還有訓練數據---------因為實際上我們是「看過」訓練數據之後,學習到了對數據分布的後驗認識,然後根據這個認識和測試樣本的feature來做出測試樣本屬於哪個label的決策的,所以有=。
我們認為這個條件分布由參數決定的,
即------------------------------------------------------------------------------------------------------------①那麼如何由得到呢?如果我們可以求出參數關於訓練數據的的後驗分布(這其實就是學習過程),那麼就可以由===------------②來得到想要的答案(關於②如何得到,請參考其他地方的討論PRML第一章公式1.68如何推導? - 機器學習 - 知乎,第31頁公式1.68怎麼推導的啊..)。所以現在問題轉化成了求條件分布的參數關於訓練數據(C,X)的後驗分布。那麼我們來看看怎麼求這個後驗分布。條件分布關於訓練數據的似然函數
==--------------------------------------------------------------------------③
有沒有發現和有一點像?像在和C互換了位置,互為條件概率,可以考慮使用貝葉斯公式來進行轉化,即=------------------------------------------------------------------------------④所以現在問題又進行了轉化,變成了求條件分布關於訓練數據的似然函數、參數的先驗分布和C關於X的條件分布三個小問題。我們已經知道似然函數怎麼求,先驗分布也不需要求(先驗知識,就是我們在解決問題之前已經知道的知識),而==----------------------------------------------⑤至此問題已經解決,綜合上述①-⑤各式,我們終於可以求出輸出關於輸入的條件分布啦!=---------------------------------------------------⑥⑥中的兩個積分的計算是很麻煩的,在實際解決問題的過程中要想辦法省略掉。
對於②中積分公式可以使用variational inference的方法幹掉,variational inference用一句話來說就是:如果訓練樣本足夠多的話,可以使用的最大後驗分布來對進行點估計(point estimate)。即有:==----------------------------------------------------------------------⑦所以我們幹掉了第一個積分問題,把問題簡化成了求的最大後驗概率。
觀察④式可以發現分子是常數,如果我們省略掉④中的分子對結果是沒有影響的(只需要對分子進行normalize就可以得到後驗概率),那麼我們又幹掉了第二個積分公式,將問題簡化成了求的最大值。如果先驗分布在似然函數較大的區間是固定不變或變化較小的,那麼問題又可以轉化成求最大似然函數!實際上,在雜訊高斯分布的假設下,最小誤差平方和優化問題(即求使誤差平方和最小的參數)等價於求最大似然函數(即使似然函數最大的參數)。做一個總結,判別模型求解的思路是:條件分布------&>模型參數後驗概率最大-------&>(似然函數參數先驗)最大-------&>最大似然
2)現在考慮生成模型。給定輸入,生成模型可以給出輸入和輸出的聯合分布,所以生成方法的目標是求出這個聯合分布。這裡以樸素貝葉斯模型為例,我們要求的目標可以通過:
=------------------------------------------------------------------------------------------⑧這樣將求聯合分布的問題轉化成了求類別先驗概率和類別條件概率的問題,樸素貝葉斯方法做了一個較強的假設--------feature的不同維度是獨立分布的,簡化了類別條件概率的計算,如果去除假設就是貝葉斯網路,這裡不再贅述。
以樸素貝葉斯為例,生成模型的求解思路是:聯合分布-------&>求解類別先驗概率和類別條件概率最後說一說兩種模型的優缺點:
生成模型:
優點:
1)生成給出的是聯合分布,不僅能夠由聯合分布計算條件分布(反之則不行),還可以給出其他信息,比如可以使用來計算邊緣分布。如果一個輸入樣本的邊緣分布很小的話,那麼可以認為學習出的這個模型可能不太適合對這個樣本進行分類,分類效果可能會不好,這也是所謂的outlier detection。2)生成模型收斂速度比較快,即當樣本數量較多時,生成模型能更快地收斂於真實模型。3)生成模型能夠應付存在隱變數的情況,比如混合高斯模型就是含有隱變數的生成方法。缺點:
1)天下沒有免費午餐,聯合分布是能提供更多的信息,但也需要更多的樣本和更多計算,尤其是為了更準確估計類別條件分布,需要增加樣本的數目,而且類別條件概率的許多信息是我們做分類用不到,因而如果我們只需要做分類任務,就浪費了計算資源。2)另外,實踐中多數情況下判別模型效果更好。判別模型:
優點:1)與生成模型缺點對應,首先是節省計算資源,另外,需要的樣本數量也少於生成模型。
2)準確率往往較生成模型高。3)由於直接學習,而不需要求解類別條件概率,所以允許我們對輸入進行抽象(比如降維、構造等),從而能夠簡化學習問題。缺點:1)是沒有生成模型的上述優點。假設你現在有一個分類問題,x是特徵,y是類標記。用生成模型學習一個聯合概率分布P(x,y),而用判別模型學習一個條件概率分布P(y|x)。用一個簡單的例子來說明這個這個問題。假設x就是兩個(1或2),y有兩類(0或1),有如下如下樣本(1,0)、(1,0)、(1,1)、(2,1)則學習到的聯合概率分布(生成模型)如下:-------0------1------1-- 1/2---- 1/4
--2-- 0 ------1/4
而學習到的條件概率分布(判別模型)如下:-------0------1------1-- 2/3--- 1/3 --2-- 0--- 1在實際分類問題中,判別模型可以直接用來判斷特徵的類別情況,而生成模型,需要加上貝耶斯法則,然後應用到分類中。但是,生成模型的概率分布可以還有其他應用,就是說生成模型更一般更普適。不過判別模型更直接,更簡單。我是這樣理解的:
生成模型,就是生成(數據的分布)的模型;判別模型,就是判別(數據輸出量)的模型;更進一步:
從結果角度,兩種模型都能給你 輸出量(label 或 y etc.)。
但,生成模型的處理過程會告訴你關於數據的一些統計信息(p(x|y) 分布 etc.),更接近於統計學;而 判別模型則是通過一系列處理得到結果,這個結果可能是概率的或不是,這個並不改變他是不是判別的。如,決策樹的if then說不是這個就是那個(而很多屬性都是有分布的)【即分支】,明顯是一種 判別 嘛;
而樸素貝葉斯說,p( cancer , fat ) = x% etc.,模型 生成 了一個分布給你了,即使你沒意識到/沒用到,只用到 p( cancer | fat ) = y% 這個最終的判別。你再理解一下:k近鄰法、感知機、邏輯斯諦回歸模型、最大熵模型、支持向量機、提升方法是判別模型;隱馬爾可夫模型(重點的EM演算法)是生成模型。一個類似模板匹配,一個是分類回歸
簡單地說,對於監督學習,預測時,一般都是在求生成模型: 從數據中學習聯合概率分布,然後利用貝葉斯公式求:; 這類典型的模型包括:樸素貝葉斯、LDA、HMM
判別模型:直接學習, 它直觀輸入什麼特徵X,就直接預測出最可能的; 典型的模型包括:LR, SVM,CRF,Boosting,Decision tree....
其實就一句話:生成模型使用聯合概率建模,判別模型直接使用條件概率建模也就是說:生成模型得到的是聯合概率模型,判別模型得到的是條件概率模型。比如分類問題,如果有足夠的表達能力的模型和有足夠多的訓練數據,那麼理論上通過生成學習可以得到最優的分類器,但是很難,所以判別模型來解決分類問題往往更簡單與更直觀。
生成模型是模擬這個結果是如何產生的,然後算出產生各個結果的概率判別模型是發現各個結果之間的不同,不關心產生結果的過程
簡單來說,generative model是你先要知道原始數據的概率密度(或者估計參數得到),然後習慣用bayes理論去做預測;discriminative model是不需要知道原始數據概率密度,比較粗線條。具體可參考Andrew Ng的課件,其中有一個很生動形象的對比。
直接學習p(y|x)是discrimitive model, 學習p(y,x)是generative model,。顧名思義,generative model可以根據聯合概率分布可以採樣生成數據。discrimitive model 則只能判斷label
假設樣本為X,標籤為Y。判別模型是對是對條件分布 P(Y|X) 進行建模。生成模型則是對x,y的聯合分布 P(X,Y) 進行建模。可以用如下的圖直觀表示:
Algorithms that try to learn p(y|x) directly (such as logistic regression),
or algorithms that try to learn mappings directly from the space of inputs X
to the labels {0, 1}, (such as the perceptron algorithm) are called discrim-
inative learning algorithms. Here, we』ll talk about algorithms that instead
try to model p(x|y) (and p(y)). These algorithms are called generative
learning algorithms. For instance, if y indicates whether an example is a
dog (0) or an elephant (1), then p(x|y = 0) models the distribution of dogs』
features, and p(x|y = 1) models the distribution of elephants』 features.
Ng, A. "Lecture notes for machine learning." (2010).
已經很聲情並茂了....維基百科上Generative條目裡面有個經典的案例:
假設有四個samples:
生成式模型的世界是這個樣子:
而判定式模型的世界是這個樣子:
看了所有的回答,也網上搜了一些解釋,感覺明白了一些。引用樓上Bowen答友的一張圖:
其實機器學習的任務是從屬性X預測標記Y,即求概率P(Y|X);
對於判別式模型來說求得P(Y|X),對未見示例X,根據P(Y|X)可以求得標記Y,即可以直接判別出來,如上圖的左邊所示,實際是就是直接得到了判別邊界,所以傳統的、耳熟能詳的機器學習演算法如線性回歸模型、支持向量機SVM等都是判別式模型,這些模型的特點都是輸入屬性X可以直接得到Y(對於二分類任務來說,實際得到一個score,當score大於threshold時則為正類,否則為反類)~(根本原因個人認為是對於某示例X_1,對正例和反例的標記的條件概率之和等於1,即P(Y_1|X_1)+P(Y_2|X_1)=1)
而生成式模型求得P(Y,X),對於未見示例X,你要求出X與不同標記之間的聯合概率分布,然後大的獲勝,如上圖右邊所示,並沒有什麼邊界存在,對於未見示例(紅三角),求兩個聯合概率分布(有兩個類),比較一下,取那個大的。機器學習中樸素貝葉斯模型、隱馬爾可夫模型HMM等都是生成式模型,熟悉Naive Bayes的都知道,對於輸入X,需要求出好幾個聯合概率,然後較大的那個就是預測結果~(根本原因個人認為是對於某示例X_1,對正例和反例的標記的聯合概率不等於1,即P(Y_1,X_1)+P(Y_2,X_1)&<1,要遍歷所有的X和Y的聯合概率求和,即sum(P(X,Y))=1,具體可參見樓上woodyhui提到的維基百科Generative model里的例子)
博文機器學習之判別式模型和生成式模型 - nolonely - 博客園 舉了一個例子:
判別式模型舉例:要確定一個羊是山羊還是綿羊,用判別模型的方法是從歷史數據中學習到模型,然後通過提取這隻羊的特徵來預測出這隻羊是山羊的概率,是綿羊的概率。
生成式模型舉例:利用生成模型是根據山羊的特徵首先學習出一個山羊的模型,然後根據綿羊的特徵學習出一個綿羊的模型,然後從這隻羊中提取特徵,放到山羊模型中看概率是多少,在放到綿羊模型中看概率是多少,哪個大就是哪個。
細細品味上面的例子,判別式模型是根據一隻羊的特徵可以直接給出這隻羊的概率(比如logistic regression,這概率大於0.5時則為正例,否則為反例),而生成式模型是要都試一試,最大的概率的那個就是最後結果~
引自李航《統計學習方法》中第一章1.7節的內容
監督學習的任務就是學習一個模型,應用這一模型,對給定的輸入預測相應的輸出。這個模型的一般形式為決策函數:或者條件概率分布: 監督學習方法又可分為生成方法和判別方法。所學到的模型分別稱為生成模型和判別模型。 生成方法由數據學習聯合概率分布,然後求出條件概率分布作為預測模型,即生成模型:這樣的方法稱為生成方法,是因為模型表示了給定輸入X產生輸出Y的生成關係。典型的生成模型有:樸素貝葉斯法、隱馬爾科夫模型、混合高斯模型、AODE、Latent Dirichlet allocation(unsup)、Restricted Boltzmann Machine。
判別方法由數據直接學習決策函數或者條件概率分布作為預測的模型,即判別模型。判別方法關心的是對給定的輸入X,應該預測什麼樣的輸出Y。典型的判別方法包括,kNN,感知機,決策樹,邏輯回歸,最大熵模型,SVM,提升方法,條件隨機場,神經網路等。
在監督學習中,生成方法和判別方法各有優缺點,適用於不同條件下的學習問題。
生成方法的特點:生成方法可以還原聯合概率分布,而判別方法則不能;生成方法的學習收斂速度更快,即當樣本容量增加的時候,學習的模型可以更快的收斂於真實的模型;當存在隱變數時,仍可以用生成方法學習,此時判別方法就不能用。 判別方法的特點:判別方法直接學習的是條件概率或者決策函數,直接面對預測,往往學習的準確率更高;由於直接學習或者,可以對數據進行各種程度上的抽象、定義特徵並使用特徵,因此可以簡化學習問題。另外還有一篇經典的論文可以參考,講的是樸素貝葉斯法和邏輯回歸的關係,也就是生成模型和判別模型的區別:Andew Y Ng, Michael I. Jordan. On Discriminative vs. Generative classifiers: A comparison of logistic regression and naive Bayes.後驗正比於先驗乘以似然。先驗是輸入的分布,似然是參數的分布。如果我們model先驗和似然,然後乘起來得到後驗,並做決策,這種模型叫生成模型。因為我們是用乘法「生成」了後驗分布。但如果我們不管先驗和似然,直接假設後驗的分布所滿足的形式(例如邏輯回歸),這樣學習到後驗分布的方式就是「判別模型」所採用的。因為不涉及到乘法,並且生成模型要model兩個分布,而判別模型只用model一個,判別模型的學習會更加有效率。生成模型當然也有好處,比如異常點檢測之類的。不管是判別模型還是生成模型,最終都是要得到一個後驗分布。不管後驗分布,直接出結果的是判別函數,類似SVM之類的,學了一個分界面以後,來一個輸入就給一個輸出(當然,這裡可以理解為階躍做激活函數的判別模型,具體見PRML第4章)。
判定模型,就是只有一個模型,你把測試用例往裡面一丟,label就出來了,如SVM
生成模型,有多個模型(一般有多少類就有多少個),你得把測試用例分別丟到各個模型裡面,最後比較其結果,選擇最優的作為label,如樸素貝葉斯
轉自Lecturer的slides.
原文鏈接 http://blog.csdn.net/zouxy09/article/details/8195017
摘錄部分通俗解釋如下
生成方法的特點:上面說到,生成方法學習聯合概率密度分布P(X,Y),所以就可以從統計的角度表示數據的分布情況,能夠反映同類數據本身的相似度。但它不關心到底劃分各類的那個分類邊界在哪。生成方法可以還原出聯合概率分布P(Y|X),而判別方法不能。生成方法的學習收斂速度更快,即當樣本容量增加的時候,學到的模型可以更快的收斂於真實模型,當存在隱變數時,仍可以用生成方法學習。此時判別方法就不能用。判別方法的特點:判別方法直接學習的是決策函數Y=f(X)或者條件概率分布P(Y|X)。不能反映訓練數據本身的特性。但它尋找不同類別之間的最優分類面,反映的是異類數據之間的差異。直接面對預測,往往學習的準確率更高。由於直接學習P(Y|X)或P(X),可以對數據進行各種程度上的抽象、定義特徵並使用特徵,因此可以簡化學習問題。
生成演算法嘗試去找到底這個數據是怎麼生成的(產生的),然後再對一個信號進行分類。基於你的生成假設,那麼那個類別最有可能產生這個信號,這個信號就屬於那個類別。判別模型不關心數據是怎麼生成的,它只關心信號之間的差別,然後用差別來簡單對給定的一個信號進行分類。
原博主講的一個例子
假如你的任務是識別一個語音屬於哪種語言。例如對面一個人走過來,和你說了一句話,你需要識別出她說的到底是漢語、英語還是法語等。那麼你可以有兩種方法達到這個目的:
1、學習每一種語言,你花了大量精力把漢語、英語和法語等都學會了,我指的學會是你知道什麼樣的語音對應什麼樣的語言。然後再有人過來對你哄,你就可以知道他說的是什麼語音,你就可以罵他是「米國人還是小日本了」。(呵呵,切勿將政治摻雜在技術裡面)2、不去學習每一種語言,你只學習這些語言模型之間的差別,然後再分類。意思是指我學會了漢語和英語等語言的發音是有差別的,我學會這種差別就好了。 那麼第一種方法就是生成方法,第二種方法是判別方法。
生成模型是根據已知的樣本用基於統計方法來估計整個樣本空間的真實分布,判別模型就是根據已有的樣本來生成一個「微縮」模型
題主這裡說的判定模型應該是GAN 裡面提到的Generator 和discriminator 吧。
下圖是一個GAN 模型的結構。
生成模型(generator)將 噪音 作為輸入, 生成一張圖片。
然後判定模型 (discriminator)將之前生成的圖片(generator sample)和我們要學習的實際圖片(data sample) 作為輸入, 輸出 這張生成圖片是真實圖片的概率。
理論上一個優秀的判定模型能100% 正確分辨輸入圖片的來源。
而一個優秀的生成模型能100% 讓判定模型判斷錯誤。
這兩個模型互相競爭 , 這就是GAN (generative adversarial net ) 里adversarial 這個詞的來源。
如果更有興趣的話可以看看 DCGAN (deep conversational GAN ) 里Generator 和 discriminator 的詳細結構~
上圖是 Generator , 通過不斷的Deconvolution 一段噪音最後會變成一張 圖。
上圖是Discriminator, 待判斷的圖片當 input ,最終輸出一個標量, 代表概率。
更詳細的如何訓練GAN 請看 [1406.2661] Generative Adversarial Networks
推薦閱讀:
※機器學習論文的疑惑,求教?
※設計embedding維數的時候有什麼講究?
※一個演算法工程師的日常是怎樣的?
※卷積神經網路保證「位移、尺度、形變不變性」該怎麼理解?
※如何進行模型組合?
TAG:機器學習 |