【機器學習】生成模型與判別模型詳解

主要來源:[白話解析] 深入淺出最大熵模型

1.定義

生成模型(Generative Model, GM):先對聯合概率P(x,ω)P(x, ω)建模,然後再求取後驗概率模型。

判別模型(Discriminative Model, DM):從數據集D中直接估計後驗概率模型:
P(ω1x)P(ω2x),...,P(ωNx)P(ω_1 | x),P(ω_2 | x),...,P(ω_N | x)

判別模型的經典算法:邏輯迴歸,SVM,CRF
生成模型的經典算法:HMM,樸素貝葉斯

生成模型的特點:生成式模型關注結果是如何產生的。但是生成式模型需要非常充足的數據量以保證採樣到了數據本來的面目,所以速度相比會慢。

判別模型的特點:對數據量要求沒生成式的嚴格,速度也會快,小數據量下準確率也會好些。

2.通俗解釋

生成模型:在弄清楚是什麼之前,先弄清楚爲什麼。
判別模型:不太在乎爲什麼,只管是什麼。

例1:貓狗分類

判別模型的方法是:
從大量貓狗數據中學習到貓的叫聲和狗的叫聲不一樣,對新的樣本,我看看他的叫聲更像誰,就認爲他是誰。

生成模型的方法是:
從訓練集中學到了貓的特徵(比如叫聲,毛色,毛長,大小,臉型等等),然後也學到了狗的這些特徵。
最後對新樣本,提取出這些特徵後,拿去和貓的比較,得到一個概率,再去和狗的比較,得到一個概率,最後誰大就認爲是誰。

例2:如何確定一隻羊是山羊還是綿羊

判別模型的方法是:

先從歷史數據中學習到一個統一的模型,然後通過提取這隻羊的特徵來預測出這隻羊是山羊的概率,是綿羊的概率。我只要學會綿羊和山羊某個特殊差別就好。

比如山羊更擅長攀巖,按照巖壁坡度進行判別,能在45度以上山坡行走的就是山羊,以下是綿羊。

而眼前這個羊走85度山坡如履平地,所以它是山羊。

生成模型的方法:

根據山羊的特徵首先學習出一個山羊模型(軀體瘦,角三菱型,呈鐮刀狀彎曲,一般毛粗而短,毛色多爲白色,也有黑色、青色、褐色或雜色的,尾巴往上翹,膽子大,採食灌木嫩枝條)。

根據綿羊的特徵學習出一個綿羊模型(軀體豐滿,頭短,公羊有螺旋狀大角,母羊無角或只有細而小的角。毛細蜜、多爲白色。 綿羊的嘴脣薄而靈活,適於啃食很短的牧草,性情溫順,膽小,主要喫草)。

然後從這隻羊中提取各種特徵,放到山羊模型中看概率是多少,再放到綿羊模型中看概率是多少,哪個大就是哪個。

在這個問題中,第一個判別模型方法中你只記住了山羊和綿羊之間的不同之處。第二個生成模型的思路中,你實際上學習了什麼是綿羊,什麼是山羊。

例3.識別一種語言是哪種語言

例如對面一個人走過來,和你說了一句話,你需要識別出她說的到底是漢語、英語還是法語等。那麼你可以有兩種方法達到這個目的:

生成模型的方法:
學習每一種語言,你花了大量精力把漢語、英語和法語等都學會了,我指的學會是你知道什麼樣的語音對應什麼樣的語言。然後再有人過來對你說話,你就可以知道他說的是什麼語音。這就是GM。

判別模型的方法:
不去學習每一種語言,你只學習這些語言模型之間的差別,然後再分類。意思是指我學會了漢語和英語等語言的發音是有差別的,我學會這種差別就好了。這就是DM。

例4.跟蹤問題

生成模型:
一般是學習一個代表目標的模型,然後通過它去搜索圖像區域,然後最小化重構誤差。類似於生成模型描述一個目標,然後就是模式匹配了,在圖像中找到和這個模型最匹配的區域,就是目標了。

判別模型:
將跟蹤問題看成一個二分類問題,然後找到目標和背景的決策邊界。它不管目標是怎麼描述的,那隻要知道目標和背景的差別在哪,然後你給一個圖像,它看它處於邊界的那一邊,就歸爲哪一類。

3.如何選擇哪種模型

一般來說,生成式模型需要非常充足的數據量以保證採樣到了數據本來的面目。判別模型對數據量要求沒生成式的嚴格。但是也要具體情況具體分析。

比如根據貝葉斯公式,我們知道P(X,Y)=P(XY)P(Y)=P(YX)P(X)P(X,Y)=P(X|Y)P(Y)=P(Y|X)P(X), 所以生成模型也可以表示成:P(YX)=P(XY)P(Y)/P(X)P(Y|X)=P(X|Y)P(Y)/P(X)

而我們現在用P(YX)=P(XY)P(Y)/P(X)P(Y|X)=P(X|Y)P(Y)/P(X)這個公式,首先求解的是P(XY)P(X|Y),所以有些地方也說對P(XY)P(X|Y)建模爲GM(當然也要求P(Y)P(Y)P(X)P(X)),對P(YX)P(Y|X)直接建模爲DM;意思其實是一樣的,因爲GM中先對P(XY)P(X|Y)建模後,可以求出聯合分佈P(X,Y)=P(XY)P(Y)P(X,Y)=P(X|Y)P(Y),仍可以說是求聯合分佈爲GM。

例如:X=吸菸的人,Y=得肺癌的機率,對P(YX)P(Y|X)建模可能非常複雜。而對P(XY)P(X|Y)建模就比較容易,因爲對P(XY)P(X|Y)建模就好像在得肺癌的人裏面看吸菸人的情況。我們都知道吸菸的人數億計,但得肺癌的人畢竟是少數,建模從得肺癌的人出發,更加容易,比如10萬個得肺癌的,抽樣1000個就差不多了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章