CS236 第 1 講 · 導論
Stanford CS236 · Fall 2023 · Lecture 1

導論:What I cannot create, I do not understand

第一堂課沒有推導,重點是建立一個世界觀:生成模型就是一個能從資料中學出來的機率分佈 \(p(x)\)。學會之後可以取樣、可以評估、也可以被控制。整門課就是在研究「怎麼表示、怎麼訓練、怎麼取樣」這個分佈。

讀完這頁你應該能夠

  1. 用一句話說出「生成模型」在統計上是什麼:一個機率分佈 \(p(x)\)。
  2. 分清楚生成模型的四種用法:學習、取樣、評估密度、條件控制。
  3. 說明 generative 和 discriminative 模型的差別:\(p(x)\) 和 \(p(y\mid x)\)。
  4. 解釋為什麼高維度資料的機率分佈很難直接表示(維度災難)。
  5. 認得本課會出現的六大模型家族,以及它們大致的取捨。

前置知識檢查

這堂只需要很基本的機率觀念。如果下面這些詞你不太確定,先打開對應的補充框。

  • 隨機變數、機率分佈、機率密度(第 2 節的補充框)
  • 聯合分佈 \(p(x_1, \dots, x_n)\) 和條件分佈 \(p(x \mid y)\)(第 3 節)
  • 「取樣」(sampling)是什麼意思(第 2 節)
  • 監督式和非監督式學習的差別(第 7 節)

投影片列出的先修:至少一門機器學習課(CS221 / 228 / 229 / 230 之一);梯度、梯度下降、backpropagation;隨機變數、獨立與條件獨立;Bayes rule、chain rule、變數變換公式(change of variables);Python(作業用 PyTorch)。50:17

投影片(pptx)用 ONLYOFFICE 轉成 PDF 後逐頁看過,文中的「投影片 N 的圖」描述圖片內容;投影片上的動畫與影片只看得到第一格。標「出處」的補充來自 Lai, Song, Kim, Mitsufuji & Ermon,《The Principles of Diffusion Models》(arXiv 2510.21890v3)第 1 章,以及投影片引用的原始論文。

01為什麼要「生成」

AI 的核心難題:看懂高維訊號

電腦視覺、NLP、語音、甚至機器人,面對的根本問題都一樣:要從一個高維度(high-dimensional)的原始訊號中理解意義。對電腦來說,一張圖片只是一個巨大的數字矩陣,一段文字只是一串字元。我們希望把它對應到有用的表示,例如:圖中有哪些物體?它們的關係?材質?是否在移動?01:41

投影片 2 的圖(「Challenge: understand complex, unstructured inputs」):四個領域各一張圖:Computer Vision(一張物體分割的彩色標註圖)、Computational Speech(一段藍色聲波)、Natural Language Processing(一整面書架)、Robotics(一輛車頂裝了感測器的自駕車)。

Feynman 的那句話

老師怎麼說 · 03:12Feynman 過世後黑板上留著一句話:「What I cannot create, I do not understand.」他原本是在講數學:自己推不出證明,就代表沒真正懂。Ermon 取它的逆否命題當作生成模型的哲學:如果我宣稱懂了「圖片的意義」,那我應該能創造出新的圖片。就像你說自己懂義大利文,就應該能說、能寫義大利文。03:12

投影片 3 的圖:左邊是 Feynman 黑板的照片,手寫的「What I cannot create, I do not understand」;右邊是 Feynman 站在黑板前的照片。下方兩行對照:Feynman 的原句,以及生成模型版本「What I understand, I can create」。

逆否命題是什麼?這個推論真的成立嗎?

命題「若 A 則 B」的逆否命題是「若非 B 則非 A」,兩者邏輯上完全等價。Feynman 原句是「不能創造 → 不理解」,逆否就是「理解 → 能創造」。

注意,這不代表「能創造 → 理解」(那是「逆命題」,不一定成立)。所以老師的說法比較謹慎:如果模型能生成很合理的文字或圖片,那它可能具備某種程度的理解。這是一個動機和直覺,不是定理。這也是近年關於「LLM 到底懂不懂」爭論的核心。

電腦圖學與「反向圖學」

「寫程式生成圖片」不是新問題。電腦圖學(computer graphics)早就在做:給一段高層描述(幾個方塊、圓柱、顏色、視角),用 renderer 畫出對應的圖片。05:18

如果能把這個過程反過來:給一張圖,推回產生它的高層描述,那就等於在做電腦視覺。這個觀點叫做 vision as inverse graphics。06:55

投影片 4 的圖(「Generative Modeling: Computer Graphics」):上方的「High level description」框裡是兩行程式般的描述 Cube(color=blue, position=(x,y,z), size=…) 和 Cylinder(color=red, …);向下的箭頭標「Generation (graphics)」,畫出一個藍色立方體和一個紅色圓柱(「Raw sensory outputs」);向上的箭頭標「Inference (vision as inverse graphics)」。底下寫「Many of our models will have similar structure (generation + inference)」。

本課不教圖學,但這個結構會一再出現:

