CS236 第 15 講 · 生成模型的評估
Stanford CS236 · Fall 2023 · Lecture 15

生成模型的評估:likelihood、樣本品質與表示

分類器的評估很簡單:在測試集上算準確率。生成模型卻沒有唯一的「任務」,所以沒有唯一的指標。如果在乎密度估計,就看 test log-likelihood,它等於壓縮率;模型沒有 likelihood 時,只能用 KDE 或 importance sampling 去近似,而這在高維很不可靠。如果在乎樣本品質,金標準是人工評估,但常用的是自動指標 Inception Score、FID、KID,各有盲點。如果在乎表示,就看分群、重建、disentanglement;對語言模型,則是用 prompting 在大量任務上測試。這講沒有新模型,但它決定了你怎麼說「模型 A 比模型 B 好」。

讀完這頁你應該能夠

  1. 說明「最大化 likelihood = 最小化平均編碼長度」,並在 bits/dim、perplexity、bits per character 之間換算。
  2. 說明 likelihood 和樣本品質可以幾乎互不相關(Theis et al. 的混合模型論證)。
  3. 寫出 kernel density estimator,說明 bandwidth 的取捨、怎麼用交叉驗證選,以及它為什麼在高維失靈。
  4. 說明 likelihood weighting 為什麼變異大、annealed importance sampling 怎麼改善,以及「對 \(p(\mathbf x)\) 不偏、對 \(\log p(\mathbf x)\) 有偏」的意思。
  5. 寫出 Inception Score、FID、KID 的定義,各舉一個它們看不出來的失敗模式。
  6. 說明評估潛在表示的三種方式(分群、壓縮、disentanglement),以及用 prompting 評估語言模型的想法。

前置知識檢查

  • 第 4 講:maximum likelihood 等於最小化 \(D_{\mathrm{KL}}(p_{\text{data}}\Vert p_\theta)\);熵、cross-entropy。
  • 第 5–6 講:潛在變數模型、ELBO、importance sampling。
  • 第 9–10 講:GAN 只能取樣、mode collapse、two-sample test、MMD、Wasserstein 距離。

投影片轉成圖片後逐頁看過。標「出處」的補充來自 Theis, van den Oord & Bethge (2016)、Salimans et al. (2016)、Heusel et al. (2017)、Bińkowski et al. (2018)、Kynkäänniemi et al. (2019)、Locatello et al. (2019) 的原文。

01先問:你在乎什麼任務?(投影片 2–4)

回顧到目前為止的拼圖(投影片 2–3):模型家族有直接給密度的(autoregressive、flow、VAE、EBM)、只給取樣程序的(GAN)、給 score 的(score-based model);訓練目標有 KL(MLE)、f-divergence / Wasserstein(GAN)、Fisher divergence(score matching)、NCE。這麼多選擇,要怎麼挑?最終要回答「模型 A 比模型 B 好嗎?」,這需要評估。00:38

判別式模型的評估很清楚:定義一個 loss(top-1 準確率等),在沒看過的測試資料上比較。生成模型的難處在於:任務是什麼並不清楚。05:53

你在乎的事對應的評估方式本頁位置
密度估計、壓縮test log-likelihood、bits/dim、perplexity§2–4
取樣、生成人工評估(HYPE)、Inception Score、FID、KID§5–7
潛在表示學習下游任務、分群、重建、disentanglement§8
很多任務 / 自訂下游任務半監督學習、影像翻譯、compressed sensing;LLM 的 few-shot / zero-shot prompting§9

02密度估計與壓縮(投影片 5–7)

如果在乎密度估計,likelihood 是好的指標:把資料分成 train / validation / test,在 train 上訓練、在 validation 上調超參數,最後在 test 上算平均 log-likelihood \(\mathbb E_{p_{\text{data}}}[\log p_\theta(\mathbf x)]\),評估泛化。08:59

Likelihood 就是壓縮

機率模型可以變成一個壓縮方案:給資料點 \(\mathbf x\) 一個長度 \(\lceil\log_2\frac1{p_\theta(\mathbf x)}\rceil\) 的碼字(Shannon coding)。常見的資料給短碼,罕見的給長碼,就像 Morse code:E = •、A = •−,而罕見的 Q = −−•−。平均碼長是 10:32

$$\mathbb E_{\mathbf x\sim p_{\text{data}}}\Big[\Big\lceil\log\frac1{p_\theta(\mathbf x)}\Big\rceil\Big]\approx\mathbb E_{p_{\text{data}}}\Big[\log\frac1{p_\theta(\mathbf x)}\Big] = -\mathbb E_{p_{\text{data}}}[\log p_\theta(\mathbf x)]$$

所以最大化 likelihood 就是最小化平均碼長;比較 likelihood 就是比較誰壓縮得好。Shannon / Huffman code 雖然最佳,但實際上建不出來;arithmetic coding 能把好的 likelihood 變成實際可用的壓縮器。語言模型的 perplexity 本質上是同一個量的縮放版:\(2^{-\frac1D\mathbb E_{p_{\text{data}}}[\log_2 p_\theta(\mathbf x)]}\),\(\mathbf x\in\mathbb R^D\)。12:37

單位換算:nats、bits/dim、perplexity、bits per character
  • nats vs bits:用自然對數得到 nats,除以 \(\ln 2\approx0.693\) 得到 bits。
  • bits/dim(影像常用):\(-\log_2 p_\theta(\mathbf x)/D\)。CIFAR-10 的 \(D = 32\times32\times3 = 3072\),所以 3.0 bits/dim 等於整張圖 \(3.0\times3072\times\ln2\approx6388\) nats。
  • perplexity(語言模型):\(2^{\text{bits per token}}\),可以理解成「模型平均在幾個選項之間猶豫」。
  • bits per character:每個字元的平均碼長。若對 27 個字元(26 個字母 + 空白)一無所知,需要 \(\log_2 27\approx4.75\) bits。
  • 連續 vs 離散:影像像素其實是 0–255 的整數,若直接用連續密度建模,可以把機率質量全部擠到整數點上,得到任意高的 likelihood。標準做法是加上 \([0,1)\) 的均勻雜訊(dequantization):連續模型在加雜訊資料上的 log-likelihood 是離散模型 log-likelihood 的下界,所以數字仍然有「壓縮率」的意義。

