今天《高級機器學習》課上,老師講到了半監督學習,涉及到混合高斯模型和EM演算法時,順帶講了個小插曲,這裡就命名為「機器學習:太陽升起的概率」吧,感覺還挺有意思的,這裡整理一下。故事雖小,但卻揭示了很多機器學習裡面的道理。

故事是這樣的,在統計機器學習領域有兩個派別,一個是頻率學派,一個是貝葉斯學派。兩個學派都在做一件事情,就是預測太陽升起的概率。他們都觀察了 n 天,並且這 n 天太陽都是照常升起,那麼頻率學派聲稱「太陽一定會升起」,而貝葉斯學派聲稱「太陽升起的概率將會很大,並且這個概率會無限趨向於1」,於是兩個學派開始爭論起來,到底誰的說法才是準確的。

然而實際上,物理學家默默不說話,物理學家內心os:」太陽每時每刻都在衰減,到40~50億年之後太陽將會坍縮,從地球上再也看不到太陽了,所以你們都錯了「。

Excuse me ? 然而,此時頻率學派和貝葉斯學派仍在爭論。

頻率學派和貝葉斯學派是兩個從不同角度看待問題的學派。頻率學派認為事件本身就是有隨機性的,我們只需要通過數據統計就可以獲得對現實世界的認知;貝葉斯學派則認為隨機性產生於觀察者,觀察者先有一個先驗知識,然後觀察到了現實世界中發生的事情作為證據,然後不斷改變自己的認知。

以太陽升起為例,記事件 x_i in {0, 1} 表示第 i 天太陽是否升起,頻率學派和貝葉斯學派都觀察到了 n 天的結果 X = {x_1, x_2, cdots, x_n} 。那麼如何求得太陽升起的概率呢?

頻率學派如下做:

假設事件發生的概率大小為 	heta ,事件不發生的概率為 1-	heta ,即簡單的伯努利分布(Bernoulli distribution)。那麼對應到太陽升起的問題中,太陽升起的概率為 	heta ,那麼只要簡單統計 n 天裡面有多少天太陽升起,然後除以總天數就可以了。這就是頻率學派的做法,事件發生的概率是觀察數量足夠多時該事件發生的頻率

那麼很簡單:

	heta = frac{sum_{i=1}^{n} I(x_i = 1)}{n} = frac{n}{n} = 1

所以,頻率學派認為太陽升起的概率為 1,太陽一定會升起。這裡,不免產生一個疑問,為什麼簡單統計頻率就可以呢?實際上,頻率學派簡單統計得到的結果是最大似然估計(Maximum Likelihood Estimation, MLE)的結果。

最大似然估計做的是最大化似然 p(X|	heta) ,考慮對於 x_i 來說, p(x_i = 1) = 	hetap(x_i = 0) = 1 - 	heta,可以合併寫為 p(x_i|	heta) = 	heta^{x_i}(1-	heta)^{1 - x_i} ,那麼有:

p(X|	heta) = prod_{i=1}^n p(x_i|	heta) = prod_{i=1}^n 	heta^{x_i}(1-	heta)^{1-x_i} = 	heta^{sum_{i=1}^n x_i}(1 - 	heta)^{n - sum_{i=1}^n x_i}

這裡需要注意頻率學派還假設事件之間獨立同分布(iid)。那麼最大化上面的似然,一般會等價地最大化對數似然(Log Likelihood),即:

max_	heta log p(X|	heta) = sum_{i=1}^n x_i log(	heta)  + (n - sum_{i=1}^n x_i) log(1 - 	heta)

	heta 求導即可得到:

	heta = frac{sum_{i=1}^nx_i}{n}

貝葉斯學派如下做:

首先,有兩個假設條件和頻率學派一致:太陽升起這個事件服從伯努利分布,並且第 i 天的觀測和第 j 天的觀測互相獨立,數據獨立同分布

除此之外,貝葉斯學派又引入了很多假設,將觀測太陽是否升起的過程分成了三個部分:

  • 先驗(prior):從觀察者出發,觀測者事先有一個對太陽升起概率的認知
  • 證據(evidence):觀測事件的發生情況,這 n 天裡面有哪些天太陽升起了
  • 後驗(posterior):通過觀測的數據,觀測者認識到之前的認知不太準確,改變認知

通常這可以通過貝葉斯公式來表示:

p(	heta|X) = frac{p(X|	heta)p(	heta)}{p(X)} propto p(X|	heta)p(	heta)

