JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

機率的溫和漫遊

機器學習生活在一個充滿不確定性的世界裡——帶雜訊的資料、猜測、留有餘地的答案。本文介紹那套小巧而友善的機率工具,讓模型在永遠無法確定時仍能合理地推理:隨機變量、分布、鐘形曲線,以及概括它們的那兩個數字。

為什麼機器學習說的是「機率」這門語言

在「向量」那篇裡,你學會了把資料想成空間中的箭頭,乾淨又精確。可真實的資料從來沒這麼清爽。同一隻貓的兩張照片不一樣;同一份問卷問兩次答案也不同;感測器會抖動。機率正是為此而生的數學分支:一種在你無法確定時仍能審慎推理的方法,並用一個介於 0 和 1 之間的數說出你到底有多不確定。

這就是為什麼幾乎整個機器學習,在底層都是機率性的。一個分類器不會斷言「這是貓」。它給出的更接近「85% 是貓,12% 是狗,3% 是別的」。垃圾郵件過濾器在權衡證據。語言模型靠從一串可能性中採樣來挑下一個詞。模型始終是在不確定之下下它最好的賭注——而機率就是那本讓這些賭注保持誠實的帳本。

隨機變量:給不確定性貼上數字

[[random-variable|隨機變量]]不過是一個其取值事先並不固定的量,因為它來自某個不確定的過程。擲一次骰子:結果 X 就是一個隨機變量,可以是 1 到 6 中的某個數。量一下明天的氣溫:那也是個隨機變量。「變量」這個詞有點誤導——它並不自己變;它取的是底層那點運氣遞給它的值,而我們要研究的是這些取值的*規律*。

隨機變量分兩種口味。離散型取的是一個個分開的、可數的值——骰子(1–6)、今天收到的郵件數、模型在三個類別裡挑了哪一個。連續型則可以取某個範圍內的任意值——身高、氣溫、神經網路裡的某個權重。這個區分很要緊,因為它改變了我們描述其行為的方式,這正引出下一個想法:分布。

這裡和這條學習階梯的其餘部分接上了頭:每一個模型輸入,最好都被想成是來自某個隨機過程的一次抽樣,而每一個模型輸出同樣是個隨機變量。當你聽到說某個資料集是「從一個分布中抽出來的」,意思就是每一行都是現實世界不停擲的那枚極其複雜的骰子擲出的一次結果。

分布:「可能性」的形狀

[[probability-distribution|機率分布]]是一個隨機變量的完整配方:它告訴你,對每一個可能的取值,有多少機率落在那兒。對一枚公平的骰子,分布是平的——每一面分到 1/6。對一枚作弊的骰子,它可能把機率堆到 6 上。唯一鐵打的規則是:所有機率必須恰好加起來等於 1,因為*總有某件事*會發生。

對連續變量,我們畫的不是一根根柱子,而是一條光滑的曲線,這裡直覺需要一處溫和的糾正:曲線的*高度並不是機率*。機率藏在兩點之間曲線下方的面積裡。所以對連續變量來說,取到任何單一精確值(身高恰好是 170.000…… 公分)的機率實際上是零——我們只能問區間,比如「在 165 到 175 之間」。整條曲線下方的總面積,依舊是 1。

高斯分布:大自然最愛的那口鐘

有一種分布出現得太頻繁,頻繁到為自己掙得了一個專名:[[normal-distribution|常態分布]],也叫高斯分布或鐘形曲線。它就是你到處見過的那個對稱小山包——身高、測量誤差、考試分數。大多數取值擠在中央的峰附近,然後向兩側平滑而對稱地變稀。兩個數字就把它完全說清了:峰在哪兒,以及這口鐘有多寬。

為什麼它無處不在?一個叫中央極限定理的深刻結論說:當許多微小、互相獨立的隨機效應疊加起來時,它們的總和會趨向一個高斯分布——幾乎不管每個小效應原本長什麼樣。人的身高是許多基因和許多頓飯加在一起的結果;測量雜訊是許多細小抖動的累加。這種「許多小東西之和」的模式太常見了,於是鐘形曲線就成了天然的預設選項——這也正是為什麼那麼多機器學習方法都悄悄*假定*它們的雜訊是高斯的。

期望與變異數:概括一團雲的兩個數字

一整個分布帶在身上太沉了,於是我們把它熬成兩個概括數字。[[expectation-and-variance|期望]](也叫均值或期望值)是長程的平均:如果你把這個隨機過程跑上億次再取平均,最終會落定的那個值。它是把每一種結果按其發生的可能性加權所得——對一枚公平的骰子,就是 (1+2+3+4+5+6)/6 = 3.5。

第二個數是變異數:各種結果通常離那個平均值游蕩出多遠。變異數小,意味著結果緊緊偎在均值附近(可預測);變異數大,意味著它們把自己甩得到處都是(動盪不定)。由於變異數是用「距離的平方」搭起來的,單位很彆扭,我們通常對它開平方,得到標準差——它和資料處在同一種單位裡,也更容易在腦中描畫。兩個分布可以擁有完全相同的均值,感覺卻天差地別:一個是窄窄的尖峰,另一個是平攤一片。

這兩個概念在機器學習裡是承重牆。模型的期望誤差,正是訓練所要最小化的目標。著名的偏差—變異數權衡——模型過擬合或欠擬合的根由——名字就直接取自變異數。而你以後會遇到的隨機梯度下降之所以行得通,恰恰是因為:用一小批隨機樣本估出的斜率,哪怕任何單獨一批都帶著雜訊,它依然有著*正確的期望*。

從分布到學習:似然與信念的更新

現在是回報時刻。假設你手上有些資料,懷疑它們來自一個高斯分布,卻不知道它的均值和變異數。[[maximum-likelihood-estimation|最大似然估計]]把問題反了過來:在你能畫出的所有鐘形曲線裡,哪一條能讓你*實際看到的*這批資料顯得*最有可能*?你挑的,是讓你的資料最不令人意外的那個分布。這一個想法——選出最能解釋你所觀測之物的參數——正是一大批模型訓練背後的引擎。

# pick the parameters that make the observed data most likely
best = argmax over theta of  P(data | theta)

# Bayes' rule: turn it around to update a belief
P(theta | data)  =  P(data | theta) * P(theta) / P(data)
#   posterior     ~     likelihood   *  prior
從資料中學習的兩種方式:最大似然挑出唯一最佳的解釋;貝氏定理把先驗信念更新為後驗。

還有第二種、互補的視角。[[bayes-theorem|貝氏定理]]是一條在新證據到來時*更新*信念的規則:從一個先驗出發(你之前所相信的),按新資料與之吻合的程度去加權,最後得到一個後驗(你修正後的信念)。垃圾郵件過濾器做的正是這件事——它先從「垃圾郵件有多常見」起步,再隨著讀到你郵件裡的詞,把這個估計往上或往下推一推。它是「以恰到好處的幅度改變想法」的數學。

你現在還不必背下這些公式——那是更靠後幾關的活兒。眼下要緊的是這套世界觀:資料是從分布中抽樣而來,模型是對這些分布的猜測,而學習意味著調整這個猜測,讓已觀測到的資料變得盡可能不令人意外。把這一句話帶在身上往前走,機器學習那顆機率的心臟就會一直講得通。