出處:Theis, van den Oord & Bethge (2016) §3.1(dequantization 的 Jensen 不等式論證)。

為什麼要在乎壓縮?

  • 要壓縮得好,就必須找出資料的規律(冗餘)。物理定律就是一種壓縮:知道 \(F = ma\) 和力 \(F\),加速度就不用另外存。14:38
  • Hutter Prize:獎金 50 萬(歐元),獎勵壓縮 Wikipedia 前 1GB 的人,理念是「壓縮得好和智慧密切相關」,把好的壓縮器當作通往 AGI 的一條路。15:12
  • Shannon(1951)做過實驗,讓人預測英文的下一個字元:人類大約是 1.2–1.3 bits per character(遠低於 4.75,因為人有大量上下文知識)。投影片說 2019 年的語言模型已達到 0.94 bits per character,比人還好。16:44
但不是所有 bits 都一樣重要。編碼「生或死」的 1 bit,和編碼「明天下不下雨」的 1 bit,在 KL divergence 看來一樣重。影像也是:某個像素的顏色稍微不同不太要緊,但影像的類別很要緊;對 likelihood 來說都一樣。18:32
Likelihood 和樣本品質可以幾乎無關(Theis et al. 2016)

好 likelihood、爛樣本:設 \(p\) 是一個很好的模型,\(q\) 是很爛的模型(例如白雜訊)。混合模型 \(0.01p + 0.99q\) 有 99% 的樣本是雜訊,但

$$\log\big[0.01p(\mathbf x) + 0.99q(\mathbf x)\big]\ge\log\big[0.01p(\mathbf x)\big] = \log p(\mathbf x) - \log100$$

\(\log100\approx4.61\) nats 是常數,而 \(\log p(\mathbf x)\) 隨維度成長。換成 CIFAR-10 的 bits/dim,只差 \(4.61/(3072\ln2)\approx0.0022\) bits/dim,比不同模型之間的差距小得多。

爛 likelihood、好樣本:一個「查表」模型 \(q(\mathbf x) = \frac1N\sum_n\mathcal N(\mathbf x;\mathbf x_n,\varepsilon^2I)\),\(\mathbf x_n\) 是訓練影像、\(\varepsilon\) 小到看不出雜訊。它的樣本完美,但在測試資料上 log-likelihood 極差。

兩者兼得也不代表什麼:把上面的 \(q\) 換成查表模型,混合模型 99% 的時間產生以假亂真的圖,log-likelihood 也只差 4.61 nats。結論:log-likelihood 和樣本的視覺品質大致是互相獨立的,要看你在乎哪一個。

出處:Theis, van den Oord & Bethge (2016), "A note on the evaluation of generative models", §3.2 "Samples and log-likelihood";「好 likelihood、爛樣本」的論證引自 van den Oord 等人更早的工作。

另一個限制:很多模型根本沒有可算的 likelihood。VAE 至少能比 ELBO(likelihood 的下界);GAN、EBM 呢?只有樣本時要怎麼估計 likelihood?一般而言,只靠樣本無法得到機率密度的不偏估計,只能近似。20:29

課堂問答 · 21:02GAN 不是本來就不在乎 likelihood 嗎?是的,你可能不在乎壓縮。但如果真的想比較 GAN 和其他模型的壓縮能力,你連比都沒辦法比。之後會看到,如果在乎的是樣本品質,有別的指標能比較 GAN 和 autoregressive model。21:02

03只有樣本時:kernel density estimation(投影片 8–10)

假設模型 \(p_\theta\) 只能取樣。抽了 6 個樣本:\(-2.1,\ -1.3,\ -0.4,\ 1.9,\ 5.1,\ 6.2\)。\(p_\theta(-0.5)\) 是多少?23:10

  1. 答案 1:\(-0.5\notin S\),所以 \(p_\theta(-0.5) = 0\)。不好:只有 6 個樣本,沒抽到可能只是運氣。
  2. 答案 2:直方圖。bin 寬 2,一個樣本貢獻的高度是 \(1/(6\times2) = 1/12\),讓總面積是 1。\(-0.5\) 落在 \([-2,0)\),這個 bin 有 2 個點,所以 \(p(-0.5) = 1/6\);\(p(-1.99) = 1/6\);但跨過邊界,\(p(-2.01) = 1/12\)。邊界處的跳躍很不自然。24:12
  3. 答案 3:kernel density estimate(KDE),把硬邊界變平滑:26:14 $$\hat p(\mathbf x) = \frac1n\sum_{\mathbf x^{(i)}\in S}\frac1\sigma K\Big(\frac{\mathbf x - \mathbf x^{(i)}}\sigma\Big)$$ (投影片省略了 \(1/\sigma\),一維時要有它,總面積才是 1;\(d\) 維時是 \(1/\sigma^d\)。)\(\sigma\) 是 bandwidth,\(K\) 是 kernel,例如 Gaussian kernel \(K(u) = \frac1{\sqrt{2\pi}}e^{-u^2/2}\):在每個樣本上放一個小高斯,再全部加起來。離越多樣本越近,密度越高,而且「近」是平滑的。