$$\underbrace{z}_{\text{高層描述 / 潛在變數}} \;\xrightarrow{\ \text{生成(generation)}\ }\; \underbrace{x}_{\text{圖片、文字}} \qquad\qquad x \;\xrightarrow{\ \text{推論(inference)}\ }\; z$$

這裡的 \(z\) 在後面的課程叫做 latent variable(潛在變數):看不到、但可以從 \(x\) 推出來,可以當作特徵(representation)拿去做下游任務。VAE(第 5–6 講)和 diffusion model(第 16 講)都是這個樣子。

資料和先驗知識的光譜

任何模型都需要先驗知識(prior knowledge),差別在比例:07:55

  • 電腦圖學站在「大量先驗」那一端:物理、光線傳播、物體性質,幾乎都是人寫進去的。
  • 本課站在「大量資料」那一端:盡量少用人為知識,改用網路上蒐集到的大量圖片、文字。

投影片 5 的圖:左邊是幾張臥室照片(Data),加號,右邊是一個讀書的人的圖示(Prior Knowledge:physics、materials…)。下方是一條從「Data」到「Prior Knowledge」的光譜,紅點「This course」靠近資料端,「Graphics」靠近先驗端,標題寫「Priors are always necessary, but there is a spectrum」。

在深度生成模型裡,「先驗」主要藏在三個地方:網路架構(例如 CNN 假設局部相關)、損失函數(怎麼衡量好壞)、最佳化器(怎麼找到好參數)。09:31

02生成模型就是機率分佈

整門課最重要的一個抽象:生成模型 = 定義在資料空間上的機率分佈 \(p(x)\)。09:01

你可以把它想成一個函數:輸入任何一張圖 \(x\),輸出一個非負的數,代表「根據我的模型,這張圖有多可能出現」。

$$p_\theta : \mathcal{X} \to [0, \infty), \qquad \int_{\mathcal{X}} p_\theta(x)\,dx = 1$$

\(\theta\) 是模型參數(例如神經網路的權重)。訓練資料 \(x^{(1)}, \dots, x^{(n)}\) 被視為從某個未知的「真實資料分佈」\(p_{\text{data}}\) 抽出來的樣本。目標是讓 \(p_\theta\) 盡量接近 \(p_{\text{data}}\):

$$x^{(1)}, \dots, x^{(n)} \overset{\text{i.i.d.}}{\sim} p_{\text{data}} \quad\Longrightarrow\quad \text{找 } \theta \text{ 使得 } p_\theta \approx p_{\text{data}}$$

投影片 6 的圖:一張臥室照片「Image x」→ 方框「A probability distribution p(x)」→「scalar probability p(x)」。上方列出 Data(臥室照片的樣本)和 Prior knowledge(參數形式例如 Gaussian、損失函數例如 maximum likelihood、最佳化演算法);下方紅字「sampling from p(x) generates new images」,接著兩張新的臥室圖。

機率分佈、機率質量、機率密度,差在哪?

離散變數(例如一個字、一個 0/1 像素)用機率質量函數(PMF):\(p(x)\) 就是「\(x\) 恰好出現」的機率,介於 0 和 1 之間,所有可能值加總為 1。

連續變數(例如實數像素值、音訊振幅)用機率密度函數(PDF):\(p(x)\) 本身不是機率,可以大於 1。機率要靠積分:\(P(a \le x \le b) = \int_a^b p(x)\,dx\)。密度高的地方代表「附近」比較容易出現樣本。

例:一維標準常態分佈 \(\mathcal{N}(0,1)\) 的密度是

$$p(x) = \frac{1}{\sqrt{2\pi}} \exp\!\left(-\frac{x^2}{2}\right)$$

在 \(x=0\) 時約為 0.399。如果把變異數縮小到 0.01,峰值會變成約 3.99,比 1 還大,但仍然是合法的密度。

在本課,圖片常被當成連續(或量化後的離散)高維向量,文字則是離散 token 的序列。

用神經網路表示密度時,難處在第二個條件:輸出要非負很容易(例如取 \(\exp\)),但要讓它積分為 1,就得除以 \(Z(\theta) = \int\exp(E_\theta(x))\,dx\),高維時幾乎算不出來。後面每一種模型家族,都可以看成是在想辦法繞過這個正規化常數。

出處:Lai et al. (2026) §1.1.2「Challenges in Modeling Distributions」。

「i.i.d.」是什麼?為什麼要假設它?

i.i.d. = independent and identically distributed(獨立同分佈)。意思是每筆訓練資料都是從同一個分佈 \(p_{\text{data}}\) 各自獨立抽出來的。

這個假設讓「整個資料集的機率」可以拆成乘積:\(p(x^{(1)},\dots,x^{(n)}) = \prod_i p(x^{(i)})\)。第 4 講的 maximum likelihood 會直接用到它。實際上網路資料不完全 i.i.d.,但這是幾乎所有機器學習理論的起點。

把資料當成輸出:資料模擬器

