機器學習自2010年左右漸漸成為顯學。我個人最有印象的是2016年的人機圍棋對決,來自DeepMind團隊之手的AlphaGo以四勝一敗擊敗了世界頂尖棋手李世乭,一時之間身邊的每個人都在討論機器學習。在2021年我正在寫稿的現在,機器學習成為了商業計劃的收入與流量保證。機器學習每個人都聽過,媒體上的專家總是把機器模型宣傳成無所不能的模樣,但真的是這樣嗎?今天我想跟讀者討論,為什麼我認為機器學習跟大學在教的方程式擬合沒什麼不同。
轉換是什麼?
陽光灑在大地上,植物將它轉換成生命所需的能量,其他的動物則將它轉換成了溫暖,或是惱人的酷暑。轉換在生活中隨處可見,也是機器學習的本質之一。更精確的說,機器學習是一種非線性轉換的方程式。我們先從最簡單的情況開始吧!假設A和B兩組資料集可以透過某個算法,從A集某一個元素,找到B集裡的一個或多個對應的元素,那麼該算法可以稱為轉換方程式,通常在代數數學裡的代號是T,方程式如下式一。機器學習所做的事情,就是找出這個T。
$T:A\rightarrow{}B$ (1)
從代數數學說起
人類會發展代數數學的原因,有一部分是物理學上的需求。如果我們可以幫世上萬物找到互相轉換的方式,那麼某種程度上,我們就可以透過部分資訊來預測未來。舉例來說,人們發現了彈簧壓縮量與受力的關係(虎克定律),所以可以透過磅秤量體重;飛機也是人們利用流速與壓力的關係(可壓縮流體版本的白努利定律)設計出來的傑作。不同物理量之間的轉換,其結果是可重複且可預測的。所以在短時間內量很多次體重,體重計顯示的數字會是差不多的數字。也不會有飛機今天能飛,明天突然飛不起來的情形。人類的文明也因此蓬勃發展。
假使任何相關的兩件事,都可以用某個轉換來表達,那為什麼人類還沒有變得全知全能呢?理由是…轉換其實並不容易找出來。現實生活有個很討厭但很常見的性質叫做不確定性,這也是為什麼至今人類還沒有辦法成為超越神的存在的原因。這類的例子也很多,假使現在烏雲密佈,請問三十分鐘後會下雨嗎?這其實不容易回答,下雨的因素太多了,我們無法一一分析。這導致我們知道烏雲與下雨有曖昧關係,但卻沒辦法鐵口直斷的說會不會下雨。
如何用方程式描述機率?
剛才我們知道方程式可以用於描述A資料集與B資料集之間的某種關係。但如果今天這個關係不是必然發生的呢?人類是不是就束手無策了?例如當A(烏雲密佈)發生了,跟B(下雨)的關係為何呢?有的人可能會覺得:「這個AB關係目前看起來好像不是必然的,可能是因為除了烏雲密佈,還有其他必要因素需要被考慮進去。多多測量其他物理量即可解決。」但由於成本有限,所以人類不可能測量全部可能的物理量來推測明天會不會下雨。於是偷懶成性的人類導入了機率這個概念。既然AB之間不必然會接連發生,那麼就多觀測幾次,看看A(烏雲密佈)之後,有幾次B(下雨)也發生了。如下表一:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | |
試驗 | 雨 | 乾 | 雨 | 雨 | 雨 | 乾 | 雨 | 雨 | 雨 | 雨 |
由於烏雲密佈是我們的假設,所以A集合的元素固定為烏雲密佈(儘管晴天也是有可能下雨的)。而B集合含有兩個元素:「下雨」和「沒下雨」。我們可以分別計算他們機率,令$P$為機率、$a$為資料集A裡的元素、b為資料集B裡的元素,如下式二、三:
$P(b_{rainy}|a_{cloudy}) = \frac{8}{10} = 0.8$ (2)
$P(b_{dry}|a_{cloudy}) = \frac{2}{10} = 0.2$ (3)
這是條件機率的表示法,$P(b_{rainy}|a_{cloudy})$指的是「當$a_{cloudy}$(烏雲密佈)成立時,$b_{rainy}$(下雨)也成立的機率」。本篇避免離題,就不展開細講。
怎麼定義更複雜的轉換?
如果B集合中的元素多於兩個時怎麼定義轉換呢?例如今天你的遠房親戚到你家拜訪,炫耀地拿出他們家去東非肯亞與稀有動物的合照。他知道你學識淵博,問你那隻動物叫什麼名字。此時腦海中快速閃過的所有曾經看過的動物,但是沒有任何一隻看起來像是這張照片裡,受到嚴重驚嚇而一臉呆滯的陌生野獸。
此時A資料集就是世界上眾多動物照片的其中一張。因為你那親切的遠房親戚已經指定好了希望你回答的照片,所以在這個命題裡,我們不用考慮其他照片作為前提的情況。B資料集就是動物的種類,有見過的也有許多沒見過的。我們缺了太多資訊,它摸不到,也沒有辦法查閱大英百科全書,身邊也沒有生物學專家可以諮詢,只有面前一臉期待的看著你的遠方親戚。所以你決定孤注一擲,猜一個看起來差不多的動物,假設我們的大腦成了轉換T,如下式四。
$T_{brain}:A_{photo} \rightarrow B_{animal}$ (4)
由於這個場合發生在平行時空(你不會想要有這樣的親戚的,請相信我),所以我們可以假設一些令我們方便計算的東西:那裡的地球上只有四種動物Alpha($\alpha$)、Beta($\beta$)、Gamma ($\gamma$) 及Human(人類)。跟據學校教的知識,你猜這張圖為這四種其中一種動物的機率為0.60、0.25、0.10及0.05。上述說法可以寫成下面的式五:
$P(x| photo) = (0.60, \quad 0.25, \quad 0.10, \quad 0.05)$ (5)
for $x= \alpha,\quad \beta,\quad \gamma,\quad or\quad Human$
值得注意的是,遠房親戚拍的這張動物照片,實際上只對應到一隻動物。但由於我們並沒有足夠的知識回答這個問題,所以我們只能用「猜」的,我們的大腦形成了一個機率分佈P 來描述AB之間的關係,但這未必是AB之間真正的關係。
我們猜錯了多少?
「$\alpha$!」你用堅定的口氣說,即使其實心裡還不太確定。其實你有一點想猜「$\beta$」或是「$\gamma$」,甚至還有「工作人員假扮的」這樣滑稽的選項,因為我們長這麼大,還不曾看過哪一隻動物被嚇到之後,還會留在原地不逃跑的。幸好這位不常見面的遠房親戚並不博學,也沒有要賣弄他的知識。只是點點頭,心滿意足的走了。後來你還是厚著臉皮要了一張拷貝,然後在小學課本上查到了這隻動物應該就是$\alpha$。可是好學的你並不滿足於這樣的成就。
你認為最重要的是要在下一次猜得更準,畢竟這攸關的不只是面子,還有你們家族世世代代都是優等生的傳統印象。從照片上我們可以看到一些改進的可能性:「可能頭上的獨角是重要的特徵吧」「沒有多少動物像它一樣有三隻眼睛」「我敢說這是唯一一種被嚇到但不會逃走的物種」。有許多想法同時湧入腦海,看來以後有這些特徵時,猜「$\alpha$」就對了。但也許沒那麼絕對。聽說在大洋的另一端,有人已經發現了頭上長角的$\beta$。發現自己的解答其實並不可行,你感到有些沮喪,但我們還是有方法的。
猜得更準是一個大問題,我們要拆解它,變成兩個主要的小問題。第一、我的預測與真正的答案差多少?第二、要如何讓預測更接近真實。我們把第二個提問留給下個章節。面對第一個小問題,我們可以機率化我們的預測,然後直接跟真實解答做比較。你回憶了剛才的預測$P(x| photo)$:$\alpha$為0.6、$\beta$為0.2、$\gamma$為0.15、還有$H$(工作人員假扮)的機率為0.05。由於事實上圖中的動物就是$\alpha$,所以$\alpha$實際上是1,其他物種為零。我們把預測與真實的機率$P_{real}(photo| x)$相減,如下表二:
$\alpha$ | $\beta$ | $\gamma$ | $H$ | |
$P(x| photo)$ | 0.6 | 0.2 | 0.15 | 0.05 |
$P_{real}(x|photo)$ | 1 | 0 | 0 | 0 |
$P(x|photo)$ $-$ $P_{real}(x|photo)$ | -0.4 | 0.2 | 0.15 | 0.05 |
平均驚訝值
太好了!我們的預測與真實之間的差距算出來了,這是一個好的開始。但此時內心有點不太踏實,因為如果能用一個純量表達差距的話,就更容易比較不同的預測了。此時剛好國中的數學老師過來拜訪你,他覺得可以用「平均而言,這個轉換有多令人驚訝」來表達,因為猜錯的話我們多少會感到驚訝。假設驚訝的程度可以被數值化,我們希望機率越低的選項擁有越高的驚訝值。這樣做的理由是越少出現的選項一旦出現會特別令人驚訝。令$P(x| photo)$為$p_{pred,i}$、$P_{real}(x| photo)$為$p_{real,i}$、平均驚訝值$surprise$ 為預測與現實之間的差距,你寫下算法如下式六:
$surprise = \Sigma_i {p_{real,i}\cdot (1-p_{pred,i})}$ (6)
我們希望「真實發生機率越大」而「預測發生的機率越小」的事件應該對驚訝值有越大的貢獻。而你的數學老師建議用$-log(p)$ 表達上述概念。令驚訝值為$-log(p)$、平均驚訝值為$surprise$。老師借你的筆寫下式七:
$surprise = -\Sigma_i p_{real,i} \cdot log(p_{pred,i})$ (7)
平均驚訝值應有的條件
這個算法使得平均驚訝值成為嚴格遞減函數,用來表達那些極少出現的事件的驚訝值剛剛好。其實各位用什麼算式來表達平均驚訝值都是可以,因為它只是一種概念,不限制一定要使用某種物理量。只要能夠表達出:第一、越少發生的事越令人驚訝;第二、驚訝的程度會隨事件機率的降低而加速成長(不只是成長,而是加速成長)。滿足這兩個條件就是好的定義。
咦,為什麼式七左邊的$p$ 是用$p_{real,i}$ 而不是$p_{pred,i}$ 呢?請讓我凸顯一個事實:「我們認為它是什麼動物」跟「事實上它是什麼動物」的機率分佈並不相同。我們認爲他是多種動物的其中一種,但實際上從他打出生開始就是$\alpha$ 了。所以「平均驚訝值」應該以真實的機率$p_{real,i}$ 作為權重,以自己的預測為驚訝值,才是合理的估算。拿出為了大學微積分課而買的工程計算機,你算出了動物猜謎的平均驚訝值是$-log(0.65)$。這讓你覺得很滿意,因為這是一個很公正的方式用來評量自己有多驚訝。
如何猜得更準?
假設有另一個人已經知道照片上是什麼動物了,也做出了預測,如下式八。豪不意外地,他的預測是100% 的$\alpha$,此時他的平均驚訝值為0。(註:對於已經知道答案的人而言,平均驚訝值不一定是零。如果該事物的本質就具有不確定性的話,那平均驚訝值就必然大於零。)從數學上可以證明,不可能有人可以得到更低的平均驚訝值,因此這是一個很好的基準點。將基準點與自己的平均驚訝值相減後,得到的純量可以代表預測與事實之間的差異。那我們應該如何利用他呢?
$\hat{surprise} = -\Sigma_i p_{real,i}\cdot log(p_{real,i})$ (8)
散度與平均驚訝值
普遍的作法是將「預測與事實差距」定為一個方程式,微分它並找到微分為零的點,就跟方程式擬合一模一樣。若能找到,此時的方程式就是最佳的猜題策略了。我們令平均驚訝值$surprise$ 和基準點$\hat{surprise}$ 相減為Divergence($D$),如下式九:
$D = \hat{surprise} \quad – \quad surprise$ (9)
但微分要怎麼做呢?目前的科技我們依然很難幫腦袋內的神經元作微分,但電腦的話可以。所以現在決策者由電腦接手,我們更進一步的假設,剛剛的動物預測是由某個多變數的函數算出來的。就算實際上有幾個參數你並不清楚,還是可以寫成一個擁有許多參數的黑盒子的樣子。
$P_{pred}(x|photo, \theta) = f_{\theta}(x, photo)$ (10)
散度與梯度
式十的意思是,一個由參數$\theta$ 調控的轉換,認為$photo$ 中的動物為$x$ 的機率為$P_{pred}(x | photo, \theta)$。$\theta$ 通常不只是一個參數,而是由多個獨立的參數組成的一組數。如此一來$D$就可微了,為求方便,我們把$P_{real}$ 簡稱為$p$ ;$P_{pred}$ 則由另一個字母$q$ 替代,並且用字母$i$ 來代表不同的預測選項:
$D = \Sigma p_i(logp_i) – \Sigma_i p_i(logq_i)$
$\frac{d D}{d \theta}
= – \frac{d}{d \theta} \Sigma_i p_i \cdot log (q_i)
=- \Sigma_i \frac{p_i}{q_i} \frac{d q_i}{d \theta}$
$dD=- \Sigma_i \frac{p_i}{q_i} \frac{d q_i}{d \theta}d \theta$ (11)
where $p_i = P_{real}(x_i|photo, \theta)$ and $q_i = P_{pred}(x_i|photo, \theta)$.
$p$ 對$\theta$ 微分必為零,因為$p$ 是真實的機率,與我們的預測無關,所以可忽略不寫。$\frac{dq}{d\theta}$ 可以從黑盒子微分求得。這個方程式告訴我們如果要讓預測與事實的差距$D$ 變小,則黑盒子的參數$\theta$應該要調整多少。事實上我們很難透過這個微分方程式直接找到最佳解,因為這樣的微分方程式有很多個,數量由$\theta$的參數數量決定。$\theta$ 通常包含了千上萬個參數,這是為了提高方程式的能力。解出「萬元聯立微分方程式」並不現實,實際上工程數學的二元一次微分方程式就已經夠嗆的了。但如果我們只從出發點走非常小的一步,那麼不同參數之間的影響就可以忽略,使得式十一可以近似於式十二:
$\partial D=- \Sigma_i \frac{p_i}{q_i} \frac{\partial q_i}{\partial \theta} \partial \theta$ (12)
再提醒一次,式十二的微分方程式的數量跟$\theta$ 參數的數量是一樣多的。我們忽略了參數之間的影響,但沒有減少方程式的數量。至此我們將問題簡化為多個常微分方程式,計算的難度大大降低。接著使用數值法(numerical solution)就可以一步一步的更新參數,直到接近最佳解。因爲更新參數的方法並不在本篇的討論範圍內,所以我做一個簡單的比喻來描述。更新參數就像在滑雪,滑雪選手不斷的往低處(較佳解)走,根據地形(參數空間)隨時改變前進方向,最後在最低處(最佳解)停下來。
小結
本質上機器學習所做的事與方程式擬合並無二異,不一樣的是機器學習所用的模型更具有可塑性,且無需領域知識(Domain Knowledge)即可建模。本篇的重點在於從數學層面介紹機器學習與方程式擬合的相似處,對於模型架構並沒有著墨。有興趣的讀者可以參考《深度神經網路的反向誤差傳遞》。
備註
我刻意地避免使用太多專有名詞,因為我認為一件事情的意義不在於他的名字,而是他能做到的事情。但如果讀者有興趣做延伸閱讀的話,暸解正確的專有名詞是必要的。
我所指的「平均驚訝值」就是「交叉熵(cross entropy)」,意思是如果用一個預測來描述一個事實的話,其預測出錯的程度。 然而事實本身也有不確定性,數學上叫做熵 (entropy),意思是用事實機率取樣兩次,兩次得到的結果不同的程度。 Kullback與Leibler使用交叉熵與熵的差當作「預測與事實之間的差距」(KL Divergence),並廣泛地被應用在統計學以及資訊工程。