投影片 9–10 的圖:(9) 左邊是 bin 寬 2 的直方圖;右邊是 Gaussian KDE,6 個紅色虛線的小高斯和它們加總後的藍色平滑曲線(左邊三個點的峰較高,右邊兩點形成第二個峰)。(10) 左邊是各種 kernel 的形狀:Uniform(方形)、Triangle、Epanechnikov、Quartic、Triweight、Gaussian、Cosine;右邊是同一組資料(x 軸上的藍色短線)在不同 bandwidth 下的 KDE:紅色(σ 太小)鋸齒狀、綠色(σ 太大)一個扁平的大鼓包、黑色(最佳)接近灰色的真實密度。29:23

  • Kernel 是非負函數,滿足歸一化 \(\int K(u)du = 1\)(保證 KDE 也歸一化)和對稱 \(K(u) = K(-u)\)。直覺上是兩點之間的相似度,差距接近 0 時最大。方形 kernel 就回到類似直方圖的「在範圍內就算相似」。28:52
  • Bandwidth 控制平滑度:太小 undersmoothed,太大 oversmoothed;用交叉驗證選:留出一些樣本,看哪個 σ 最能「預測」它們。30:27
  • 缺點:高維非常不可靠。維度災難:要覆蓋整個空間需要的樣本數隨維度爆炸,用在影像上效果很差。32:02

Demo A直方圖、KDE 與 bandwidth

預設是投影片的 6 個樣本。切到「200 個樣本」時,樣本來自一個已知的真實密度(灰色,\(0.6\,\mathcal N(0,1) + 0.4\,\mathcal N(4,0.5^2)\)),可以和真實答案比較。下方曲線是 leave-one-out(留一)交叉驗證:每次拿掉一個樣本,用其他樣本的 KDE 評估它的 log-density,再取平均。

KDE直方圖(bin 寬 2)真實密度每個樣本的 kernel ÷ n
留一交叉驗證的平均 log-density500 個新測試點的平均 log-density(只在 200 樣本模式)
  • 6 個點時,直方圖在 \(-0.5\)、\(-1.99\)、\(-2.01\) 的值正是投影片的 1/6、1/6、1/12;KDE 則平滑地從一邊過渡到另一邊。
  • 交叉驗證在 6 個點時偏好很寬的 σ(約 2):樣本太少,只能說「大概在 −2 到 6 之間」。200 個樣本時最佳 σ 縮到約 0.3(留一交叉驗證選 0.29,用 500 個新測試點選 0.27),曲線能分出兩個峰,平均 log-density −1.82,很接近真實密度的 −1.81。
  • 方形 kernel 的 σ 太小時,某些留出的點周圍沒有其他樣本,密度是 0,log-density 變成 \(-\infty\):這就是「答案 1」的問題換個形式出現。

Demo B維度一高,KDE 就失靈

真實分佈是 \(d\) 維標準高斯 \(\mathcal N(0,I_d)\),所以真正的平均 log-likelihood 已知。用 \(n\) 個樣本做 Gaussian KDE,在 100 個測試點上估計平均 log-likelihood。σ 直接用測試點挑最好的(作弊,給 KDE 最有利的條件)。圖中畫的是每一維的誤差(真實值 − KDE 估計,nats/dim)。

n = 100n = 1,000n = 5,000

即使是最簡單的高斯、即使用最佳 σ,每一維的誤差也隨維度增加,而且樣本數從 100 增加到 5,000 只改善一點點。實測 100 維、5,000 個樣本時,總共低估約 18 nats(每一維約 0.18);影像有幾千維。Theis et al. (2016) 用 6×6 的 CIFAR-10 小圖塊做了同樣的實驗:就算用非常多的樣本,KDE(他們稱為 Parzen window)的估計仍然離真正的 log-likelihood 很遠。更糟的是它會排錯名次:在 MNIST 上,用 Parzen 估計,真實分佈的樣本得 243 nats,而簡單的 k-means 模型得 313 nats,「贏過」真實分佈。

出處:Theis, van den Oord & Bethge (2016) §3.5 "Evaluation based on Parzen window estimates" 與該節的圖表。

04潛在變數模型:importance sampling(投影片 11)

潛在變數模型的 likelihood 原則上可以把 \(\mathbf z\) 積分掉:32:35

$$p(\mathbf x) = \mathbb E_{p(\mathbf z)}[p(\mathbf x\mid\mathbf z)]\approx\frac1K\sum_{k=1}^Kp(\mathbf x\mid\mathbf z^{(k)}),\quad\mathbf z^{(k)}\sim p(\mathbf z)$$

這叫 likelihood weighting。如果 prior \(p(\mathbf z)\) 和 posterior \(p(\mathbf z\mid\mathbf x)\) 差很多,幾乎所有 \(\mathbf z^{(k)}\) 都落在 \(p(\mathbf x\mid\mathbf z)\approx0\) 的地方,估計的變異非常大。

Annealed importance sampling(AIS):建一串中間分佈,從 \(p(\mathbf z)\) 逐漸內插到未歸一化的後驗 \(p(\mathbf x\mid\mathbf z)p(\mathbf z)\)。它是估計任意兩個未歸一化分佈的歸一化常數比 \(Z_2/Z_1\) 的通用方法;這裡第一個分佈是 \(p(\mathbf z)\)(\(Z_1 = 1\)),第二個是 \(p(\mathbf x\mid\mathbf z)p(\mathbf z)\)(\(Z_2 = \int p(\mathbf x,\mathbf z)d\mathbf z = p(\mathbf x)\))。老師在課堂上跳過細節,只說如果專題要算 VAE 的 likelihood,可以用它(例如 TensorFlow Probability 的 tfp.mcmc.sample_annealed_importance_chain)。33:27

AIS 的步驟,以及「對 likelihood 不偏、對 log-likelihood 有偏」

令 \(f_\beta(\mathbf z) = p(\mathbf z)\,p(\mathbf x\mid\mathbf z)^\beta\),\(0 = \beta_0<\beta_1<\cdots<\beta_T = 1\)。對每條鏈:

  1. \(\mathbf z_0\sim p(\mathbf z)\),\(\log w = 0\)。
  2. 對 \(t = 1,\dots,T\):\(\log w\mathrel{+}= (\beta_t - \beta_{t-1})\log p(\mathbf x\mid\mathbf z_{t-1})\);然後用一個以 \(f_{\beta_t}\) 為目標的 MCMC(例如 Metropolis–Hastings,第 11 講)把 \(\mathbf z_{t-1}\) 移到 \(\mathbf z_t\)。
  3. \(\hat p(\mathbf x) = \frac1K\sum_kw^{(k)}\)。