一般的機器學習把資料當輸入。生成模型把它翻過來,把資料當輸出:先用資料學出 \(p_\theta\),再從 \(p_\theta\) 抽樣產生新資料。所以老師說我們在建造的是 data simulator(資料模擬器)。10:34

投影片 7–12 的圖(「Building a simulator for the data generating process」):同一張方塊圖逐頁加料。先是「Data simulator → Data」;再加上左邊的輸入「Control signals」,輸出改成「New datapoints」;再加一個輸入「Potential datapoints」和一個輸出「Probability values」;接著方框裡依序寫上「=Statistical model」「=Generative model」,最後換成一個神經網路的圖示。一張圖把整門課的四種用法(取樣、條件控制、評估機率)都畫在一起。

「從分佈取樣」到底在做什麼?

取樣(sampling)是指:用電腦的亂數,產生一個隨機的 \(x\),讓它出現的頻率符合 \(p(x)\)。機率高的地方出現得多,機率低的地方出現得少。

最簡單的例子:從 \(\mathcal{N}(\mu, \sigma^2)\) 取樣,只要先取 \(\epsilon \sim \mathcal{N}(0,1)\),再算 \(x = \mu + \sigma\epsilon\)。之後會看到很多生成模型的取樣都是這個套路的延伸:先抽一個簡單的雜訊,再用一個(可能很複雜的)函數把它變形。GAN、flow、diffusion 都是這樣。

「能算 \(p(x)\)」和「能從 \(p(x)\) 取樣」是兩件不同的事。有些模型兩者都容易(autoregressive、flow),有些只容易其中一個(GAN 只能取樣;energy-based model 只知道 \(p\) 的形狀卻很難取樣)。這是整門課反覆出現的取捨。

03一個模型的四種用法

把課堂內容整理成四種能力。下面的互動 demo 會讓你一一操作它們。

能力數學上課堂例子
學習 learning由資料找出 \(\theta\),讓 \(p_\theta \approx p_{\text{data}}\)用網路圖片訓練影像模型
取樣 sampling\(x \sim p_\theta(x)\)產生「不存在的人臉」;同一個 prompt 每次結果不同
評估密度 density evaluation計算 \(p_\theta(x)\)異常偵測:被動過手腳的交通號誌機率很低 14:41
條件控制 conditional generation\(x \sim p_\theta(x \mid y)\),\(y\) 是控制訊號文字生圖、上色、翻譯、草圖轉圖片 11:34

控制訊號 = 條件分佈

課堂裡的各種「控制」,用機率的語言講都是條件分佈 \(p(x \mid y)\):

  • 文字生圖:\(y\) = caption,\(x\) = 圖片
  • 上色:\(y\) = 黑白照片,\(x\) = 彩色照片
  • 機器翻譯:\(y\) = 中文句子,\(x\) = 英文句子 31:19
  • 醫學影像重建:\(y\) = CT/MRI 機器的量測訊號,\(x\) = 醫學影像
  • 機器人模仿學習:\(y\) = 當前狀態,\(x\) = 一串動作

投影片 13–15 的圖:(13)「Data generation in the real world」:一張色塊組成的臥室草圖經過「Generative model of realistic images」生成兩張逼真的臥室照片(Stroke paintings to realistic images,Meng et al. ICLR 2022,即 SDEdit);文字「Ace of Pentacles」經過「Generative model of paintings」生成兩幅印象派風格的樹(Language-guided artwork creation)。(14)「Solving inverse problems」:一台 CT 掃描儀 → Generative model of medical images → 一組腦部斷層影像(Medical image reconstruction,Song et al. ICLR 2022)。(15)「Outlier detection」:正常的速限 35 號誌對模型而言是「High probability」,被塗改成 85 的號誌(旁邊畫了一個惡魔)是「Low probability」(Song et al. ICLR 2018)。

出處:投影片 13–15 引用的論文分別是 Meng et al.,「SDEdit」(arXiv 2108.01073);Song, Shen, Xing & Ermon,「Solving Inverse Problems in Medical Imaging with Score-Based Generative Models」(arXiv 2111.08005);Song, Kim, Nowozin, Ermon & Kushman,「PixelDefend」(arXiv 1710.10766)。PixelDefend 用 PixelCNN 的 likelihood 偵測對抗樣本(adversarial examples):被刻意擾動的影像在模型下的機率明顯偏低。

Discriminative vs. generative(投影片 16–19)

投影片有一段口頭帶得很快的內容,用「分辨臥室和餐廳的照片」為例:

  • Discriminative:圖片 \(X\) 是給定的,目標只是畫出決策邊界,也就是建模條件分佈 \(p(Y \mid X)\)。例子:logistic regression、CNN 分類器。
  • Generative:\(X\) 不是給定的,要能把它生成出來,所以需要 \(X\) 和 \(Y\) 的聯合分佈 \(p(X, Y)\)。

兩者透過 Bayes rule 相連:\(p(Y \mid X) = p(X, Y) / p(X)\)。條件式生成模型則是把「辨識方向」翻過來,以豐富的附加資訊 \(Y\) 為條件生成 \(X\),例如 \(p(X \mid Y=\text{臥室})\) 或 \(p(X \mid \text{caption})\)(caption 例如「一張黑色桌子配 6 張椅子」)。

