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

用機率來思考

到目前為止你遇到的大多數模型,都只會自信地給你一個答案。本文換一個視角:把學習看作對不確定性的推理,認識把模型與資料連在一起的「似然」,並理解生成式模型與判別式模型為何把世界一分為二。

為什麼非要給模型裝上「不確定性」?

在這道階梯上一路走來,模型大多只是一個函數:吃進一個輸入,吐出一個答案——一個類別、一個數字、下一個詞元。這套辦法好用得驚人,卻也藏起了一些東西。讓一個分類器去標註一張模糊的照片,它照樣會用對待清晰照片時那股神氣,宣布「貓,0.97」。那個數字看起來像是信心,可它往往只是一個被歸一化的分數,而不是關於答案究竟有多可能的誠實陳述。

機率視角從一個更謙卑的前提出發:世界是嘈雜的,你的資料是殘缺的,你所持的任何信念都該附帶一份疑慮。它不去預測單一的值,而是預測一個機率分布——一整片可能性的地貌,越可信的地方堆起越多的權重。你要預測的那個量被當作一個隨機變數:一個你對其取值心存不確定的東西,而不是一個你恰好還不知道的既定事實。

似然:一個模型把資料解釋得有多好?

整個領域就圍著這道樞紐轉。一個機率模型,把它的旋鈕擰到某一組具體的參數上,便可以被問一個簡單的問題:在你這套設定下,我實際觀測到的資料有多可能?這個數字就是似然。把一枚未知的硬幣拋十次,看到七次正面——一個聲稱這枚硬幣正面機率為 70% 的模型,會讓這個結果相當可能;而一個聲稱只有 10% 的模型,則會讓它近乎荒謬。資料沒有變;變的是每個候選模型把它解釋得有多好。

於是一種自然的學習方式,就是去搜尋那組讓你觀測到的資料盡可能可能的參數。這就是最大似然估計,它悄悄地是一大片機器學習背後的引擎。你在線性迴歸裡最小化的那個著名的均方誤差,恰恰就是在高斯雜訊假設下的負對數似然;分類器的交叉熵損失,則是真實標籤的負對數似然。最小化一個損失與最大化一個似然,一次又一次地,只是同一件事從兩個角度看到的樣子。

data:        H H T H H T H H H T   (7 heads / 10)

model p=0.7  likelihood  HIGH   <- explains the data well
model p=0.5  likelihood  medium
model p=0.1  likelihood  ~0     <- this data would be a shock

learning = turn the knob p to push likelihood as high as it goes
用最大似然來學習:把資料固定住,去搜尋那讓它最不令人意外的參數。

造模型的兩條路:生成式與判別式

一旦你開始用分布來思考,一個岔路口便出現了。假設你想根據一張照片把貓和狗區分開。一個判別式模型只學習那條邊界——給定圖像後標籤的條件機率,P(標籤 | 圖像)。它從不操心去理解貓長什麼樣;它只是把輸入空間劃分成一塊塊區域。邏輯迴歸和大多數神經網路分類器都住在這裡。當你要的只是答案時,它們通常是最鋒利的工具。

一個生成式模型則更有野心。它試圖學習資料本身是怎麼被產生出來的——聯合分布 P(圖像, 標籤),或者等價地,一套生成出像樣的貓圖像和狗圖像的配方。樸素貝氏就是經典的小例子:它對每個類別內部特徵如何出現建模,再用貝氏定理把它反轉成一個預測。正因為它學會了生成,它也能憑空造出新樣本、標記出一個既不像這類又不像那類的輸入,並在標籤稀缺時撐住場面。

兩者並無簡單的孰優孰劣——這是一個真正的權衡,而非一道高下之分。對完整的聯合分布建模更難,對你的資料要求也更高,所以當標籤充裕時,判別式模型往往在純粹的準確率上勝出。但生成式的框架,正是近來這一大波系統的動力源:那些從雜訊裡變出照片的生成對抗網路與擴散圖像模型,本質上都是 P(資料) 的模型。而一個大語言模型則是地道的生成式——它學習下一個詞元的分布,再從中採樣。

從似然到信念:通往貝氏的門

最大似然有個盲點:它只聽資料,自己不帶半點主見。拋三次硬幣,三次都是正面,純粹的最大似然就會宣布這枚硬幣正面機率 100%——從這麼小的樣本裡得出的離譜論斷,正是你早已學會提防的過擬合的近親。常識告訴你,你本該一進門就大致相信這硬幣是公平的,再讓這三次拋擲只把那份信念輕輕撥動一點。

這正是貝氏推斷要把它形式化的那一步。你從一個先驗出發——看到資料之前你所持的信念——把它乘上資料的似然,結果便得到一個後驗:你更新過的信念。先驗、後驗與似然這三件套,是接下來好幾篇指南共用的語法。注意,先驗所扮演的角色,正與你已經在用的那些模型裡的正則化相同:它溫和地把極端的結論拉回到某個合理的地方。

而它的回報,恰恰就是我們一開始想要的那份誠實。一個貝氏模型不返回一個數字;它返回一整個後驗分布,於是它能說的就不只是「大約 0.6」,而是「0.6,但上下浮動很大——我才看了三次拋擲而已」。那個寬度,正是貨真價實的不確定性量化:一個自信地犯錯的模型,與一個知道自己在猜的模型,二者之別就在於此。

誠實的邊界:機率能買到什麼、買不到什麼

把模型吐出的每一個機率都讀作一條經過校準的真理,是很誘人的,但要當心。現代深度網路的 softmax 輸出,只是在形狀上像個機率分布——這些模型出了名地過度自信,對著它從沒見過類似樣子的輸入也照樣歡歡喜喜地打出 0.99。一個接近 1 的數字意味著模型下了很重的注,而不是說它每錯一百次裡只錯一次。只有當一個模型經過了校準的檢驗,它的機率才值得信賴——這正是評估那一階梯會回頭細談的話題。

還有第二個更微妙的陷阱。一個機率永遠是以模型的假設為條件的,而一個模型只能在它被造出來能夠想像的那些方面感到不確定。給它念一句它從未訓練過的語言裡的話,它不會說「我毫無頭緒」——它會自信地產出胡言亂語,因為這個問題落在了它的分布所覆蓋的那個世界之外。這正是為什麼語言模型裡的幻覺不是一個能打補丁修掉的缺陷:一個生成式模型採樣的是流暢、看起來很可能的文字,無論那文字是真是假——因為「真」從一開始就不在它所建模的東西之內。