每一步只要相鄰的兩個分佈很接近,權重就不會劇烈變動;\(T = 1\) 時就退化成 likelihood weighting。

偏誤:\(\mathbb E[\hat p(\mathbf x)] = p(\mathbf x)\)(不偏),但 \(\log\) 是凹函數,由 Jensen 不等式 \(\mathbb E[\log\hat p(\mathbf x)]\le\log\mathbb E[\hat p(\mathbf x)] = \log p(\mathbf x)\):平均而言低估 log-likelihood,變異越大低估越多。所以 AIS 給的是隨機的下界,用來比較模型時會偏向保守。Wu et al. (2017) 用 AIS 首次估計了 GAN(加上高斯觀測雜訊後)的 log-likelihood。

出處:Neal (2001), "Annealed importance sampling";Wu, Burda, Salakhutdinov & Grosse (2017), arXiv 1611.04273。

Demo CLikelihood weighting vs annealed importance sampling

一個可以精確算的潛在變數模型:\(z\sim\mathcal N(0,1)\)、\(x\mid z\sim\mathcal N(z,s^2)\),所以 \(p(x) = \mathcal N(0,1+s^2)\)。\(s\) 越小、\(x\) 離 0 越遠,posterior 越窄、越偏離 prior。每種方法重複估計 200 次,看 \(\log\hat p(x)\) 的分佈。AIS 用 \(K\) 條鏈、\(T\) 個溫度(\(\beta_t = (t/T)^4\),每個溫度 3 步 MH);likelihood weighting 用 \(K\times T\) 個樣本,讓兩者用到的 \(p(x\mid z)\) 評估次數相近(AIS 其實還多了 MH 的計算)。

Likelihood weightingAIS真正的 log p(x)

預設設定(\(x = 3\)、\(s = 0.05\)、10 × 100)在瀏覽器中實測:真值 −5.41;likelihood weighting 平均 −8.5、標準差 7.4,常常低估好幾個 nats;AIS 平均 −5.50、標準差 0.46。兩者都偏低(Jensen),但 AIS 的變異和偏誤都小得多。把 \(x\) 拉回 0 附近,prior 和 posterior 重疊多了,兩者差不多。

05樣本品質:人工評估(投影片 12–14)

很多時候我們不在乎 likelihood,只想知道哪個模型的樣本比較好。最好的方式是請人來比較,人工評估(例如 Mechanical Turk)是金標準。34:10

HYPE(Human eYe Perceptual Evaluation,Zhou et al. 2019,Stanford HCI)以心理學文獻為基礎,提出兩個指標:35:48

  • HYPEtime:人們需要多少時間才能正確分辨真假。只看一眼的時間太短,可能看不出手畫錯了;分辨所需時間越長,樣本越好。
  • HYPE∞:給無限時間時,騙過人的樣本比例。越高越好。

投影片 13 的圖:上面是決定 HYPEtime 的過程:縱軸是顯示時間(毫秒),從 500 ms 開始,每答對(綠點)就縮短,答錯(紅叉)就延長;大約第 6 步後在 300 ms 附近來回震盪,那就是這個模型的 HYPEtime。下面是 StyleGAN 生成的人臉,依 HYPE∞ 從 10%(最左,最容易被看穿)排到 50%(最右,騙過一半的人)。37:23

人工評估的問題:貴(要付錢)、有偏、難以重現,版面配置和問題措辭都會影響答案。也評估不了泛化:一個只會背訓練集的模型,樣本按定義就是完美的,人看不出它沒有泛化。所以需要自動指標,最常用的是 Inception Score、FID、KID。38:27

06Inception Score、FID、KID(投影片 15–18)

Inception Score(IS)

兩個假設:資料有標籤;有一個好的機率分類器 \(c(y\mid\mathbf x)\)。好的生成模型的樣本應該同時有兩個性質:40:31

SHARPNESS:每個樣本都看得出是什麼$$S = \exp\Big(\mathbb E_{\mathbf x\sim p}\Big[\int c(y\mid\mathbf x)\log c(y\mid\mathbf x)\,dy\Big]\Big)$$分類器在樣本上的預測分佈 \(c(y\mid\mathbf x)\) 熵低(很有信心)時,S 高。
DIVERSITY:各類別都有$$D = \exp\Big(-\mathbb E_{\mathbf x\sim p}\Big[\int c(y\mid\mathbf x)\log c(y)\,dy\Big]\Big)$$\(c(y) = \mathbb E_{\mathbf x\sim p}[c(y\mid\mathbf x)]\) 是邊際預測分佈;它的熵高(接近均勻)時,D 高。

\(\text{IS} = D\times S\),越高越好。沒有現成的分類器時,就用在 ImageNet 上訓練的 Inception Net,所以叫 Inception Score。45:11

投影片 15–16 的圖:(15) 兩排 MNIST 數字 5 7 1 7 5 5 9 9:左邊模糊(Low sharpness)、右邊清楚(High sharpness)。(16) 左邊一整排都是 1(Low diversity,mode collapse),右邊 0 到 9 各一個(High diversity)。

IS 其實是一個 mutual information:\(\log\text{IS} = I(y;\mathbf x)\)

取對數:\(\log S = -\mathbb E_{\mathbf x}[H(c(y\mid\mathbf x))]\)。而 \(-\mathbb E_{\mathbf x}\int c(y\mid\mathbf x)\log c(y)dy = -\int c(y)\log c(y)dy = H(c(y))\),所以 \(\log D = H(c(y))\)。相加:

$$\log\text{IS} = H(y) - H(y\mid\mathbf x) = I(y;\mathbf x) = \mathbb E_{\mathbf x\sim p}\big[D_{\mathrm{KL}}(c(y\mid\mathbf x)\,\Vert\,c(y))\big]$$