投影片上有一句很值得記住的話:discriminative model 其實是一個非常簡單的條件生成模型,它生成的對象是 \(Y\)(一個標籤),而不是 \(X\)。生成一個標籤比生成一張完整圖片容易得多。

投影片 16–19 的圖:(16) 左半「Discriminative」:一條斜線「Decision boundary」把臥室和餐廳照片分開,下方寫 \(P(Y = \text{Bedroom}\mid X = \text{餐廳照片}) = 0.0001\)。右半「Generative」:一張表列出 \((Y = B, X = \cdot)\) 和 \((Y = D, X = \cdot)\) 的各種組合,連「Y = B,X = 一隻貓」這種組合也要有機率,例子是 \(P(Y = \text{Bedroom}, X = \text{餐廳照片}) = 0.0002\)。(17) Bayes rule 用圖片寫出來:\(P(Y = \text{Bedroom}\mid X)\) \(= P(Y = \text{Bedroom}, X) / P(X)\);「Discriminative: Y is simple; X is always given, so not need to model P(X)」,因此「it cannot handle missing data」:例子是一張被黑色方塊遮住一半的臥室照片 \(P(Y = \text{Bedroom}\mid X = \text{部分遮住的照片})\)。(18)「Images and Text」:DALL·E 用「an armchair in the shape of an avocado」生成五張酪梨造型的扶手椅,用「a store front that has the word 'openai' written on it」生成五張招牌,旁邊標 \(P(\text{image}\mid\text{caption})\)。(19)「Conditional Generative Models」:\(P(X \mid Y = \text{Bedroom})\)、\(P(X \mid \text{Caption} = \text{「A black table with 6 chairs」})\),以及「A discriminative model is a very simple conditional generative model of Y」。

「不能處理缺失資料」是這段最實際的一點:判別式模型只學了「給定完整的 \(X\),\(Y\) 是什麼」,如果輸入缺了一塊,它沒有任何原則性的方法去處理。生成式模型有 \(p(X, Y)\),可以把缺的部分積分(加總)掉:\(p(Y\mid X_{\text{可見}}) \propto \sum_{X_{\text{缺}}}p(X_{\text{可見}}, X_{\text{缺}}, Y)\)。這段投影片在課堂上沒有特別講。

條件分佈和 Bayes rule 複習

條件分佈定義為

$$p(x \mid y) = \frac{p(x, y)}{p(y)}$$

意思是:在已知 \(y\) 的情況下,\(x\) 的分佈。把它和 \(p(y\mid x) = p(x,y)/p(x)\) 合在一起,就得到 Bayes rule:

$$p(y \mid x) = \frac{p(x \mid y)\, p(y)}{p(x)}$$

它讓你在「生成方向」\(p(x\mid y)\) 和「辨識方向」\(p(y\mid x)\) 之間轉換,這正是「反向圖學」的數學版本。第 2 講會正式複習。

Generative vs. discriminative:差在建模哪個分佈

你以前學的分類器(logistic regression、一般的 CNN 分類)是 discriminative model:只建模 \(p(y \mid x)\),給圖片回答標籤。它不在乎圖片本身長什麼樣。

Generative model 建模 \(p(x)\) 或 \(p(x, y)\):它必須知道「所有像素一起」的分佈。這難得多(\(x\) 是幾十萬維,\(y\) 可能只有 10 類),但也強大得多:能取樣、能偵測異常,透過 Bayes rule 也能拿來分類。

第 2 講會用 Naive Bayes vs. logistic regression 具體比較這兩者。

什麼是「inverse problem(逆問題)」?為什麼超解析度、補洞、醫學影像都算?

逆問題:已知一個「破壞過程」\(y = A(x) + \text{noise}\),從觀測 \(y\) 推回原本的 \(x\)。

  • 超解析度:\(A\) = 降低解析度,生成目標是 \(p(\text{高解析} \mid \text{低解析})\)
  • 補洞(inpainting):\(A\) = 把部分像素遮掉
  • 上色:\(A\) = 轉成灰階
  • CT 重建:\(A\) = 掃描儀的投影量測
  • 音訊超解析度:\(A\) = 濾掉高頻

難處在於同一個 \(y\) 可能對應無限多個 \(x\)。好的生成模型 \(p(x)\) 提供「什麼樣的 \(x\) 才像真的」的知識,讓你在眾多可能中挑出合理的。所以老師說,這些看似不同的問題「本質上都是 inpainting」。25:02

04應用巡禮

這一段是課堂的大部分時間,主要是展示成果。複習時重點不在記住每個系統,而是看出每個例子對應到上面哪一種能力。

