生成模型的評估:likelihood、樣本品質與表示
分類器的評估很簡單:在測試集上算準確率。生成模型卻沒有唯一的「任務」,所以沒有唯一的指標。如果在乎密度估計,就看 test log-likelihood,它等於壓縮率;模型沒有 likelihood 時,只能用 KDE 或 importance sampling 去近似,而這在高維很不可靠。如果在乎樣本品質,金標準是人工評估,但常用的是自動指標 Inception Score、FID、KID,各有盲點。如果在乎表示,就看分群、重建、disentanglement;對語言模型,則是用 prompting 在大量任務上測試。這講沒有新模型,但它決定了你怎麼說「模型 A 比模型 B 好」。
讀完這頁你應該能夠
- 說明「最大化 likelihood = 最小化平均編碼長度」,並在 bits/dim、perplexity、bits per character 之間換算。
- 說明 likelihood 和樣本品質可以幾乎互不相關(Theis et al. 的混合模型論證)。
- 寫出 kernel density estimator,說明 bandwidth 的取捨、怎麼用交叉驗證選,以及它為什麼在高維失靈。
- 說明 likelihood weighting 為什麼變異大、annealed importance sampling 怎麼改善,以及「對 \(p(\mathbf x)\) 不偏、對 \(\log p(\mathbf x)\) 有偏」的意思。
- 寫出 Inception Score、FID、KID 的定義,各舉一個它們看不出來的失敗模式。
- 說明評估潛在表示的三種方式(分群、壓縮、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
所以最大化 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
Likelihood 和樣本品質可以幾乎無關(Theis et al. 2016)
好 likelihood、爛樣本:設 \(p\) 是一個很好的模型,\(q\) 是很爛的模型(例如白雜訊)。混合模型 \(0.01p + 0.99q\) 有 99% 的樣本是雜訊,但
\(\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
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:\(-0.5\notin S\),所以 \(p_\theta(-0.5) = 0\)。不好:只有 6 個樣本,沒抽到可能只是運氣。
- 答案 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: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
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,再取平均。
- 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)。
即使是最簡單的高斯、即使用最佳 σ,每一維的誤差也隨維度增加,而且樣本數從 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
這叫 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\)。對每條鏈:
- \(\mathbf z_0\sim p(\mathbf z)\),\(\log w = 0\)。
- 對 \(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\)。
- \(\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 的計算)。
預設設定(\(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
\(\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))\)。相加:
這正是 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。
Fréchet Inception Distance(FID)
IS 只看生成的樣本,從來沒有和真實資料比較(只透過分類器間接用到)。FID 比較預訓練分類器在生成樣本和測試資料上抽出的特徵:47:18
- 令 \(\mathcal G\) 是生成的樣本、\(\mathcal T\) 是測試資料,算出特徵 \(F_{\mathcal G}\)、\(F_{\mathcal T}\)(例如 Inception Net 的倒數第二層)。
- 對兩組特徵各配一個多變量高斯 \((\boldsymbol\mu_{\mathcal G},\Sigma_{\mathcal G})\)、\((\boldsymbol\mu_{\mathcal T},\Sigma_{\mathcal T})\)。
- 算兩個高斯之間的 Wasserstein-2 距離(嚴格說是它的平方):
越低越好。49:18
Kernel Inception Distance(KID)
Maximum Mean Discrepancy(MMD)是一種 two-sample test 統計量,用 kernel 量兩點的相似度,比較兩個分佈的各階動差:52:53
直覺:比較「真實對真實」和「假對假」的平均相似度,以及「真實對假」的平均相似度。若 \(p = q\),三項抵消成 0。KID 就是在分類器的特徵空間裡算 MMD。投影片的比較:FID 有偏(估計值總是正的),KID 不偏;FID 可以在 \(O(n)\) 時間算,KID 要 \(O(n^2)\)。54:59
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
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 = 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)。
- 生成模型的定量評估是一個困難、仍然開放的問題。
- 下游應用可以用應用專屬的指標,但「正確的下游任務分佈」是什麼?
- 無監督的評估,指標會因目的(密度估計、取樣、潛在表示)而大不相同。80:03
與其他講的關聯
- 第 4 講:MLE = 最小化 KL = 壓縮。這講把它變成評估指標,也點出它的盲點。
- 第 6 講:VAE 的 ELBO 是 likelihood 的下界;importance-weighted 估計和 AIS 能把下界收緊。
- 第 9–10 講:GAN 沒有 likelihood;MMD、Wasserstein 距離在這裡變成 KID 和 FID;mode collapse 是 IS 的 diversity 和 recall 要偵測的東西。
- 第 11 講:AIS 的每一步用 MCMC(Metropolis–Hastings)。
- 第 14 講:NCSN 的 Inception 8.87 / FID 25.32、score SDE 的 FID 2.20、probability flow ODE 的 bits/dim,都是這講的指標。
- 第 16 講:diffusion model 的 likelihood(bits/dim)與樣本品質(FID)之間的取捨,例如訓練目標的加權。
常見誤解
自我測驗
1. 為什麼說比較 test log-likelihood 就是比較壓縮率?
2. 一個模型在 CIFAR-10 上是 3.0 bits/dim。整張圖的負 log-likelihood 是多少 nats?
3. 用 Theis et al. 的論證說明「好 likelihood 不代表好樣本」。
4. 用投影片的 6 個點和 bin 寬 2 的直方圖,求 \(p(-0.5)\)、\(p(-2.01)\)。
5. KDE 的 kernel 需要滿足哪兩個條件?bandwidth 怎麼選?
6. 為什麼 likelihood weighting 在 prior 和 posterior 差很多時不好用?AIS 怎麼改善?
7. 寫出 Inception Score,並說明它等於哪個 mutual information。
8. 舉兩個 IS 看不出來的問題。
9. 寫出 FID 的公式。它比較了分佈的哪些性質?
10. KID 和 FID 的差異?
11. 為什麼不能在訓練時直接最佳化 FID,再用 FID 報告結果?
12. 只分一群時 homogeneity 和 completeness 各是多少?為什麼要看 V-measure?
13. 怎麼用語言模型做情感分類而不需要訓練?
延伸閱讀
- Theis, van den Oord & Bethge (2016), A note on the evaluation of generative models(本頁參考):likelihood 與樣本品質的獨立性、Parzen 估計的失靈。
- Salimans et al. (2016), Improved Techniques for Training GANs(Inception Score)。
- Heusel et al. (2017), GANs Trained by a Two Time-Scale Update Rule…(FID)。
- Bińkowski et al. (2018), Demystifying MMD GANs(KID)。
- Kynkäänniemi et al. (2019), Improved Precision and Recall Metric。
- Zhou et al. (2019), HYPE(投影片 12–13);專案網站。
- Wu et al. (2017), On the Quantitative Analysis of Decoder-Based Generative Models(用 AIS 評估 VAE / GAN 的 likelihood)。
- Santurkar et al. (2018), Generative Compression(投影片 23)。
- Locatello et al. (2019), Challenging Common Assumptions in the Unsupervised Learning of Disentangled Representations(投影片 25)。
- Lee et al. (2023), HEIM;Liang et al. (2022), HELM;Srivastava et al. (2022), BIG-bench(投影片 19、27)。