原文鏈接:Generative Learning Algorithm in Chinese

最新的版本在原文鏈接里可以找到。原博客會不斷更新。這篇筆記主要梳理了吳恩達教授在斯坦福的CS229課程的內容,並結合了哥倫比亞大學幾個教授相關筆記內容一併總結。


請注意: 本文是翻譯的一份學習資料,英文原版請點擊Wei的學習筆記:Generative Learning Algorithm

中文版將不斷和原作者的英文筆記同步內容,定期更新和維護。

生成學習演算法

1 判別模型

判別模型是一種對觀測數據進行直接分類的模型,常見的模型有邏輯回歸和感知機學習演算法等。此模型僅對數據進行分類,並不能具象化或者量化數據本身的分布狀態,因此也無法根據分類生成可觀測的圖像。

定義上,判別模型通過構建條件概率分布 p(ylvert;x;θ) 預測y,即在特徵x出現的情況下標記y出現的概率。此處p可以是邏輯回歸模型。

2 生成模型

與判別模型不同,生成模型首先了解數據本身分布情況,並進一步根據輸入x,給出預測分類y的概率。該模型有著研究數據分布形態的概念,可以根據歷史數據生成新的可觀測圖像。

而貝葉斯分類就是一個典型的例子。在這個例子中,我們首先有一個先驗分類。這個先驗的分布其實就是我們對數據分布的一個假設(如高斯分布,二項分布或多項分布),我們假設我們選擇的模型可以正確解釋數據集中的隱含信息。從數據集中,我們可以知道哪些參數最適合我們選擇的模型。在這個已計算出先驗概率的模型中,我們可以使用貝葉斯公式來進一步計算每個類的概率,然後挑出較大的概率供我們使用。與此同時,給定任意一個先驗概率分布,我們可以根據這個分布生成新的樣本y,進而基於所選擇的先驗生成新的特徵x(比如,基於一個患癌症的先驗概率與分布,我們可以生成新的患病者特徵x)。這就是所謂的生成過程。

3 高斯判別分析

高斯判別分析(GDA)是一個生成模型,其中 p(xlvert y) 是多元高斯正態分布。

3.1 多元高斯正態分布

在多元正態分布中,一個隨機變數是一個 R^n 空間中的矢量值,其中n代表維度數。因此,多元高斯的均值向量  μ∈ R^n ,協方差矩陣 Σ∈ R^n ,其中Σ是對稱的半正定矩陣。其概率密度函數為:

  p(x;mu,Sigma) = frac{1}{(2pi)^{n/2}lvert Sigma
vert^{1/2}}expigg(-frac{1}{2}(x - mu)^TSigma^{-1}(x - mu)igg)

如上所述,μ代表期望值。

隨機向量Z(或者說,向量化的隨機變數Z)的協方差為:

  egin{align} Cov(Z) &= E[(Z-E[Z])(Z-E[Z])^T] \ &= E[ZZ^T - 2ZE[Z]^T + E[Z]E[Z]^T]\ &= E[ZZ^T] - 2E[Z]E[Z]^T + E[Z]E[Z]^T\ &=E[ZZ^T] - E[Z]E[Z]^T end{align}

下圖顯示了幾個密度函數,它們的均值均為零,但協方差不同:

上圖的協方差為(從左到右):

  Sigma = egin{bmatrix} 1 & 0 \ 0 & 1 end{bmatrix}; Sigma = egin{bmatrix} 1 & 0.5 \ 0.5 & 1 end{bmatrix}; Sigma = egin{bmatrix} 1 & 0.8 \ 0.8 & 1 end{bmatrix}

4 高斯判別分析和邏輯回歸

4.1 高斯判別分析

我們再來談談二分類問題,我們可以用多元高斯模型對 p(xlvert y) 進行建模。 總的來講,我們有:

  y sim Bernoulli(phi)  \    xlvert y=0 sim mathcal{N}(mu_0,Sigma)  \    xlvert y=1 sim mathcal{N}(mu_1,Sigma)

在這裡面,我們想要找出的參數φ, μ_0,μ_1 ,和Σ。 請注意,雖然每個類的均值不同,但它們的協方差相同。