影像

  • 品質的演進:約十年前,能生成模糊的黑白人臉就讓人驚訝。之後幾年主要靠 GAN(第 9–10 講)把畫質推高。15:45
  • Score-based diffusion:Ermon 實驗室的博士生 Yang Song 提出,再把 state of the art 往前推。Stable Diffusion、DALL·E、Midjourney 都建立在這類模型上(第 13、16 講)。16:47
  • 文字生圖:「騎馬的太空人」。模型大概沒看過兩者同框,卻能組合出來,顯示它掌握了概念的組合性。同一個 prompt 取樣多次會得到不同結果,因為這是在機率分佈中取樣。17:48
  • 逆問題:超解析度、上色、inpainting。21:25
  • SDEdit(Ermon 實驗室):給一張粗糙草圖或筆畫,模型把它變成結構相同但逼真的圖。22:25
  • 用文字編輯圖片:「讓鳥展開翅膀」「把盒子打開」。仍會出錯(例如刀子被改壞)。23:29
  • 醫學影像:用 CT 機器的量測當控制訊號,能減少需要的量測次數,也就是減少病人接受的輻射量。25:02

投影片 20–30 的圖:(20) 2014–2018 年 GAN 生成人臉的演進,從模糊的黑白小臉到 2018 年幾可亂真的彩色照片(圖出自 Ian Goodfellow 2019 年的整理)。(21) Song et al. 的 score SDE 生成的兩張 1024×1024 人臉。(22–25) 文字生圖:「An astronaut riding a horse」(月面上騎馬的太空人)、「A perfect Italian meal」(四張滿桌義大利菜)、「泰迪熊穿着戏服,站在太和殿前唱京剧」(中英文提示,生成穿京劇戲服的泰迪熊站在太和殿前)、DALL·E 3 的「咖啡館微縮模型」。(26–27)「Progress in Inverse Problems」:\(P(\text{high resolution}\mid\text{low resolution})\)(Menon et al. 2020,PULSE)、\(P(\text{full image}\mid\text{mask})\)(Liu et al. 2018 的不規則破洞修補)、\(P(\text{color image}\mid\text{greyscale})\)(Antic 2020,DeOldify 老照片上色),以及一張手繪的山水草圖生成逼真風景。(28) Stroke Painting to Image 與 Stroke-based Editing(SDEdit)。(29) Kawar et al. 2023(Imagic)的文字編輯:「A bird spreading wings」「Two kissing parrots」「A photo of an open box」「A photo of a sitting dog」等,每組是原圖與編輯後的圖。(30) 稀疏角度 CT 的示意圖:X 光源和偵測器繞著病人旋轉,量到的是 sinogram \(\mathbf y\),要重建的是斷層影像 \(\mathbf x\),「Forward model \(p(\mathbf y\mid\mathbf x)\) is given by physical simulation」。

語音與音訊

  • WaveNet(2016):深度學習的文字轉語音,明顯比之前的系統自然。它是 autoregressive model(第 3 講)。26:04
  • 2023 年的系統結合了 diffusion 和 autoregressive,有語氣和口音,不再像機器人。
  • 音訊超解析度:從手機等級的低品質訊號補回缺失的頻率。概念和補洞一樣。27:40

投影片 31–33 的圖:(31) WaveNet(van den Oord et al. 2016):一層層的圓點表示輸入、隱藏層、輸出,旁邊是 Parametric、Concatenative、WaveNet、Unconditional、Music 的音檔比較。(32)「Diffusion Text2Speech」(Betker 2023,「Better speech synthesis through scaling」)的兩段音檔。(33) 音訊超解析度(Kuleshov et al. 2017):低解析度、基準方法、他們的重建三張頻譜圖,高頻部分在第三張被補回來。

語言與程式碼

  • 大型語言模型:在大量網路文字上學到「哪些句子合理」的機率分佈。續寫 prompt 本質上也是一種 inpainting(補上後半段)。28:10
  • 2019 年的 GPT-2 對比 ChatGPT:老師問 ChatGPT「怎麼在 CS236 拿 A+」,它甚至知道 CS236 是什麼課。
  • 機器翻譯:以另一種語言為條件生成英文。
  • 程式碼:程式碼也是文字。從函式描述自動補完函式本體,也就是自然語言到形式語言的翻譯。31:50

投影片 34–37 的圖:(34)「Language Generation」:GPT-2(Radford et al. 2019)續寫提示「To get an A+ in deep generative models, students have to」,下方寫 \(P(\text{next word}\mid\text{previous words})\)。(35) ChatGPT 回答「What should I do to get an A+ in CS236 at Stanford?」,列出十幾條建議。(36) 機器翻譯:\(P(\text{English text}\mid\text{Chinese text})\),encoder–decoder 把「知識就是力量」翻成「Knowledge is power」(圖出自 Google AI 部落格)。(37) OpenAI Codex 從函式註解「Parse the list of expenses and return the list of triples (date, value, …)」補完程式碼。