這正是 Salimans et al. (2016) 原始論文的定義 \(\exp(\mathbb E_{\mathbf x}\mathrm{KL}(p(y\mid\mathbf x)\Vert p(y)))\)。由此可知 \(1\le\text{IS}\le\) 類別數(\(C\) 類時 \(I\le H(y)\le\log C\)),最大值在「每個樣本 100% 確定、各類別均勻」時達到:sharpness 和 diversity 可以同時達到最大。原論文建議用夠多的樣本(50k)計算,因為 diversity 部分需要大樣本。

出處:Salimans et al. (2016), "Improved Techniques for Training GANs", §4。

課堂問答 · 44:09diversity 只檢查每個類別出現的頻率,那同一類裡面的多樣性呢?它沒有檢查,這是 IS 的一個失敗模式:如果模型每個數字都會畫,但每個數字只會畫一種寫法,IS 仍然可能很高,即使在類別內部丟掉了很多 mode。並不完美,但仍被廣泛使用。44:09

Fréchet Inception Distance(FID)

IS 只看生成的樣本,從來沒有和真實資料比較(只透過分類器間接用到)。FID 比較預訓練分類器在生成樣本和測試資料上抽出的特徵:47:18

  1. 令 \(\mathcal G\) 是生成的樣本、\(\mathcal T\) 是測試資料,算出特徵 \(F_{\mathcal G}\)、\(F_{\mathcal T}\)(例如 Inception Net 的倒數第二層)。
  2. 對兩組特徵各配一個多變量高斯 \((\boldsymbol\mu_{\mathcal G},\Sigma_{\mathcal G})\)、\((\boldsymbol\mu_{\mathcal T},\Sigma_{\mathcal T})\)。
  3. 算兩個高斯之間的 Wasserstein-2 距離(嚴格說是它的平方):
$$\text{FID} = \Vert\boldsymbol\mu_{\mathcal T} - \boldsymbol\mu_{\mathcal G}\Vert^2 + \mathrm{Tr}\big(\Sigma_{\mathcal T} + \Sigma_{\mathcal G} - 2(\Sigma_{\mathcal T}\Sigma_{\mathcal G})^{1/2}\big)$$

越低越好。49:18

課堂問答 · 49:19為什麼用多變量高斯,不用別的統計量?因為兩個高斯之間的 Wasserstein 距離有封閉解,並不是特別有原則的選擇。為什麼不直接比較像素的平均和變異數?可以,但像素是很低階的特徵;預訓練網路抽出的高階特徵(影像裡有什麼物體、在哪裡)更接近我們在乎的東西。49:19
課堂問答 · 52:22能不能在訓練時加上 FID 當作輔助 loss?可以(如果算得起),但那樣它就不能再當評估指標了:一旦你對某個指標做最佳化,它就不再是好的指標。52:22

Kernel Inception Distance(KID)

Maximum Mean Discrepancy(MMD)是一種 two-sample test 統計量,用 kernel 量兩點的相似度,比較兩個分佈的各階動差:52:53

$$\mathrm{MMD}(p,q) = \mathbb E_{\mathbf x,\mathbf x'\sim p}[K(\mathbf x,\mathbf x')] + \mathbb E_{\mathbf x,\mathbf x'\sim q}[K(\mathbf x,\mathbf x')] - 2\,\mathbb E_{\mathbf x\sim p,\mathbf x'\sim q}[K(\mathbf x,\mathbf x')]$$

直覺:比較「真實對真實」和「假對假」的平均相似度,以及「真實對假」的平均相似度。若 \(p = q\),三項抵消成 0。KID 就是在分類器的特徵空間裡算 MMD。投影片的比較:FID 有偏(估計值總是正的),KID 不偏;FID 可以在 \(O(n)\) 時間算,KID 要 \(O(n^2)\)。54:59

課堂問答 · 55:33MMD 怎麼比較動差?把樣本映射到 kernel 的 reproducing kernel Hilbert space(RKHS),等於在 kernel 的特徵空間裡比較真實和生成樣本的平均嵌入。好處是 kernel 可以隱含無限多個特徵,卻不用真的算出來(kernel trick)。55:33
FID / KID 的實作細節與「有偏」的意思
  • FID(Heusel et al. 2017):特徵是 Inception-v3 最後一個 pooling 層(2048 維),原論文用 50,000 張生成影像算平均和共變異數。
  • 有偏:真正的 FID 可以是 0,但用有限樣本估計時,估計值系統性地偏高,而且偏差大小和樣本數 \(n\)、模型都有關,所以不同 \(n\) 算出的 FID 不能互相比較。Demo D 的「真實 vs 真實」那一列就能看到:兩組都來自同一分佈,FID 卻明顯大於 0,\(n\) 越大越接近 0。
  • KID(Bińkowski et al. 2018):kernel 是三次多項式 \(k(\mathbf x,\mathbf y) = (\frac1d\mathbf x^\top\mathbf y + 1)^3\),\(d\) 是特徵維度,所以比較的是到三階的動差(平均、變異、偏度)。用的是 MMD² 的不偏估計量(去掉 \(i = j\) 的項),所以估計值可以是負的。
  • 計算量:投影片說 FID 是 \(O(n)\);更精確地說是 \(O(nd^2 + d^3)\)(共變異數加矩陣平方根),\(d = 2048\) 時其實不便宜。KID 是 \(O(n^2d)\),實務上用較小的 \(n\)(例如 1,000)重複抽樣再平均。

出處:Heusel et al. (2017) §Experiments;Bińkowski et al. (2018) §4 "KID" 與註腳。

課堂外:Precision 與 Recall(把「品質」和「涵蓋」分開)

IS、FID 都把兩件事混成一個數字:樣本是否像真的(品質)和是否涵蓋了資料的所有變化(多樣性)。Kynkäänniemi et al. (2019) 的做法:在特徵空間裡,對每個真實樣本畫一個球,半徑是到第 \(k\) 個最近真實樣本的距離,所有球的聯集近似「真實資料的流形」;生成樣本也一樣。

  • Precision:落在真實流形內的生成樣本比例(品質)。
  • Recall:落在生成流形內的真實樣本比例(涵蓋)。