這裡有人會問,那為什麼它是一個生成模型呢?簡而言之,我們首先有一個類,也有這個類的y的先驗概率分布,並且知道這個類的分布類型是伯努利分布。那麼生成過程就是(1)從伯努利分布的類中抽樣。 (2)基於類標籤,我們從相應的分布中抽取x。這便是一個生成過程。

所以,該數據的對數似然函數值為:

  egin{align} ell(phi,mu_0,mu_1,Sigma) &= log prod_{i=1}^m p(x^{(i)}, y^{(i)};phi,mu_0,mu_1,Sigma) \ &= log prod_{i=1}^m p(x^{(i)}lvert y^{(i)};mu_0,mu_1,Sigma) p(y^{(i)};phi)\ &= sumlimits_{i=1}^m log p(x^{(i)}lvert y^{(i)};mu_0,mu_1,Sigma) p(y^{(i)};phi) end{align}

在上面的等式中,我們插入每個分布,但不指明具體這個分布是哪個類,我們僅將它們抽象為k。我們可以得到:

  egin{align} ell(phi,mu_k,Sigma) &= sumlimits_{i=1}^m log p(x^{(i)}lvert y^{(i)};mu_k,Sigma) p(y^{(i)};phi)\ &= sumlimits_{i=1}^m igg[-frac{n}{2}log 2pi-frac{1}{2}loglvertSigma
vert \ &-frac{1}{2}(x^i-mu_k)^TSigma^{-1}(x^i-mu_k)\ & + y^ilogphi+(1-y^i)log(1-phi)igg]\ end{align}

現在,我們需要對每個參數進行取導,然後將它們設為零並找到 argmax(函數值最大時對應的輸入值x)。 一些可能對推導有用的公式列舉如下:

  frac{partial x^TAx}{partial x} = 2x^TA iff A is symmetric and independent of x

證明:

矩陣A是對稱矩陣,所以 A= A^T 並假設空間維度為n。

  egin{align} frac{partial x^TAx}{partial x} &= egin{bmatrix} frac{partial x^TAx}{partial x_{1}} \ frac{partial x^TAx}{partial x_{2}} \ vdots \ frac{partial x^TAx}{partial x_{n}}end{bmatrix} \ &= egin{bmatrix} frac{partial sumlimits_{i=1}^nsumlimits_{j=1}^n x_iA_{ij}x_j }{partial x_{1}} \ frac{partial sumlimits_{i=1}^nsumlimits_{j=1}^n x_iA_{ij}x_j}{partial x_{2}} \ vdots \ frac{partial sumlimits_{i=1}^nsumlimits_{j=1}^n x_iA_{ij}x_j}{partial x_{n}} end{bmatrix} \ &= egin{bmatrix} frac{partial sumlimits_{i=1}^n A_{i1}x_i +sumlimits_{j=1}^n A_{1j}x_j }{partial x_{1}} \ frac{partial sumlimits_{i=1}^n A_{i2}x_i +sumlimits_{j=1}^n A_{2j}x_j}{partial x_{2}} \ vdots \ frac{partial sumlimits_{i=1}^n A_{in}x_i +sumlimits_{j=1}^n A_{nj}x_j}{partial x_{n}} end{bmatrix} \ &= (A + A^T)x \ &= 2x^TA lacksquare end{align}

  frac{partial loglvert X
vert}{partial X} = X^{-T}

雅可比公式:

  frac{partial lvert X
vert}{X_{ij}} = adj^T(X)_{ij}

證明:

  egin{align} frac{partial loglvert X
vert}{partial X}&=frac{1}{lvert X
vert} frac{partial lvert X
vert}{partial X} \ &= frac{1}{lvert X
vert} * adj^T (X)_{ij} \ &= frac{1}{lvert X^T
vert} * adj^T (X)_{ij} \ &= X^{-T} lacksquare end{align}

  frac{partial a^TX^{-1}b}{partial X} = -X^{-T}ab^TX^{-T}

證明:

這個證明有些複雜。你應該事先了解克羅內克函數和Frobenius內部乘積。對於矩陣X,我們可以寫成:

  frac{partial X_{ij}}{partial X_{kl}} = delta_{ik}delta{jl} = mathcal{H}_{ijkl}