影片、決策、科學

  • 影片:影片可以看成一疊圖片。目前(2023)還很短,但跨畫格的一致性已經不錯。課堂示範的系統可以用文字,或「文字 + 一張起始圖片」控制。33:26
  • 機器人與決策:把一連串動作當成要生成的對象,條件分佈是 \(p(\text{actions} \mid \text{past observations})\)。imitation learning(模仿學習)就是從人類示範中學出「好的行為」的分佈,例如開車、疊積木(用 diffusion model)。38:19
  • 科學:生成有特定性質的分子、蛋白質(胺基酸序列或 3D 結構),用於藥物和催化劑設計。用的仍然是同一套 diffusion / autoregressive 模型。39:59
  • 風險:deepfake。生成內容已經很難和真實區分,有被濫用的可能。42:04

投影片 38–44 的圖:(38–40) 文字生成影片:「Suddenly, the walls of the embankment broke and there was a huge flood」「a couple sledding down a snowy hill on a tire roman chariot style」,以及一段水下光線的影片(轉檔後只看得到第一格)。(41)「Imitation Learning」:\(P(\text{actions}\mid\text{past observations})\),左邊是賽車模擬器的駕駛畫面(Li et al. 2017,InfoGAIL),右邊是機械手臂疊積木(Janner et al. 2022,Diffuser)。(42) 一個 3D 分子結構。(43)「DeepFakes: Which image is real?」:一張使用者的照片經過 SDEdit 和筆刷修改,生成四張髮型、配件不同的人臉。(44) 一段 deepfake 影片。

出處:投影片引用的論文,arXiv 編號都已核對:WaveNet(1609.03499)、Betker(2305.07243)、Kuleshov, Enam & Ermon(1708.00853)、PULSE(2003.03808)、Liu et al.(1804.07723)、Imagic(2210.09276)、InfoGAIL(1703.08840)、Diffuser(2205.09991)。

為什麼「語言模型」也是生成模型?它的 x 是什麼?

把一段文字切成 token(字或子詞)序列 \(x = (x_1, x_2, \dots, x_T)\)。語言模型就是這個序列上的機率分佈 \(p(x_1, \dots, x_T)\)。

它用機率的鏈式法則(chain rule)拆成「一次預測一個 token」:

$$p(x_1,\dots,x_T) = p(x_1)\,p(x_2 \mid x_1)\,p(x_3 \mid x_1, x_2)\cdots = \prod_{t=1}^{T} p(x_t \mid x_{<t})$$

這就是第 3 講的 autoregressive model。ChatGPT 的「回答問題」等於以你的問題為條件,一個 token 一個 token 往下取樣。

05互動 Demo:一個迷你資料模擬器

這個 demo 用最簡單的生成模型 Gaussian Mixture Model(GMM,高斯混合模型),在 2D 平面上走一遍第 3 節的四種能力。它不是「深度」模型,但流程和大模型完全一樣:拿資料 → 學出 \(p(x)\) → 取樣 / 評估 / 條件控制。

每個資料點有一個類別標籤 \(y\)(顏色)。模型對每一類各學一個 GMM,所以同時得到 \(p(x \mid y)\) 和 \(p(x) = \sum_y p(y)\,p(x \mid y)\)。

④ 點畫面任一處,計算 log p(x)
訓練曲線:平均 log-likelihood

建議的操作順序

  1. 學習:按「訓練」,看密度從模糊的團塊變成貼合資料的形狀,訓練曲線往上爬。EM 每一步都保證 log-likelihood 不會下降。
  2. 取樣:按「取樣 300 點」。新點(空心圈)是模型「想像」出來的,不是訓練資料,但分佈相似。
  3. 評估密度:點資料附近和遠處各一下,比較 log p(x)。遠處的點會被標成「異常」,這就是課堂提到的 outlier detection。
  4. 條件控制:把「取樣條件」換成某一類,就只會生成那一類的點,等於 \(p(x \mid y)\)。
  5. 模型容量:把 K 調成 1 再訓練雙螺旋,模型太簡單,抓不到形狀;K = 12 則能貼合(實測平均 log-likelihood:K = 1 約 −3.09,K = 4 約 −1.61,K = 12 約 −1.31)。這是後面每一講都會碰到的表達能力(expressiveness)問題:模型家族要夠大,才能逼近複雜的 \(p_{\text{data}}\)。
GMM 和 EM 演算法在做什麼?(這個 demo 背後的數學)

GMM 假設資料由 \(K\) 個高斯「團」組成。生成一個點的過程是:

  1. 先抽一個隱藏的團編號 \(z \sim \text{Categorical}(\pi_1, \dots, \pi_K)\)
  2. 再從那一團抽點:\(x \sim \mathcal{N}(\mu_z, \Sigma_z)\)

所以密度是

$$p(x) = \sum_{k=1}^{K} \pi_k\, \mathcal{N}(x \mid \mu_k, \Sigma_k)$$

這裡的 \(z\) 就是第 1 節提到的潛在變數,GMM 是最簡單的 latent variable model。第 5 講的 VAE 可以看成「無限多個團、用神經網路決定每團位置」的推廣。