其中 p(	heta)先驗,模型的參數並不是確定的,而是服從一個分布; p(X|	heta) 就是似然,衡量的是觀測到的證據和我們假設的模型有多符合; p(	heta|X)後驗概率,衡量的是觀測到一部分數據之後認知的變化。

通常,我們希望先驗和後驗服從一樣的分布,這樣建模起來比較方便,並且也有一定的道理:觀測的認知大致上是不變的,只是稍微改變一下。這就是共軛分布,先驗和似然滿足共軛條件的話,那麼得到的後驗和先驗服從一致的分布。基於似然角度來說,就是似然的共軛先驗(Conjugate prior)。

對於太陽升起的問題,貝葉斯學派這麼做,記 x 為事件「 n 天裡面有多少天太陽升起了」,那麼這是一個二項分布(Binomial distribution),記 x sim B(n, 	heta) ,有:

p(x = k | 	heta) = C_n^k 	heta^k (1-	heta)^{n-k}

注意上面是 p(x=k|	heta) ,給定了 	heta 的取值。貝葉斯學派選擇Beta分布作為先驗,這是因為Beta分布是二項分布的共軛先驗

p(	heta|alpha, eta) = frac{Gamma(alpha + eta)}{Gamma(alpha)Gamma(eta)} 	heta^{alpha-1}(1-	heta)^{eta - 1} \ Gamma(z) = int_{0}^{+infty}t^{z-1}e^{-t}dt

接下來利用最大化後驗估計(Maximum A Posterior, MAP),即最大化 p(	heta|X)

p(	heta | x) propto p(x = k | 	heta)p(	heta) = C_n^k 	heta^k (1-	heta)^{n-k} frac{Gamma(alpha + eta)}{Gamma(alpha)Gamma(eta)} 	heta^{alpha-1}(1-	heta)^{eta - 1} \ = frac{Gamma(alpha + eta + n)}{Gamma(alpha + k)Gamma(eta + n - k)} 	heta^{alpha + k -1}(1-	heta)^{eta + n - k - 1}

對上式取對數,然後對 	heta 求導,求得最優解為:

	heta = frac{k + alpha - 1}{n + alpha + eta - 2}

在太陽升起的問題中,觀測的數據裡面 k = sum_{i=1}^n x_i = n ,所以得到:

	heta = frac{n + alpha - 1}{n + alpha + eta - 2}

對上面式子的直觀解釋是,觀測者剛開始認為太陽升起的概率為 	heta = frac{alpha}{alpha + eta} ,這是Beta分布的均值,然後觀測到 n 天太陽都升起了,那麼觀測者開始認為太陽升起的概率應該更大一些,所以改為了 	heta = frac{n + alpha - 1}{n + alpha + eta - 2}

這裡注意貝葉斯學派並沒有通過觀測到 n 天太陽都升起了而下結論說太陽一定升起,貝葉斯學派認為太陽不升起的概率還是會存在的。這麼看來貌似是貝葉斯學派的建模更合理一些。

物理學家如下做:

由物理學和天文學知識,此處省略五萬字,太陽升起的概率應該會逐漸減小,40~50億年之後太陽就沒了。

額。。。

難道說頻率學派和貝葉斯學派都錯了嗎?答案是:學派理論沒有錯,各有千秋,大家考慮問題角度不一樣,或者說假設偏好不一樣。問題出在了數據模型上,在太陽升起問題上,有以下兩個不合理之處:

  • 模型:太陽每天是否升起並不是獨立的,當然也不會服從伯努利分布,模型假設錯誤
  • 數據:由於樣本有限,觀測到的都是太陽升起,誰如果誰能觀測到40億年之後太陽的狀態,或許還可以發一篇Science

這裡就引發了模型和數據的爭論了,到底是模型更重要還是數據更重要?個人認為,還是模型更重要,假如使用了錯誤的模型,數據越多,結論可能越離譜;當然在模型是基本正確的前提下,數據就成了瓶頸了。舉個例子,對於分類問題準確率來說,可能0~0.85都是由好的模型決定的,但是從0.85到0.95可能就取決於數據大小和質量了。

總結一下:

要想準確得到太陽升起的概率,從樣本的角度出發,個人建議還是要活得久一點,多運動多鍛煉,人生苦短,我看日出。其實司馬懿早就發現了這個道理了,曹操、曹丕、曹睿都狗帶了,他還健在,司馬懿不取天下誰取天下?難不成是周瑜hhh?


推薦閱讀:
相关文章