你可以將H視為Frobenius內積的標識元素。在開始證明之前,讓我們準備好去找逆矩陣的導數。也就是說, ?X^{-1}/?X

  egin{align} I^{prime} &= (XX^{-1})^{prime}  \ &= X^{prime}X^{-1} + X(X^{-1})^{prime} \ &= 0 end{align}

所以我們可以這麼解:

  X(X^{-1})^{prime} = -X^{prime}X^{-1} 
ightarrow (X^{-1})^{prime} = X^{-1}X^{prime}X^{-1}

接著,讓我們回到正題:

  egin{align} a^TX^{-1}b &= sumlimits_{i,j=1}^{n,n} a_ib_j(X^{-1})_{ij} \ &= sumlimits_{i,j=1}^{n,n} (ab^T)_{ij}(X^{-1})_{ij} \ &= sumlimits_{i,j=1}^{n,n} ((ab^T)^T)_{ji}(X^{-1})_{ij} \ &= tr(ab^Tcdot X^{-1}) \  &= < ab^T, X^{-1}>_F end{align}

其中F表示Frobenius內積。

接著,帶回到原始公式:

  egin{align} frac{partial a^TX^{-1}b}{partial X} &= frac{partial < ab^T, X^{-1} >_F}{partial X} \ &= < ab^T, frac{partial X^{-1}}{X} >_F \ &= < ab^T, frac{partial X^{-1}}{X} >_F \ &= < ab^T, X^{-1}X^{prime}X^{-1} >_F  \ &= < ab^T, (X^{-T})^T X^{prime}(X^{-T})^T >_F \ &= < X^{-T}ab^TX^{-T},X^{prime} >_F \ &= < X^{-T}ab^TX^{-T},mathcal{H} >_F \ &= X^{-T}ab^TX^{-T} lacksquare end{align}

現在,我們已經有足夠的準備去找到每個參數的梯度了。

phi 取導並設為0:

  egin{align} frac{partial ell(phi,mu_k,Sigma)}{partial phi} &= sumlimits_{i=1}^m (-0-0+0+frac{y^i}{phi}-frac{1-y^i}{1-phi})=0\ &Rightarrow sumlimits_{i=1}^m y^i(1-phi)-(1-y^i)phi = 0\ &Rightarrow sumlimits_{i=1}^m y^i -mphi = 0\ &Rightarrow phi = frac{1}{m}sumlimits_{i=1}^m mathbb{1}{y^{(i)}=1} end{align}

μ_k 取導並設為0:

  egin{align} frac{partial ell(phi,mu_k,Sigma)}{partial mu_k} &= sumlimits_{i=1}^m (-0-0-frac{1}{2}2(x_k^i-mu_k)^TSigma^{-1}mathbb{1}{y^i=k})=0\ &Rightarrow sumlimits_{i=1}^m x_k^imathbb{1}{y^i=k} - mu_k mathbb{1}{y^i=k} = 0\ &Rightarrow mu_0 = frac{sum_{i=1}^mmathbb{1}{y^{(i)}=0}x^{(i)}}{sum_{i=1}^mmathbb{1}{y^{(i)}=0}}\ &Rightarrow mu_1 = frac{sum_{i=1}^mmathbb{1}{y^{(i)}=1}x^{(i)}}{sum_{i=1}^mmathbb{1}{y^{(i)}=1}} end{align}

Sigma 取導並設為0:

  egin{align} frac{partial ell(phi,mu_k,Sigma)}{partial Sigma} &= sumlimits_{i=1}^m (-frac{1}{2}Sigma^{-T}-frac{1}{2} (Sigma^{-T}(x_k^i-mu_k)(x_k^i-mu_k)^TSigma^{-T}))=0\ &Rightarrow sumlimits_{i=1}^m (1-Sigma^{-T}(x_k^i-mu_k)(x_k^i-mu_k)^T) = 0\ &Rightarrow m - sumlimits_{i=1}^m Sigma^{-T}(x_k^i-mu_k)(x_k^i-mu_k)^T = 0\ &Rightarrow mSigma = sumlimits_{i=1}^m (x_k^i-mu_k)(x_k^i-mu_k)^T\ &Rightarrow Sigma = frac{1}{m}sumlimits_{i=1}^m (x^{(i)} - mu_{y^{(i)}})(x^{(i)} - mu_{y^{(i)}})^T end{align}