EM 演算法重複兩步:

  • E-step:對每個點算它屬於第 \(k\) 團的機率(responsibility)\(r_{ik} = \dfrac{\pi_k \mathcal{N}(x_i\mid\mu_k,\Sigma_k)}{\sum_j \pi_j \mathcal{N}(x_i\mid\mu_j,\Sigma_j)}\)
  • M-step:用這些機率當權重,重新計算每團的 \(\pi_k, \mu_k, \Sigma_k\)(加權平均和加權共變異數)

EM 是在做 maximum likelihood(第 4 講)。它和 VAE 的關係會在第 5–6 講講清楚。

06為什麼這件事很難:維度災難

老師在講課程大綱時強調:高斯這種簡單分佈不夠用,因為要同時考慮非常多隨機變數之間的關係,例如所有像素怎麼互相影響、句子裡的字怎麼互相連結。44:07

具體有多難?最直接的表示法是查表:列出每一種可能的圖片,記下它的機率。用下面的計算機試試看。

即使是 28×28 的黑白小圖,可能的圖片數也遠超過可觀測宇宙的原子數(約 \(10^{80}\))。查表需要 \(2^{784}-1\) 個參數,不可能存、也不可能從有限資料估計。

所以整門課的核心問題變成:怎麼用「參數不多、但夠有表達力」的方式表示 \(p(x)\)?第 2 講會用 chain rule 和條件獨立開始回答,第 3 講之後則用神經網路。

這裡的計算怎麼來的?

一張圖有 \(d = W \times H \times C\) 個數值,每個值有 \(v\) 種可能,總共有 \(v^d\) 種不同的圖片。聯合分佈要對每一種給一個機率,因為總和必須是 1,自由參數是 \(v^d - 1\) 個。

數字太大存不下,所以計算機顯示的是 \(\log_{10}(v^d) = d \log_{10} v\),也就是「1 後面有幾個 0」。

07課程地圖

三個貫穿全課的主題

主題要回答的問題課堂說法
Representation
表示
怎麼用神經網路表示有很多變數的 \(p(x)\)?要用聰明的方式描述像素之間、字和字之間的互動,並做出取捨。43:35
Learning
學習
怎麼比較 \(p_{\text{data}}\) 和 \(p_\theta\),讓它們接近?不同損失函數本質上是比較兩個分佈的不同方式。選哪種相似度,就得到哪種模型。45:08
Inference
推論
怎麼有效率地取樣?怎麼從 \(x\) 反推潛在表示?有分佈不代表能輕易取樣;推論和非監督學習、分群、特徵有關。46:08

投影片 45 的圖(「Roadmap and Key Challenges」):三個條目 Representation(需要精簡的表示)、Learning(比較機率分佈的正確方式是什麼?)、Inference(怎麼把生成過程倒過來?例如視覺即反向圖學;非監督學習:從原始資料找出高層描述)。Learning 旁的小圖是之後每一講都會出現的示意:左邊是一些狗的照片 \(x_i\sim P_{\text{data}}\),右邊一團綠色的「Model family」\(P_\theta,\ \theta\in M\),兩者之間的箭頭標 \(d(P_{\text{data}}, P_\theta)\)。

監督式 vs. 非監督式學習,以及「比較兩個分佈」

監督式學習:有成對資料 \((x, y)\),學 \(x \to y\)。非監督式學習:只有 \(x\),沒有標籤。生成模型基本上是非監督的,只看 \(x\) 就要學 \(p(x)\)。老師說:「you have the x, but you don't have the y」。

「比較兩個分佈」最常見的工具是 KL divergence:

$$D_{\mathrm{KL}}(p_{\text{data}} \,\|\, p_\theta) = \mathbb{E}_{x\sim p_{\text{data}}}\!\left[\log \frac{p_{\text{data}}(x)}{p_\theta(x)}\right] \ge 0$$

它等於 0 若且唯若兩分佈相同。第 4 講會證明:最小化這個 KL 等價於 maximum likelihood。GAN 則改用其他的分佈距離(f-divergence、Wasserstein)。現在先記住「學習 = 讓兩個分佈接近」就好。

六大模型家族

依課堂順序,模型可以按「怎麼表示分佈」分組:47:41

Autoregressive

直接給出 likelihood。用 chain rule 一次生成一個元素。LLM、WaveNet。
第 3 講

Normalizing Flow

直接給出 likelihood。把簡單分佈經過可逆變換變成複雜分佈,常用於連續資料。
第 7–8 講

Latent variable / VAE

用潛在變數提高表達力,以 variational inference 訓練。
第 5–6 講

Implicit / GAN

不表示 \(p(x)\),只表示「取樣過程」。取樣快,但沒有 likelihood,要改用 two-sample test、f-divergence 訓練。
第 9–10 講

Energy-based

只定義未正規化的「能量」,很有彈性,但正規化常數難算。
第 11–12 講

Score-based / Diffusion

學 \(\nabla_x \log p(x)\),逐步去噪生成。目前影像、音訊、影片的 state of the art。
第 13–14、16–18 講

另一種分法(Lai et al. 2026 §1.3「Taxonomy of Modeling」):看模型是否明確寫出 \(p_\theta(x)\)。明確且 likelihood 可精確計算的有 flow 和 autoregressive(用 MLE 訓練);明確但只有下界或近似的有 VAE 和 diffusion(用 ELBO 訓練);隱式的只有取樣程序,例如 GAN(用對抗式目標訓練)。