Mode collapse 會讓 recall 變低、precision 仍高;模糊的樣本會讓 precision 變低。Demo D 的表格裡也算了這兩個值(\(k = 3\))。

出處:Kynkäänniemi et al. (2019), "Improved Precision and Recall Metric for Assessing Generative Models", arXiv 1904.06991。

Demo D同一組樣本,不同指標看到什麼

一個玩具的「影像」世界:資料是圓上 8 個有標籤的高斯(類別 = 哪一團),分類器 \(c(y\mid\mathbf x)\) 是真實混合分佈的 Bayes 後驗。FID 用兩種「特徵」:原始 2 維座標,以及一個固定的 32 維隨機特徵(random Fourier features,代替預訓練網路;它的數值單位是任意的,所以乘上 1,000 顯示)。KID 用同一組 32 維特徵。調整「生成模型」,看哪些指標有反應。表格最後一列是「另一組真實樣本 vs 測試集」,是同樣 \(n\) 下指標的最佳可能值。

測試集生成樣本

瀏覽器中實測(n = 1,000;「理想」模型就是真實分佈,隨機特徵 FID 4.8,另一組真實樣本 3.7):

  • 類別內 collapse(散佈 × 0.1):IS 7.97,和理想一樣(課堂問答說的失敗模式);隨機特徵 FID 跳到 44,recall 掉到 0.04。
  • 只畫 4 類(每隔一團):IS 剛好降到 3.99。但 2 維座標的 FID 幾乎沒變(0.079,理想模型是 0.051):剩下的 4 團仍對稱地分佈在圓上,平均和共變異數都和真實資料差不多,而 FID 只看這兩個動差。換成 32 維特徵,FID 跳到 485、recall 0.46。FID 好不好,取決於特徵抽取器能不能看見差異。
  • 模糊(額外雜訊 0.6):IS 幾乎不變(7.80,模糊的點仍然最靠近某一團),precision 掉到 0.68,recall 仍是 0.98。
  • 背訓練集:IS 7.86、precision 0.95,看起來很好;隨機特徵 FID 23,比理想差,因為 100 個點重複抽樣,變異不夠。Recall 是 0:生成的「流形」只有 100 個點,重複的點讓 k 近鄰半徑變成 0。沒有一個指標直接說「這是複製的」,要另外做最近鄰檢查。
  • 樣本數:同樣是理想模型,n = 100 時隨機特徵 FID 是 54.8,n = 2,000 時是 3.1。所以 FID 一定要在相同 n 下比較;KID 在兩種 n 下都在 0 附近。

07Text-to-image 模型的評估(投影片 19)

對 text-to-image 模型,要考慮的不只影像品質(FID、IS、KID),還有:影像和文字描述是否一致(CLIP score)、偏見、是否產生有害內容、能否理解描述中物體的空間關係、對改寫描述的穩健性、美感、原創性等。56:04

HEIM(Holistic Evaluation of Text-to-Image Models,Stanford,老師也參與):26 個模型、29 個情境、33 個指標(自動與人工)。老師說這是目前對 text-to-image 模型最全面的評估。57:08

投影片 19 的圖:HEIM 的評估面向表:Alignment、Quality、Aesthetics、Originality、Reasoning、Knowledge、Bias、Toxicity、Fairness、Robustness、Multilinguality、Efficiency,每一列附一個 prompt、生成的影像和對應的指標。

08評估潛在表示(投影片 20–25)

什麼是「好的」潛在表示?如果有下游任務,就用下游任務的指標(例如半監督學習的準確率、去雜訊的重建品質)。如果是無監督的,就沒有一體適用的答案,常見的三個角度:分群、壓縮、disentanglement。58:42

分群(投影片 21–22)

能依語意把點分在一起的表示可能有用(例如半監督分類)。在生成模型的潛在空間裡套 k-means 或其他分群演算法。60:45

投影片 21 的圖(Makhzani et al.):兩個生成模型學到的 MNIST 2 維表示,顏色是真實標籤。B 像一顆星:10 條細長的放射狀手臂,每條是一個數字;D 是幾團不規則、部分重疊的雲。哪個比較好?老師說:不清楚,兩者都把同類的點放在一起。61:15

有標籤的資料集可以量化:分群時不用標籤,只在評估時用。sklearn 的三個分數(都在 [0, 1]):62:17

  • Completeness:同一類的點都在同一群時最大。completeness_score([0,0,1,1], [0,1,0,1]) = 0。
  • Homogeneity:每一群只包含同一類時最大。homogeneity_score([0,0,1,1], [1,1,0,0]) = 1(群的編號是什麼無所謂)。
  • V-measure:兩者的調和平均(也稱 normalized mutual information)。v_measure_score([0,0,1,1], [1,1,0,0]) = 1。
三個分數的定義(用熵)

\(C\) 是真實類別、\(K\) 是分到的群。Homogeneity \(h = 1 - H(C\mid K)/H(C)\):知道群之後,類別還剩多少不確定。Completeness \(c = 1 - H(K\mid C)/H(K)\):知道類別之後,群還剩多少不確定。V-measure \(= 2hc/(h+c)\)。只分 1 群時 \(c = 1\)、\(h = 0\);每個點自成一群時 \(h = 1\)、\(c\) 很低:兩個極端都只拿到一半,所以要看 V-measure。

出處:Rosenberg & Hirschberg (2007), "V-Measure: A conditional entropy-based external cluster evaluation measure"(sklearn 的實作依據)。

有損壓縮 / 重建(投影片 23)

能壓縮多少而重建品質不明顯下降?標準指標:MSE、PSNR、SSIM。63:20

投影片 23 的圖(Santurkar et al. 2018,Generative Compression):UT Zappos50k 的鞋子影像,原圖 11 bits/px。JPEG2000 壓縮 21 倍(0.520 bits/px、PSNR 19.63、SSIM 0.705),JPEG 壓縮 17 倍(0.642、19.90、0.707),而且有幾張變成灰塊或嚴重失真;Toderici et al. 壓縮 88 倍(0.125、18.73、0.705);用生成模型的 NCode(100, 5) 壓縮 90 倍(0.121、18.25、0.720),鞋子形狀和顏色都保留得很好。64:23