結果如圖所示:

請注意,由於有著同樣的協方差,因此上圖兩個輪廓的形狀是相同的,然而均值不同。在邊界線這條線上(自左上到右下的直線),每個類的概率為50%。

4.2 高斯判別分析(GDA)和邏輯回歸

高斯判別分析又是如何與邏輯回歸相關聯的呢?我們可以發現如果上述 p(xlvert y) 是具有共同協方差的多元高斯,我們就可以計算 p(xlvert y) 並證明它是遵循邏輯函數的。要證明這一點,我們可以:

  p(y=1lvert x;phi,mu_0,mu_1,Sigma) = frac{p(x,y=1,;phi,mu_0,mu_1,Sigma)}{p(x;phi,mu_0,mu_1,Sigma)}

  egin{align} &=frac{p(y=1lvert x;phi)p(xlvert mu_1,Sigma)}{p(y=1lvert x;phi)p(xlvert mu_1,Sigma) + p(y=0lvert x;phi)p(xlvert mu_0,Sigma)} \ &= frac{phimathcal{N}(xlvert mu_1,Sigma)}{phimathcal{N}(xlvert mu_1,Sigma) + (1- phi)mathcal{N}(xlvert mu_0,Sigma)} \ &= frac{1}{1 + frac{(1- phi)mathcal{N}(xlvert mu_0,Sigma)}{phimathcal{N}(xlvert mu_1,Sigma)}} \ end{align}

由於高斯屬於指數族,我們最終可以將分母中的比率轉換為 exp(	heta^Tx) ,其中 	hetaphiμ_0,μ_1Sigma 的函數。

同樣的,如果 p(xlvert y) 是具有不同 λ 的泊松分布,則 p(xlvert y) 也遵循邏輯函數。 這意味著GDA模型本身有一個強假設,即每個類的數據都可以用具有共享協方差的高斯模型建模。但是,如果這個假設是正確的話,GDA將可以更好並且更快地訓練模型。

另一方面,如果不能做出假設,邏輯回歸就不那麼敏感了。因此,你可以直接使用邏輯回歸,而無需接觸高斯假設或泊松假設。

5 樸素貝葉斯

在高斯判別分析中,隨機變數應使用具有連續值特徵的數據。 而樸素貝葉斯則用於學習離散值隨機變數,如文本分類。在文本分類中,模型基於文本中的單詞將文本標記為二進位類,單詞被向量化並用於模型訓練。一個單詞向量就像一本字典一樣,其長度是字典中單詞儲存的數量,其二進度值則代表著是否為某個詞。 一個單詞在單詞向量中由1表示「存在」,由0表示不存在這個單詞。

比方說,一個Email的向量可以表示為:

  x = egin{bmatrix} 1 \ 1 \ 0 \ vdots \ 1 \ vdots  end{bmatrix}

其中前兩個詞可以是「運動」和「籃球」 。(因為原著大佬很喜歡打籃球,所以這裡他用了運動和籃球作為例子…)

然而,這可能並不起作用。比方說,如果我們有50000個單詞(len(x) = 50000)並嘗試將其建模為多項分布。定義上講,我們可以對  p(xlvert y) 建模,其中p為多項分布。由於每個單詞都只有兩個狀態,要麼存在要麼不存在,這就是二元情況。對於多項分布,我們必須對所有可能性進行建模,這意味著類的數量將會是一封郵件中所有可能結果的總和。這種情況下,對於給定的類,每個單詞既可以是獨立的,也可以是非獨立的,這並不要緊。要緊的是我們將其建模為多項分布後,參數的維數將會是 2^{50000}-1 ,這實在是太大了。因此,為了解決這個問題,我們做出了樸素貝葉斯假設

在樸素貝葉斯假設中 - 基於給定分類,每個詞彼此之間條件獨立。

具體來說,如果我們有一封已被標記為「運動」分類的郵件,則「籃球」一詞的出現與「扣籃」一詞的出現相互獨立。基於以上假設,我們可以獨立地對每個單詞進行建模,我們可以將它建模為伯努利分布。當然,我們知道這個假設也許是錯誤的,這也是它之所以被稱Naive的原因(Naive是樸素貝葉斯中樸素的英文,它也有天真的、無知的、幼稚的意思)。但根據我的個人經驗,樸素貝葉斯將給你提供相當不錯的結果。如果你打算刪除此假設的話,你需要對數據依賴性進行大量的額外計算。