老師怎麼說 · 48:45Implicit model 的取捨:直接表示取樣過程,所以生成很有效率;但沒有 likelihood,就不能用 maximum likelihood 這類我們理解很透徹、效果也很好的方法來訓練。48:45

08修課資訊(2023 年版)

你是自學,這段只做參考,但可以知道作業和專題的設計。51:50

  • 沒有教科書:有課程講義(course notes),部分內容可參考 Goodfellow 等人的《Deep Learning》。
  • 評分:3 份作業各 15%(概念題加程式)、期中考 15%、期末專題 40%(提案 5%、進度報告 10%、海報 10%、期末報告 15%)。53:22
  • 專題常見方向:把現有模型用在新資料集;改進模型(例如替 diffusion 加一點 GAN 訓練);理論分析。最多 3 人一組,課程提供 Google Cloud 額度,過去的專題可以看 2019 和 2021 年版的課程網站(投影片 50 列的是 deepgenerativemodels.github.io/2019)。54:24 56:25

投影片 46–50:課綱(fully observed likelihood-based:autoregressive、flow;latent variable:variational learning、inference amortization、VAE;implicit:two-sample test、embedding、f-divergence、GAN;energy-based;score-based diffusion)、先修、修課資訊(課程網站、講義、11 位助教)、評分與專題。

常見誤解

誤解:「生成模型就是會畫圖的模型」。它的本質是機率分佈。能畫圖(取樣)只是用法之一,評估機率、條件生成、取得表示一樣重要。
誤解:「能算 \(p(x)\) 就能取樣」或反過來。兩者是不同的能力。GAN 能取樣但不能算 \(p(x)\);energy-based model 能算未正規化的 \(p(x)\) 卻很難取樣。
誤解:「機率密度不能大於 1」。連續變數的密度可以大於 1,只有積分(機率)要在 0 到 1 之間。
誤解:「生成得好就代表模型真正理解」。Feynman 的論證只給出「理解 → 能生成」。反方向是老師提出的動機和直覺,不是邏輯保證。
誤解:「資料夠多就不需要先驗」。先驗永遠存在,藏在架構、損失函數、最佳化器裡。差別只在比例。

自我測驗

1. 用一句話說明本課所說的「生成模型」在數學上是什麼。
一個定義在資料空間上的機率分佈 \(p_\theta(x)\),參數 \(\theta\) 從資料學出來,目標是讓它接近真實資料分佈 \(p_{\text{data}}(x)\)。
2. 「What I cannot create, I do not understand」的逆否命題是什麼?它推得出「能生成 → 理解」嗎?
逆否命題是「若理解,則能創造」。推不出「能生成 → 理解」,那是逆命題,邏輯上不等價。
3. 文字生圖、黑白照片上色、機器翻譯,用機率語言統一描述是什麼?
都是條件生成:從 \(p(x \mid y)\) 取樣。\(y\) 分別是 caption、黑白照片、另一種語言的句子;\(x\) 分別是圖片、彩色照片、英文句子。
4. 生成模型怎麼做異常偵測?需要模型具備哪種能力?
計算新輸入的 \(p_\theta(x)\)(或 \(\log p_\theta(x)\)),如果遠低於訓練資料的典型值,就判為異常。需要模型能評估密度。純 GAN 沒有這個能力。
5. 一張 32×32 的 RGB 圖、每個值 256 種,用查表表示聯合分佈需要多少參數?
\(d = 32\cdot32\cdot3 = 3072\),可能的圖片數是 \(256^{3072} = 2^{24576} \approx 10^{7398}\),參數數是這個數減 1。完全不可行。
6. Discriminative 和 generative model 各建模哪個分佈?為什麼後者比較難?
Discriminative 建模 \(p(y\mid x)\);generative 建模 \(p(x)\) 或 \(p(x,y)\)。後者要描述高維 \(x\) 所有分量之間的聯合關係,而前者只需要輸出低維的 \(y\)。
7. 為什麼 implicit model(例如 GAN)不能用 maximum likelihood 訓練?
Maximum likelihood 要計算訓練資料的 \(\log p_\theta(x)\)。Implicit model 只定義取樣過程(雜訊 → 生成器 → \(x\)),沒有可計算的 \(p_\theta(x)\),所以必須改用其他比較分佈的方法(two-sample test、f-divergence 等)。
8. 在 demo 中,K = 1 時雙螺旋擬合得很差。用課程語言解釋原因。
模型家族的表達能力不足:每類只有一個高斯,只能表示一個橢圓團,無論怎麼訓練都無法逼近螺旋形狀的 \(p_{\text{data}}\)。這對應 representation 的問題:要選一個夠大的模型家族,再在其中用 learning 找最接近的。
9. 老師提到深度生成模型的「先驗知識」藏在哪三個地方?
網路架構、損失函數、最佳化器。

延伸閱讀