課堂問答 · 65:26VAE 不是本來就在做這件事?是的,VAE 的 loss 裡就有重建項,所以重建通常不差。但如果想比較 GAN 和 VAE 的表示哪個好,要看你想拿表示做什麼:分群?重建?這只是其中一個面向。65:26

Disentanglement(投影片 24–25)

希望表示能把獨立且可解釋的屬性分開,讓使用者能控制生成資料的屬性:例如 \(z_1\) 固定時物體大小永遠不變,改變 \(z_1\) 時只有大小在變。像非線性版的 PCA。65:57

投影片 24 的圖(Higgins et al. 2018):兩個 5×5 的人臉網格,(a) 沿一個潛在變數改變時只有膚色從淺到深變化,(b) 沿另一個潛在變數改變時年齡 / 性別變化,其他屬性保持不變。

  • 量化指標很多:Beta-VAE metric(Higgins et al. 2017,用線性分類器預測哪個生成因子被固定的準確率)、Factor-VAE metric、Mutual Information Gap、SAP score、DCI disentanglement、Modularity;實作可參考 disentanglement_lib。67:00
  • 只用無標籤資料學 disentangled 的生成因子,在沒有額外假設時理論上不可能。實務上有一些成功,但不清楚為什麼。67:31
為什麼「理論上不可能」?

Locatello et al. (2019) 證明:若 \(\mathbf z\) 的分佈可分解(例如 \(\mathcal N(0,I)\)),則存在無限多個雙射 \(f\),讓 \(f(\mathbf z)\) 和 \(\mathbf z\) 的分佈完全一樣,但 \(f(\mathbf z)\) 的每一維都和 \(\mathbf z\) 的每一維糾纏在一起。觀測資料的分佈 \(p(\mathbf x)\) 對這兩種表示完全相同,所以只看無標籤資料,原則上分不出哪個才是「disentangled」的那個;一定需要模型或資料上的歸納偏誤(inductive bias)或一些監督。他們也訓練了超過 12,000 個模型做大規模實驗,發現隨機種子和超參數的影響常常比模型選擇還大。

出處:Locatello et al. (2019), "Challenging Common Assumptions in the Unsupervised Learning of Disentangled Representations", ICML,arXiv 1811.12359,Theorem 1。

Demo E分群指標:同樣分得開的表示,分數可以不一樣

兩個假想的 2 維潛在表示,6 個類別(顏色),都把同類放在一起:「圓團」像投影片的 D,「放射狀」像 B。用 k-means(不看標籤)分群,再用標籤算三個分數。

顏色 = 真實類別
顏色 = k-means 的群
  • K = 6 時,圓團幾乎完美(實測 V = 0.96);放射狀的類別其實也分得開(每條手臂一類),但 k-means 喜歡圓形的群,會把手臂靠近中心的部分切在一起,分數明顯較低(V = 0.77)。分數反映的是「表示 + 分群演算法」的組合,不只是表示本身。
  • K = 1:completeness = 1、homogeneity = 0。K = 20:homogeneity 接近 1、completeness 下降(圓團 0.94 和 0.59)。這就是為什麼要看兩者的調和平均。

09語言模型:用 prompting 解任務(投影片 26–28)

語言模型是文字的生成模型 \(p_\theta(\text{next word}\mid\text{sentence})\)。它可以不經過抽取表示,直接用自然語言描述任務來解。68:31

例:情感分類。構造句子「Classify the sentiment of the movie reviews below as either "Positive" or "Negative".」,接著給一個正面影評的例子和一個負面的例子,最後放上要分類的影評和「Sentiment: ___」。讓模型預測下一個詞,若是 Positive 就分為正面。這正好符合模型唯一的 API:給定上文預測下一個詞。70:35

  • 有很多 prompting 策略(prompt engineering);也可以 fine-tune 模型,這比較接近「用表示」的想法。72:09
  • 哪個語言模型比較好?Perplexity 不完全反映我們在乎的事。一種做法是考慮大量的情境、適應策略(不同 prompt)與指標,系統性地比較:HELM(Stanford,73 個情境、65 個指標:準確率、校準、穩健性、公平性、偏見、毒性、效率,81 個模型);BIG-bench(Google 主導、全世界貢獻,超過 200 個任務:問答、推理、數學、謎語等)。73:12

投影片 26–27 的圖:(26) 一個流程:Scenario(IMDB)→ Adaptation(prompting)→ Model(GPT-3 davinci v1)→ Metrics(robustness)。(27) HELM 的情境分類樹:Task / What / Who / When / Language,以及 Metrics 欄位(Input perturbation、Output measure)。

課堂問答 · 75:18影像這種沒有自然順序的資料,能用 prompting 嗎?這個想法還沒有大量應用到影像生成模型。模型的輸出是文字時,很容易把標籤甚至 bounding box 寫成文字;輸出是影像就比較不自然。是個開放的研究方向。75:18
課堂問答 · 76:24GPT-4 能 zero-shot 回答問題,怎麼做到的?細節沒有公開,但底層還是預測下一個詞。只在大量文字上做下一個詞預測(也就是壓縮),zero-shot 問答大概不會太好,所以會再用一個更接近推論時任務的資料集做 instruction fine-tuning。但用什麼任務分佈、怎麼加權,還沒有好的答案。影像模型也開始這麼做:收集偏好資料(同一個 caption 產生兩張圖,問使用者喜歡哪張),再 fine-tune diffusion model,讓它更美觀、更不帶偏見。76:24
課堂問答 · 79:01Prompting 和 fine-tuning 的優缺點?Prompting 不需要算力,也不需要會寫程式,只要能用自然語言描述想要什麼,完全是黑盒子。Fine-tuning 要實際訓練模型,成本和專業門檻高得多,但通常效果較好,視任務而定。79:01
總結(投影片 28)
  • 生成模型的定量評估是一個困難、仍然開放的問題。
  • 下游應用可以用應用專屬的指標,但「正確的下游任務分佈」是什麼?
  • 無監督的評估,指標會因目的(密度估計、取樣、潛在表示)而大不相同。80:03

