機器學習必備 | 最大似然估計:從統計角度理解機器學習

  • 2019 年 12 月 26 日
  • 筆記

最大似然估計是機器學習中最常用的參數估計方法之一。整個建模過程需要一個似然函數來描述在不同模型參數下真實數據發生的概率,似然函數是關於模型參數的函數。最大似然估計就是尋找最優參數,使得觀測數據發生的概率最大、統計模型與真實數據最相似。

本專欄之前的文章介紹了線性回歸以及最小二乘法的數學推導過程。對於一組訓練數據,使用線性回歸建模,可以有不同的模型參數來描述數據,這時候可以用最小二乘法來選擇最優參數來擬合訓練數據,即使用誤差的平方作為損失函數。機器學習求解參數的過程被稱為參數估計,機器學習問題也變成求使損失函數最小的最優化問題。最小二乘法比較直觀,很容易解釋,但不具有普遍意義,對於更多其他機器學習問題,比如二分類和多分類問題,最小二乘法就難以派上用場了。本文將給大家介紹一個具有普遍意義的參數估計方法:最大似然估計。

我們以一個賭博的例子來模擬機器學習的概率推理過程。假如你參與了一場賭博,你會被告知一個硬幣拋擲10次的正反情況,接下來由你下注,而你只有一次機會,猜對硬幣下一次正反情況則贏得100元,猜錯則損失100元。這時,你會如何決策?

概率和似然

一般地,硬幣有正反兩面,如果硬幣正反兩面是均勻的,即每次拋擲後硬幣為正的概率是0.5。使用這個硬幣,很可能拋10次,有5次是正面。但是假如有人對硬幣做了手腳,比如提前對硬幣做了修改,硬幣每次都會正面朝上,現在拋10次,10次都是正面,那麼下次你絕對不會猜它是反面,因為前面的10次結果擺在那裡,直覺上你不會相信這是一個普通的硬幣。現在有一人拋了10次硬幣,得到6正4反的結果,如何估算下次硬幣為正的概率呢?

因為硬幣並不是我們製作的,我們不了解硬幣是否是完全均勻的,只能根據現在的觀察結果來反推硬幣的情況。假設硬幣上有個參數θ,它決定了硬幣的正反均勻程度,θ = 0.5表示正反均勻,每次拋硬幣為正的概率為0.5,θ = 1表示硬幣只有正面,每次拋硬幣為正的概率為1。那麼,從觀察到的正反結果,反推硬幣的構造參數θ的過程,就是一個參數估計的過程。

概率

拋擲10次硬幣可能出現不同的情況,可以是「5正5反」、「4正6反」,「10正0反」等。假如我們知道硬幣是如何構造的,即已知硬幣的參數θ,那麼出現「6正4反」的概率為:

公式 1

公式1是概率函數,表示已知參數θ,事實「6正4反」發生的概率。參數θ取不同的值時,事情發生的概率不同。概率(Probability)函數一般用PPr表示。

上述過程中,拋10次硬幣,要選出6次正面,使用了排列組合。因為「6正4反」可能會出現正正正正正正反反反反正正正正正反正反反反正正正正反正正反反反等共210種組合,要在10次中選出6次為正面。假如每次正面的概率是0.6,那麼反面的概率就是(1-0.6)。每次拋擲硬幣的動作是相互獨立,互不影響的,「6正4反」發生的概率就是各次拋擲硬幣的概率乘積,再乘以210種組合。

概率反映的是:已知背後原因,推測某個結果發生的概率

似然

與概率不同,似然反映的是:已知結果,反推原因。具體而言,似然(Likelihood)函數表示的是基於觀察的數據,取不同的參數θ時,統計模型以多大的可能性接近真實觀察數據。這就很像開篇提到的賭局,已經給你了一系列硬幣正反情況,但你並不知道硬幣的構造,下次下注時你要根據已有事實,反推硬幣的構造。例如,當觀察到硬幣「10正0反」的事實,猜測硬幣極有可能每次都是正面;當觀察到硬幣「6正4反」的事實,猜測硬幣有可能不是正反均勻的,每次出現正面的可能性是0.6。

似然函數與前面的概率函數的計算方式極其相似,與概率函數不同的是,似然函數是θ的函數,即θ是未知的。似然函數衡量的是在不同參數θ下,真實觀察數據發生的可能性。似然函數通常是多個觀測數據發生的概率的聯合概率,即多個觀測數據都發生的概率。單個觀測數據發生的可能性為P(θ),如果各個觀測之間是相互獨立的,那麼多個觀測數據都發生的概率可表示為各個樣本發生的概率的乘積。這裡稍微解釋一下事件獨立性與聯合概率之間的關係。如果事件A和事件B相互獨立,那麼事件A和B同時發生的概率是A發生的概率 * B發生的概率。例如,事件「下雨」與事件「地面濕」就不是相互獨立的,「下雨」與"地面濕"是同時發生、高度相關的,這兩個事件都發生的概率就不能用單個事件的乘積來表示。兩次拋擲硬幣相互之間不影響,因此硬幣正面朝上的概率可以用各次概率的乘積來表示。