所以,我們有:

  egin{align} P(x_1,...,x_{50000}lvert y) &=P(x_1lvert y)P(x_2lvert y,x_1)\ &...P(x_{50000}lvert y,x_1,x_2,...,x_{49999}) \ &=prodlimits_{i=1}^{n} P(x_ilvert y) end{align}

我們對第一步應用概率論中的鏈式法則,對第二步應用樸素貝葉斯假設。

找到對數似然函數值的最大值:

  egin{align} mathcal{L}(phi_y,phi_{jlvert y=0},phi_{jlvert y=1}) &= prodlimits_{i=1}^{m} P(x^{(i)},y^{(i)}) \ &=prodlimits_{i=1}^{m} P(x^{(i)} lvert y^{(i)}) P(y^{(i)}) end{align}

其中  ?_{jlvert y=1} = P (x_j=1 lvert y=1), ?_{jlvert y=0} = P (x_j=1 lvert y=0) 並且 ?_y= p(y=1) 。 這些是我們需要訓練的參數。

我們可以對其求導:

  egin{align} phi_{jlvert y=1} &= frac{sum_{i=1}^m mathbb{1}{x_j^i = 1 	ext{and} y^i = 1}}{sum_{i=1}^m mathbb{1}{y^i = 1}} \ phi_{jlvert y=0} &= frac{sum_{i=1}^m mathbb{1}{x_j^i = 1 	ext{and} y^i = 0}}{sum_{i=1}^m mathbb{1}{y^i = 0}} \ phi_y &= frac{sum_{i=1}^m mathbb{1}{y^i = 1}}{m} \ end{align}

現在來看,由於每個給定的類學習了50000個參數,參數的總數量大約為100000。這已經比以前少太多了。

為了預測新樣本,我們可以使用貝葉斯法則來計算 P(y = 1 lvert x) 並比較哪個更高。

  p(y=1lvert x) = frac{p(xlvert y=1)p(y=1)}{p(x)}

  =frac{p(y=1)prod_{j=1}^n p(x_jlvert y=1)}{p(y=0)prod_{j=1}^n p(x_jlvert y=0) + p(y=1)prod_{j=1}^n p(x_jlvert y=1)}

延伸: 在這種情況下,因為y是二進位值(0,1),我們將 P(x_i lvert y) 建模為伯努利分布。 也就是說,它可以是「有那個詞」或「沒有那個詞」。 伯努利將類標籤作為輸入並對其概率進行建模,前提是它必須是二進位的。 如果是處理非二進位值 X_i ,我們可以將其建模為多項式分布,多項式分布可以對多個類進行參數化。

總結: 樸素貝葉斯適用於離散空間,高斯判別分析適用於連續空間。我們任何時候都能將其離散化。

6 拉普拉斯平滑處理

上面的示例通常是好的,不過當新郵件中出現過去訓練樣本中不存在的單詞時,該模型將會預測失敗。 在這種情況下,它會因為模型從未看到過這個詞而導致兩個類的 phi 變為零,以至於無法進行預測。

這時我們則需要另一個解決方案,其名為拉普拉斯平滑,它將每個參數設置為:

  egin{align} phi_{jlvert y=1} &= frac{sum_{i=1}^m mathbb{1}{x_j^i = 1 	ext{and} y^i = 1}+1}{sum_{i=1}^m mathbb{1}{y^i = 1}+2} \ phi_{jlvert y=0} &= frac{sum_{i=1}^m mathbb{1}{x_j^i = 1 	ext{and} y^i = 0}+1}{sum_{i=1}^m mathbb{1}{y^i = 0}+2} \ phi_j &= frac{sum_{i=1}^{m} mathbb{1}[z^{(i)}] + 1}{m+k} \ end{align}

其中k是類的數量。在實際操作中,拉普拉斯平滑並沒有太大的區別,因為我們的模型中通常包含了所有的單詞。不過有個Plan B總是極好的~


推薦閱讀:
相关文章