常見誤解

誤解:「likelihood 高的模型,樣本一定好看」。Theis et al. 的混合模型論證:混入 99% 的雜訊,log-likelihood 只差 4.61 nats,在高維幾乎看不出來。
誤解:「KDE 能可靠地估計 GAN 的 likelihood」。在高維,即使有大量樣本、最佳 bandwidth,估計仍然差很遠,甚至會排錯名次(k-means 贏過真實分佈)。
誤解:「importance sampling 是不偏的,所以 log-likelihood 估計也不偏」。對 \(p(\mathbf x)\) 不偏,但對 \(\log p(\mathbf x)\) 平均是低估的(Jensen)。
誤解:「sharpness 和 diversity 互相衝突」。課堂上的回答是「它們是競爭的」,但兩者可以同時達到最大:每個樣本都很確定、各類別均勻出現,此時 IS = 類別數。只是在實際的模型裡常常需要取捨。
誤解:「IS 高就代表沒有 mode collapse」。IS 只看類別的頻率,看不到類別內部的 collapse,也從不和真實資料比較,所以也看不出「只會背訓練集」。
誤解:「FID 小於 1 就代表兩個分佈幾乎一樣」。FID 只比較特徵的前兩個動差,而且依賴特徵抽取器;Demo D 中丟掉一半的類別,2 維座標的 FID 幾乎不變。不同樣本數算出的 FID 也不能比較。
誤解:「KID 是負的,算錯了」。KID 用的是不偏估計量,真值接近 0 時估計值可以是負的。

自我測驗

1. 為什麼說比較 test log-likelihood 就是比較壓縮率?
用 Shannon coding 給 \(\mathbf x\) 長度約 \(\log\frac1{p_\theta(\mathbf x)}\) 的碼,平均碼長 \(\approx-\mathbb E_{p_{\text{data}}}[\log p_\theta(\mathbf x)]\),正是負的 test log-likelihood;arithmetic coding 能實際達到接近這個長度。
2. 一個模型在 CIFAR-10 上是 3.0 bits/dim。整張圖的負 log-likelihood 是多少 nats?
\(3.0\times3072\times\ln2\approx6388\) nats。
3. 用 Theis et al. 的論證說明「好 likelihood 不代表好樣本」。
\(\log[0.01p + 0.99q]\ge\log p - \log100\),只差 4.61 nats(CIFAR-10 上約 0.0022 bits/dim),但 99% 的樣本來自爛模型 \(q\)。
4. 用投影片的 6 個點和 bin 寬 2 的直方圖,求 \(p(-0.5)\)、\(p(-2.01)\)。
\([-2,0)\) 裡有 −1.3、−0.4 兩點:\(2/(6\times2) = 1/6\)。\([-4,-2)\) 裡只有 −2.1:\(1/12\)。
5. KDE 的 kernel 需要滿足哪兩個條件?bandwidth 怎麼選?
非負且歸一化 \(\int K = 1\)、對稱 \(K(u) = K(-u)\)。用交叉驗證(例如留一法)選讓留出樣本 log-density 最大的 σ。
6. 為什麼 likelihood weighting 在 prior 和 posterior 差很多時不好用?AIS 怎麼改善?
大多數 \(\mathbf z\sim p(\mathbf z)\) 落在 \(p(\mathbf x\mid\mathbf z)\approx0\) 處,估計由極少數樣本主導,變異很大。AIS 用一串從 prior 漸變到後驗的中間分佈 \(p(\mathbf z)p(\mathbf x\mid\mathbf z)^\beta\),每一步權重只小幅變化,並用 MCMC 讓樣本跟上。
7. 寫出 Inception Score,並說明它等於哪個 mutual information。
\(\text{IS} = D\times S = \exp(\mathbb E_{\mathbf x}[\mathrm{KL}(c(y\mid\mathbf x)\Vert c(y))]) = \exp(I(y;\mathbf x)) = \exp(H(y) - H(y\mid\mathbf x))\)。
8. 舉兩個 IS 看不出來的問題。
類別內的 mode collapse(每類只畫一種);只背訓練集(從不和真實資料比較)。另外也依賴分類器,資料沒有標籤或和 ImageNet 很不同時意義不明。
9. 寫出 FID 的公式。它比較了分佈的哪些性質?
\(\Vert\boldsymbol\mu_T - \boldsymbol\mu_G\Vert^2 + \mathrm{Tr}(\Sigma_T + \Sigma_G - 2(\Sigma_T\Sigma_G)^{1/2})\),只比較特徵空間中的平均和共變異數(兩個高斯之間的 Wasserstein-2 距離平方)。
10. KID 和 FID 的差異?
KID 是特徵空間中的 MMD²(三次多項式 kernel),有不偏估計量、可以是負的、\(O(n^2)\);FID 的有限樣本估計偏高且依賴 \(n\),只看前兩個動差。
11. 為什麼不能在訓練時直接最佳化 FID,再用 FID 報告結果?
一旦把指標當成最佳化目標,模型會利用指標的漏洞(例如特徵抽取器的盲點),指標就不再反映真正的品質(Goodhart 定律)。
12. 只分一群時 homogeneity 和 completeness 各是多少?為什麼要看 V-measure?
completeness = 1(每類都在同一群),homogeneity = 0(那一群包含所有類)。兩個極端都能讓其中一個分數完美,所以看調和平均。
13. 怎麼用語言模型做情感分類而不需要訓練?
寫一個 prompt:任務說明 + 幾個附標籤的例子 + 待分類的影評 + 「Sentiment:」,讓模型預測下一個詞是 Positive 還是 Negative。

延伸閱讀