L5.3 一個生成模型好不好,該用哪一個數字回答?
分數比較好,抽出的樣本就比較好嗎?
要怎麼替「這個模型有多符合資料」打一個分數?、當那個要加總的量算不出來,可以退到哪裡?、一個高維的機率,能不能拆成一串一維的機率? 三篇做的是同一件事:把「模型好不好」化約成一個數字——似然,或者它的一個下界。
Population cross-entropy 在適當條件下等於真實分布的 entropy 加 。所以 likelihood 有明確的統計意義;但我們看到的是有限資料上的估計,想要的也可能不只是這個期望。
想像看一份生成圖片的報告:平均分數很好,但每一百張仍有一張明顯不正常。另一個模型張張好看,卻只會畫同一種東西。我們到底在乎哪一種「好」? Theis、van den Oord 與 Bethge [1] 用反例提醒我們,不能直接從一項生成評估推到另一項。
一個模型的每維 log-likelihood 只比另一個低 ,
它抽出來的樣本卻有百分之一是純雜訊——
這兩個觀察,回答的是同一個問題嗎?
課堂提問Q1
先不要選指標。我們要求生成模型做到什麼? 列出幾個不同方向,再想想一個模型是否可能做好其中一項,卻漏掉另一項。
先想一想,再展開看整理後的答案
三件事。
- 保真度(fidelity):抽出來的東西要像真的——落在真實分布有質量的地方。
- 涵蓋度(coverage):真實分布的每一塊都要抽得到,不能只會生一種。
- 訓練資料記憶的檢查:模型是否主要在重放訓練樣本?連續圖片的新穎性通常值得檢查;但離散資料中,真實新抽樣本來就可能和既有資料相同,不能一律禁止重複。
三個例子,分別暴露不同問題。
- 失去保真度:把一個完美的模型與一點點純雜訊混起來,。涵蓋度完美(真模型的部分原封不動),新穎性完美(雜訊當然不是訓練資料),但每抽一百次就有一張是垃圾。第二節量這個。
- 失去涵蓋度:只學會真實分布的一個 mode。保真度完美(生出來的每一張都在高密度區),新穎性完美(不是背的),但整個分布錯了。第三節量這個。
- 失去新穎性:把訓練集存起來,抽樣時隨機吐一筆。保真度滿分(生出來的每一筆都是真的資料),涵蓋度在訓練集上滿分,但它什麼都沒學到。第四節量這個。
這些例子不是「任何 scalar metric 都不可能有用」的證明。它們說的是:常用的分數不一定能分辨失敗的來源,所以還要問每個分數量了什麼、漏了什麼。Sajjadi 等人 [2] 將 precision 與 recall 分開,也是為了區分樣本品質與分布涵蓋。
先猜一下似然的答案。 似然算的是「模型在真實資料點上給多少密度」。所以:
- 模型漏掉真實分布的一塊 → 那一塊的資料點密度很低 → 很大 → 抓得到。
- 模型在真實資料以外的地方亂放密度 → 真實資料點上的密度只被正規化稀釋一點點 → 幾乎抓不到。
似然是不對稱的,而第二、三節就是把這個不對稱量出來。
似然對「生出垃圾」幾乎是盲的
把第一個反例做成實測。真模型是 維的 ,壞模型是
取 : 的樣本來自原分布, 來自 covariance 大一百倍、standard deviation 大十倍的分布。、兩萬個測試樣本:
真模型 每維 log-likelihood = -1.418756 nats/dim
混雜訊 每維 log-likelihood = -1.418856 nats/dim
差距 = 0.000101 nats/dim (整份 100 維總共 0.0101 nats)
理論上界 = -ln(0.99)/d = 0.000101 nats/dim
差距約 nats/dim。能否量到它,取決於測試樣本數、paired estimation 與模型波動,不能只由數值小就說一定量不到。重點是:這樣的平均差距,可能不符合我們對異常樣本比例的容忍程度。
而同一個模型抽出來的樣本:
真模型的樣本 範數 ≈ 10 (= √d)
混雜訊的樣本 99% 的範數 ≈ 10,1% 的範數 ≈ 100
每一百張圖裡有一張是純雜訊,而那件事在似然上值 。
這不是巧合,它有一個乾淨的界。因為 處處成立,
期望對真實分布 p 取,因此左邊是 。實測約等於這個上界;只有異常 component 在真實樣本附近的 density 可忽略時,才會幾乎取到等號。
在 維裡混進 比例的垃圾,每維的 log-likelihood 最多只掉 ;維度越高,這個代價越接近零。
維度增加時,每維平均把這個固定的 KL 差距攤得更小;完整樣本的上界仍是 。這是此種污染的尺度問題,不是所有 likelihood 差異都會隨維度消失。
注意反過來的方向會被抓到,而且抓得很兇
上面的界之所以成立,是因為加東西不會讓真實資料點的密度掉太多——最多被正規化稀釋 倍。
拿掉東西就完全不同。 如果模型在某一塊真實資料存在的地方把密度壓到 ,那些點的 直接變成 ,沒有上界。 時是 ,也就是 要怎麼替「這個模型有多符合資料」打一個分數? 第一節那個「宣告不可能的事發生了」。
所以似然的不對稱可以一句話講完:它對「多生了不該生的」幾乎免疫,對「漏掉了該生的」極度敏感。 而這剛好是很多人直覺的反面——大家看樣本,樣本只會告訴你前者。
圖說: 多生垃圾造成的每維似然懲罰上界隨 1/d 衰減;高維下,肉眼明顯的災難可能幾乎量不到。
反過來:樣本漂亮,分布全錯
第二個反例。同樣的一維雙峰資料(兩個 mode 在 ),三個模型:
- 誠實模型:真的學會了整個分布。
- 只學到一個 mode:——每一個樣本都落在真實資料的高密度區,而且比真實資料更集中。
- (第三個模型留到下一節。)
只學一個 mode 誠實模型
到最近訓練點的距離 0.0078 0.0157 ← 「看起來更真」
W1(模型, 測試集) 1.6929 0.0430 ← 分布整個錯
覆蓋率(測試點 0.3 內有樣本) 0.410 1.000
測試資料的 log-likelihood -43.325 -1.700
第一列是陷阱。 用「樣本離真實資料多近」來評分,這個壞模型贏了——它的樣本比誠實模型的樣本更接近訓練資料,因為它把所有質量堆在一個高密度的小區域裡。任何只看「生出來的東西像不像真的」的評估都會給它高分。
後三列把它抓出來,而且三個都抓得到。特別是 log-likelihood 從 掉到 ——這是第二節那個 Remark 說的「拿掉東西沒有上界」:另一個 mode 附近的測試資料在這個模型下密度幾乎是零,每一個那樣的點都貢獻一個巨大的 。
所以似然和樣本品質的關係是這樣的:
| 失敗模式 | 看樣本 | 看似然 |
|---|---|---|
| 多生了不該生的( 垃圾) | 看得見 | 幾乎看不見() |
| 漏掉了該生的(只學一個 mode) | 看不見(樣本更漂亮) | 看得非常清楚() |
看樣本與看似然不是同一件事的兩種做法,它們各自對另一種失敗瞎掉——所以兩個都要看。
展開細節這也解釋了「調低取樣溫度會讓樣本變好看」
若正規化常數有限,把取樣分布改成與 成正比、,會提高高密度區的相對權重。但密度高不等於語意品質好,因此保真度是否改善、覆蓋度如何改變,還要實際評估。
這個例子說明 sampler 也會改變結果:只比較某一項樣本品質,可能忽略另一側的覆蓋損失。因此取樣的溫度、guidance 與 top- 等設定也要報告,不能把取樣設定不同的結果都當成模型本身的差別。
要同時看到兩面,做法是掃一條曲線而不是報一個點:把溫度從低掃到高,同時記錄保真度與涵蓋度兩個量,得到一條取捨曲線。兩個模型要比較,比的是整條曲線——一個模型的曲線如果整條在另一個外側,才是真的比較好;曲線交叉則表示它們各有擅長的操作點。
第三個失敗:它其實什麼都沒學
前兩節的兩個數字(樣本品質、似然)湊起來,已經擋掉了兩種失敗。但還有一種,而且它兩個都躲得過。
把訓練集存起來,抽樣時隨機吐一筆。 保真度滿分——生出來的每一筆都是真的資料。似然?如果用一個核密度估計去讀,它在訓練資料附近的密度極高。
實測。 的訓練集,比較三個東西:
W1(model, train) W1(model, test)
背訓練集的模型 0.0172 0.1249
誠實模型 0.0918 0.0430
這裡的 W1 是從有限生成樣本與資料樣本估出的距離,所以重放模型對 train 的數值仍可能不是零;若直接比較它的 empirical law 與同一份 train empirical law,距離才恰為零。表中的排序提醒我們,要另外使用 held-out data,而不只看模型多貼近訓練集。
對 train 的距離較大本身不是「學對了」的證據。這個已知真實分布的 toy example 才讓我們能確認:train 只是一次抽樣,完全貼住它不等於貼住 population。
但光換成測試集還不夠。 一個背了訓練集又加一點點抖動的模型,在測試集上的分布距離可以很不錯,卻仍然是在重放別人的資料。要抓它需要第三個數字:
平均「到最近訓練點的距離」
背訓練集的模型 0.00000
誠實模型 0.01568
真實的測試資料 0.01603 ← 參考點
最後一列是這張表的關鍵。 「樣本離訓練資料多近」這個量沒有一個理想值是零——零表示在背。它的理想值是真實的新資料離訓練資料多近,也就是 。誠實模型的 幾乎正中那個參考點。
最近鄰距離要和 held-out data 的同一個量比較。明顯偏小是檢查記憶或 mode concentration 的線索,不是單獨定罪的證據。
Carlini 等人 [3] 在 diffusion models 中展示過 training-data extraction,提醒我們除了分布品質,也要依應用檢查訓練資料的記憶與暴露風險。最近鄰只是其中一個工具,不是完整的隱私保證。
三種失敗,三組數字
互動 demo:摻 1% 垃圾只多 0.0066 nat 卻毀掉樣本;塌成單一模式樣本好看卻多出 43.9 nats。
一套可以照做的評估
把三節合成一份清單。
- 按用途安排互補檢查。 有 held-out 分布評估、生成樣本的 fidelity/coverage,以及與 train 最近鄰的比較;模型能算 likelihood 時,再報精確 NLL 或明確標示的下界。不是每種模型都能提供同一組數字。
- 比較 likelihood 要使用相同的觀測空間與慣例。 精確 likelihood 可以跨模型族比較;ELBO 則有不同的缺口。連續 density 的單位、離散化與 dequantization 也要一致,不能混在一起排名。
- 報取樣的超參數。 溫度、guidance 強度、top- 都會沿著保真度/涵蓋度的取捨曲線移動,所以「哪個模型比較好」在沒有指定操作點的情況下是沒有意義的問題。可以的話報整條曲線。
- 報種子數與抖動。 同一個實驗跑三次結果都不同,該報哪一個? 的規則在這裡不變,而且更重要——分布距離這類指標的估計本身就有抖動(它們是從有限樣本算出來的)。
- 隨機看樣本,不只挑展示圖。 人的檢查也有盲點:若異常比例是 ,只看二十張完全沒遇到異常的機率仍有 。因此要說明抽樣方式與數量,不能把看過幾張好圖當成保證。
這一切依賴什麼。
一,held-out 資料真的沒被碰過。生成模型的訓練資料常常來自大規模的爬取,而測試集可能就在裡面——那時候所有的數字都在量記憶力。
二,特徵空間的選擇。FID 對 feature distributions 用均值與 covariance 做 Gaussian 近似,再計算相應的平方 W2;它不是原始完整分布的 W2。Feature extractor 沒保留的差異,這個分數也可能看不到。
三,「好」依賴用途。資料增強要確認生成資料能改善下游任務;創作工具可能還關心提示符合度與多樣性。哪些缺陷不能接受,應先由任務決定,再安排能偵測它們的評估。
檢查理解
參考文獻
- Theis, L., van den Oord, A. & Bethge, M. A note on the evaluation of generative models. ICLR 2016.(本篇第二節那個混雜訊的論證與 的界,以及似然與樣本品質可以任意脫鉤的建構。)
- Sajjadi, M., Bachem, O., Lucic, M., Bousquet, O. & Gelly, S. Assessing Generative Models via Precision and Recall. NeurIPS 2018.(把「保真度」與「涵蓋度」拆成兩個數字,並說明單一分數為何無法區分兩種失敗。)
- Carlini, N. et al. Extracting Training Data from Diffusion Models. USENIX Security 2023.(第四節那個新穎性檢查在真實模型上的後果。)