似然函數通常用L表示。觀察到拋硬幣「6正4反」的事實,硬幣參數θ取不同值時,似然函數表示為:

公式 2

公式2的圖形如下圖所示。從圖中可以看出:參數θ為0.6時,似然函數最大,參數為其他值時,「6正4反」發生的概率都相對更小。在這個賭局中,我會猜測下次硬幣為正,因為根據已有觀察,硬幣很可能以0.6的概率為正。

似然函數的一般形式可以用公式2第2行來表示,也就是之前提到的,各個樣本發生的概率的乘積。

最大似然估計

理解了似然函數的含義,就很容易理解最大似然估計的機制。似然函數是關於統計模型參數的函數,是描述觀察到的真實數據在不同參數下發生的概率。最大似然估計要尋找最優參數,讓似然函數最大化。或者說,使用最優參數時觀測數據發生的概率最大。

線性回歸的最大似然估計

之前的文章提到,線性回歸的誤差項ε是預測值與真實值之間的差異(公式3第1行),它可能是一些隨機噪音,也可能是線性回歸模型沒考慮到的一些其他影響因素。線性回歸的一大假設(之前的文章也有提到)是:誤差服從均值為0的正態分布,且多個觀測數據之間互不影響,相互獨立。正態分布的概率密度公式如公式3第2行所示。第2行中的Pr(x; μ, σ);分號強調μ和σ是這個概率密度函數的參數,它和條件概率函數中使用的|豎線符號表示的意義不同。

公式 3

ε代入,並取均值μ為0,可得到公式3第3行。再把公式3第1行中xy之間的關係代入第3行,可得到第4行,第4行即第i個單樣本發生的概率。

前文提到,似然函數是所觀察到的各個樣本發生的概率的乘積。一組樣本有N個觀測數據,其中單個觀測數據發生的概率為公式3第4行所示,N個觀測數據的乘積如公式4第1行所示。最終,似然函數可以表示成公式4第2行的結構。其中,xy都是觀測到的真實數據,是已知的,ω是需要去求解的模型參數。

公式 4

給定觀測數據Xy,如何選擇參數ω來使模型達到最優的效果?最大似然估計法告訴我們應該選擇一個ω使得似然函數L最大。L中的乘積符號和exp運算看起來就非常複雜,直接用L來計算十分不太方便,於是統計學家在原來的似然函數基礎上,取了log對數。log的一些性質能大大化簡計算複雜程度,且對原來的似然函數增加log對數並不影響參數ω在何處取得最優值。通常使用花體的l來表示log似然函數。

公式 5

由於log對數可以把乘法轉換為加法(公式5第2行所示),似然函數中的乘積項變成了求和項,如公式5第3行所示。又因為log對數可以消去冪,最終可以得到公式5第4行中的函數。

由於我們只關心參數ω取何值時,似然函數最大,標準差σ並不會影響ω取何值時似然函數最大,所以可以忽略掉帶有標準差σ的項。再加個負號,負負得正,原來最大化問題就變成了最小化問題,最終結果為下面的公式6。

公式 6

公式6與之前文章中最小二乘法所優化的損失函數幾乎一樣,都是真實值 - 預測值的平方和,可以說是殊途同歸。

接下來對公式6參數求解,可以採用之前文章中的求導方法,讓導數為0,得到一個矩陣方程,矩陣方程的解即為模型的最優解;也可以使用梯度下降法,求模型的最優解。梯度下降法將在本專欄之後的文章中介紹。

最小二乘與最大似然

前面的推導中發現,最小二乘與最大似然的公式幾乎一樣。直觀上來說,最小二乘法是在尋找觀測數據與回歸超平面之間的誤差距離最小的參數。最大似然估計是最大化觀測數據發生的概率。當我們假設誤差是正態分布的,所有誤差項越接近均值0,概率越大。正態分布是在均值兩側對稱的,誤差項接近均值的過程等同於距離最小化的過程。

總結

最大似然估計是機器學習中最常用的參數估計方法之一,邏輯回歸、深度神經網路等模型都會使用最大似然估計。建模過程需要一個似然函數來描述在不同模型參數下真實數據發生的概率,似然函數是關於模型參數的函數。最大似然估計就是尋找最優參數,使得觀測數據發生的概率最大、統計模型與真實數據最相似。