MIT 6.S184 第 3B 講 · Guidance
MIT 6.S184 · 第 3 講下半 · 2026 年 1 月 23 日

Classifier-Free Guidance:讓模型聽提示詞的話

直接把提示詞餵給網路,結果卻不夠貼題。解法是放大「和提示詞有關的那一部分」:\(\tilde u=(1-w)u(x\mid\varnothing)+w\,u(x\mid y)\)。公式來自分類器,卻完全不需要分類器。代價是生成的分佈已經不再是資料分佈。

讀完這頁你應該能夠

  1. 寫出 vanilla guidance 的訓練和取樣,說明它和無條件版本只差哪裡。
  2. 用 Bayes 定理,把 \(u(x\mid y)\) 拆成 \(u(x)\) 加上分類器的梯度。
  3. 解釋 classifier guidance 的兩個困難。
  4. 一步一步推出 CFG 的公式,並用數字驗算。
  5. 寫出 CFG 的訓練和取樣演算法,說明丟標籤和每步呼叫兩次的原因。
  6. 說明 \(w\gt1\) 時為什麼不再是從資料分佈取樣,以及它的好處和壞處。

前置知識檢查

  • 上半段:score 的定義和轉換公式 \(u=a_t\nabla\log p_t+b_tx\)。這一頁會用很多次。
  • 第 2 講:訓練演算法。
  • Bayes 定理:\(p(x\mid y)=\frac{p(y\mid x)p(x)}{p(y)}\)。
  • 對數的規則:\(\log\frac{ab}{c}=\log a+\log b-\log c\)。
  • 分類器:輸入 \(x\),輸出每個類別的機率 \(p(y\mid x)\)。

這一頁怎麼讀、記號

逐字稿是 YouTube 自動字幕,有疑問時以黑板和投影片為準。部分學生的提問麥克風沒收到,那些問答的標題是從老師的重述和回答推測的。

「條件」這個詞撞名了。\(u(x\mid z)\) 的條件是資料點,\(u(x\mid y)\) 的條件是提示詞,長得很像,意思不同。講義的用法:對 \(z\) 叫 conditional,對 \(y\) 叫 guided。
記號意思
\(y\)、\(\mathcal Y\)提示詞或類別標籤;\(\mathcal Y\) 是所有可能的 \(y\) 的集合,例如所有文字,或有限個類別。講義對它沒有任何限制
\(u_t^{\text{target}}(x\mid z)\)條件向量場(有公式),訓練目標
\(u_t^{\text{target}}(x\mid y)\)導引(guided)向量場:只看提示詞為 \(y\) 的資料的邊際向量場
\(u_t^{\text{target}}(x)\)、\(u_t^{\text{target}}(x\mid\varnothing)\)無導引的向量場,後者用空標籤 \(\varnothing\) 表示
\(\tilde u_t(x\mid y)\)放大後的向量場
\(w\)guidance scale,\(w=1\) 是不放大
\(a_t,b_t\)上半段的轉換係數,\(u=a_t\nabla\log p_t+b_tx\)
下面有些式子為了簡潔,會省略上標 target 和下標 \(t\)。

CS236 對照:第 17 講的 conditional 一節用 score 寫同一件事。\(w\) 的定義差 1:CS236 第 17 講和 Ho & Salimans 的論文都寫成 \((1+w)\epsilon_\theta(\cdot,y)-w\epsilon_\theta(\cdot)\),所以那邊的 \(w=0\) 才是不放大,等於這門課的 \(w=1\)。

01為什麼要 guidance(投影片 24–25)

到目前為止模型只會「生成一張圖」。實際上我們要的是「生成一張蔬菜做的車」 00:09。

投影片 25 的圖:三張 Stable Diffusion 3 論文的生成圖,各附提示詞,包括一輛蔬菜做的車。下方:Unguided:「生成一張圖」;Guided:「生成一張貓烤蛋糕的圖」。

數學上,就是從 \(p_{\text{data}}(\cdot\mid y)\) 取樣,而且一個模型要能處理任何 \(y\),不是每個提示詞訓練一個。

02Vanilla guidance(投影片 26)

最直接的做法:把提示詞多餵給網路 01:11。

黑板:vanilla guidance
板書(04:36):資料分佈 \((z,y)\sim p_{\text{data}}\),旁邊寫 pairs!;guided VF \(u_t^\theta(x\mid y)\in\mathbb R^d\);guided FM loss,紅色箭頭標 prompt 指著網路多出來的 \(y\),下標是 \((z,y)\sim p_{\text{data}}\)(底下畫了紅線,這是另一個改變的地方)。老師擋住了左邊的標籤。
  1. 資料變成成對的:\((z,y)\sim p_{\text{data}}\),例如圖片和它的說明文字。寫成程式,就是每個 batch 同時回傳 \(z\) 和 \(y\)。
  2. 網路多一個輸入:\(u_t^\theta(x\mid y)\),也就是輸入 \((x,y,t)\)、輸出 \(\mathbb R^d\) 的向量。
  3. 損失幾乎不變: $$\begin{aligned}&L_{\text{CFM}}^{\text{guided}}(\theta)\\&=\mathbb E\big[\Vert u_t^\theta(x\mid y)-u_t^{\text{target}}(x\mid z)\Vert^2\big]\end{aligned}$$ 其中 \((z,y)\sim p_{\text{data}}\)、\(t\sim\mathrm{Unif}\)、\(x\sim p_t(\cdot\mid z)\)。

為什麼這樣就對(講義的論證):固定一個 \(y\),把 \(p_{\text{data}}(\cdot\mid y)\) 當成資料分佈,就回到上一講的問題,訓練目標還是條件向量場。再對所有 \(y\) 取期望值,就是上面的式子。網路看得到 \(y\) 但看不到 \(z\),所以學到的是「在提示詞 \(y\) 下」的邊際向量場。

投影片 26 的圖:Algorithm 7:選提示詞 \(y\),例如「a cat baking a cake」;初始化 \(X_0\sim p_{\text{init}}\);模擬 \(\mathrm dX_t=u_t^\theta(X_t\mid y)\mathrm dt\)。

老師說,取樣完全不變,只是每一步都把提示詞餵給網路 04:48。如果世界完全符合理論,這一節就結束了。

目標向量場要不要依賴 \(y\)?· 06:19可以,原則上這些東西都能依賴提示詞,理論的走法大致一樣,但那會增加記號的負擔,實務上也沒人這樣做。條件向量場定義的是怎麼加雜訊,老師說他也不知道要怎麼讓它依賴提示詞。(他似乎是說這個定義對所有影像通用,但字幕這句是「I'm not sure」,意思不明確。)
能不能學一個依賴提示詞的加雜訊方式?· 07:19也許可以,也許文獻裡有人做過。只是實務上不這樣做。
一句話帶走:資料抽成對的 \((z,y)\),網路多吃一個 \(y\),其他都和第 2 講一樣。

03結果不夠好(投影片 27)

投影片 27 的圖:提示詞「Corgi dog」,六張 ImageNet 上訓練的模型生成的圖,看得出狗的風格,但不太像柯基,有的還有錯誤。紅字:這些圖不貼題,而且有錯誤。圖片出自 Classifier-free diffusion guidance。

老師 05:19:理論上應該已經完成了,實際上卻不理想。我們必須想辦法強化提示詞。

講義列的可能原因:模型欠擬合(underfit,模型太弱或訓練不夠),沒有真的學到邊際向量場;資料本身也不完美,網路上的圖文配對有很多錯誤。後者在 Demo B 會看到。

04Classifier guidance(投影片 28–29)

要去掉分類器,得先有分類器 08:36。

黑板:classifier guidance 推導
板書(13:50):Bayes' rule,取 log,框起來的 score 等式;再用 Conversion formula,框起來的向量場等式。

推導

  1. Bayes 定理(\(x\) 是時間 \(t\) 的有雜訊影像,所以機率都帶下標 \(t\)。這裡和講義一樣用高斯機率路徑,轉換公式才有現成的 \(a_t,b_t\)):$$p_t(x\mid y)=\frac{p_t(y\mid x)\,p_t(x)}{p_t(y)}$$
  2. 取對數 10:09: $$\begin{aligned}&\log p_t(x\mid y)\\&=\log p_t(y\mid x)+\log p_t(x)\\&\quad-\log p_t(y)\end{aligned}$$
  3. 對 \(x\) 取梯度:\(\log p_t(y)\) 不含 \(x\),消失: $$\begin{aligned}\nabla\log p_t(x\mid y)=\ &\nabla\log p_t(y\mid x)\\&+\nabla\log p_t(x)\end{aligned}$$ 導引的 score = 分類器的梯度 + 無導引的 score。
  4. 用轉換公式 \(u=a_t\nabla\log p_t+b_tx\)(對 \(p_t(\cdot\mid y)\) 也成立,因為固定 \(y\) 就是把它當資料分佈): $$\begin{aligned}u(x\mid y)&=a_t\nabla\log p_t(x\mid y)+b_tx\\&=a_t\nabla\log p_t(y\mid x)\\&\quad+a_t\nabla\log p_t(x)+b_tx\end{aligned}$$ 後兩項加起來就是 \(u(x)\):
分解$$\begin{aligned}u(x\mid y)=\ &\underbrace{u(x)}_{\text{和提示詞無關}}\\&+\underbrace{a_t\nabla\log p_t(y\mid x)}_{\text{和提示詞有關}}\end{aligned}$$

為什麼 \(p_t(y\mid x)\) 叫分類器 14:23:給一張圖 \(x\),告訴你它是類別 \(y\) 的機率。所以第二項是沿著「讓分類器更相信這是 \(y\)」的方向走。

手算 固定 \(t\),\(d=1\),只看 \(p_t\) 的形狀:兩類機率各半,\(p(x\mid+)=\mathcal N(1,1)\)、\(p(x\mid-)=\mathcal N(-1,1)\)。在 \(x=0\):
  • 導引 score:\(\mathcal N(1,1)\) 的 \(\log p\) 是 \(-\frac{(x-1)^2}{2}\) 加常數,微分得 \(-(x-1)\),在 0 是 1。
  • 無導引 score:\(p(x)\) 是兩個高斯各半的混合,對 0 左右對稱,頂點或谷底的斜率是 0,所以 score 是 0。
  • 分類器:Bayes 定理給 \(p(+\mid x)=\frac{p(x\mid+)}{p(x\mid+)+p(x\mid-)}\)(機率各半,\(\tfrac12\) 約掉)。兩個高斯相除,\(\frac{p(x\mid-)}{p(x\mid+)}=e^{\frac{(x-1)^2-(x+1)^2}{2}}=e^{-2x}\),所以 \(p(+\mid x)=\frac{1}{1+e^{-2x}}\)。取 log 是 \(-\log(1+e^{-2x})\),微分得 \(\frac{2e^{-2x}}{1+e^{-2x}}\),在 0 是 1。
\(1=0+1\),等式成立。意思是:在正中間,往 \(+\) 走,分類器就更相信是 \(+\)。

放大它

現在做那個直覺的動作 15:54:既然圖不夠貼題,就把和提示詞有關的那部分放大。

黑板:放大分類器
板書(17:55):標題是 Idea: Reinforce classifier(這格畫面切到左半),下面是 \(w\ge1\) 和 \(\tilde u^w(x\mid y)=u(x)+w\,a_t\nabla\log p_t(y\mid x)\),\(w\) 用橘色粉筆描過。
Classifier guidance$$\begin{aligned}\tilde u_t(x\mid y)=\ &u_t(x)\\&+w\,a_t\nabla\log p_t(y\mid x)\end{aligned}$$其中 \(w\ge1\)。
投影片 28–29 的圖:向量圖。黑色 \(u^{\text{target}}(x)\) 標 No prompt,往上;橘色 \(a_t\nabla\log p_t(y\mid x)\) 標 prompt-dependent;藍色是兩者的和 \(u^{\text{target}}(x\mid y)\)。投影片 29 把橘色拉長成 \(wa_t\nabla\log p_t(y\mid x)\),紅色的 \(\tilde u^w\) 就是 prompt-reinforced vector field。

為什麼不是故事的結尾

有學生答出:要多訓練一個分類器 18:38。老師補充:

  • 兩個模型,工作量加倍。
  • 不能用現成的分類器,因為 \(x\) 是有雜訊的資料,要在有雜訊的影像上訓練。
  • \(y\) 是文字時不是一個類別,而是一長串文字,這個機率和它的梯度可能都很難算。

老師說過去真的有人這樣做,diffusion model 有一段時間就是這樣導引的,現在已經不太用了 18:07。講義引用的是 Dhariwal & Nichol (2021) 和 Song et al. (2021),也說它大致已經被 CFG 取代。

一句話帶走:\(u(x\mid y)=u(x)+a_t\nabla\log p_t(y\mid x)\)。放大第二項就更貼題,但要有分類器。

05去掉分類器(投影片 30–31)

目標:不訓練分類器,達到同樣的效果 19:39。簡稱 CFG,論文裡常見。

黑板:CFG 推導
板書(25:53):「6.3 Classifier-free guidance (CFG)」,從上到下四行,就是下面的推導。第二行的 \(+b_tx-b_tx\) 寫在同一個括號裡,下面第 2 步只是把它們分組。圈起來的 ① 指向上一節框起來的 score 等式,左邊標 Conversion formula。最後一行的兩項標著 guided! 和 unguided!,老師的頭擋住了中間的 \((1-w)\)。

推導

只用上一節的那條 score 等式,把分類器解出來:\(\nabla\log p_t(y\mid x)\) 等於 \(\nabla\log p_t(x\mid y)-\nabla\log p_t(x)\)。

  1. 代入 22:43: $$\begin{aligned}\tilde u=u(x)+w\,a_t\big(&\nabla\log p_t(x\mid y)\\&-\nabla\log p_t(x)\big)\end{aligned}$$
  2. 加減 \(w\,b_tx\),湊出轉換公式 23:13: $$\begin{aligned}\tilde u=\ &u(x)\\&+w\big(a_t\nabla\log p_t(x\mid y)+b_tx\big)\\&-w\big(a_t\nabla\log p_t(x)+b_tx\big)\end{aligned}$$
  3. 認出向量場 23:43:兩個括號分別是 \(u(x\mid y)\) 和 \(u(x)\): $$\tilde u=u(x)+w\big(u(x\mid y)-u(x)\big)$$
  4. 整理:
Classifier-free guidance$$\begin{aligned}\tilde u_t(x\mid y)=\ &(1-w)\,u_t(x)\\&+w\,u_t(x\mid y)\end{aligned}$$

課堂 23:13 那一步老師先寫錯,隨即改成把 \(a_t\) 放進括號,上面是修正後的版本。

老師問:這個公式哪裡驚人? 24:45 裡面只有向量場,沒有分類器了。我們從分類器的直覺出發,最後卻不用學它。那個分類器完全是假想的 28:51。

u(x)u(x|y) − u(x)放大 w 倍ũ(w = 3)只放大「和提示詞有關」的那一段
投影片 31 的圖重畫。藍色是 \(u(x\mid y)\),橘色是 \(u(x\mid y)-u(x)\),它取代了上一節分類器的箭頭。沿著同一個方向多走幾倍,就得到 \(\tilde u\)。
投影片 30–31 的圖:和投影片 28–29 相同的向量圖,但分類器的箭頭換了標籤。投影片 30 是灰色的 \(u^{\text{target}}(x\mid y)-u^{\text{target}}(x)\);投影片 31 把它拉長成橘色的 \(w(u^{\text{target}}(x\mid y)-u^{\text{target}}(x))\),紅色的 \(\tilde u^w\) 一樣是 prompt-reinforced vector field。
手算 接續上面的例子,用 score 來算(少了 \(a_t,b_t\),形狀相同)。\(x=0\),導引 1、無導引 0。\(w=4\):
  • classifier guidance:\(0+4\times1=4\)。
  • CFG:\((1-4)\times0+4\times1=4\)。
相同。\(w=1\):\(0\times0+1\times1=1\),就是原本的導引 score。老師也用這個檢查 26:04。
一句話帶走:\(\tilde u=u(x)+w(u(x\mid y)-u(x))\):兩個向量場的差,就代表分類器。

Demo A同一個向量,兩種算法

怎麼看:三群資料,提示詞是 A(藍圈)。點畫面可以移動位置 \(x\)。灰色箭頭是 \(u(x\mid\varnothing)\),藍色是 \(u(x\mid A)\),橘色是放大後的差,紫色是最後的 \(\tilde u\)。
  • 讀數最後兩行是同一個向量的兩種算法:一行把分類器 \(p_t(A\mid x)\) 真的算出來再取數值微分,一行只用兩個向量場。預設點都是 \((-4.625,10.030)\)。這就是第 5 節的推導。
  • \(w=1\) 時兩行都變成 \(u(x\mid A)=(-1.000,3.400)\),也就是 vanilla guidance。
  • 預設點的分類器機率是 0.433,還不太確定。\(w=3\) 時 \(\tilde u\) 比 \(u(x\mid A)\) 長得多,方向也更偏離其他類別:放大的是「怎樣更像 A」這個方向。

06一個網路、空標籤

分類器沒了,但公式裡有兩個向量場,感覺還是要訓練兩個模型?老師說最後一步是個很簡單的技巧 26:34:定義一個空標籤 \(\varnothing\),代表「不告訴你提示詞」,並令

$$u_t(x)=u_t(x\mid\varnothing)$$

例如類別是 10 個數字時,就多一個第 11 類。老師的說法是定義一個額外的類別,模型不該知道提示詞時就給它這個類別。

黑板:empty token
板書(28:34):Empty token \(\varnothing\);\(\tilde u^w(x\mid y)=w\,u^\theta(x\mid y)+(1-w)\,u^\theta(x\mid\varnothing)\),\(\varnothing\) 旁邊標 missing prompt。兩項的順序和下面的公式相反,內容相同。
x, t, y = 狗同一個網路u(x|狗)x, t, y = ∅同一個網路u(x|∅)取樣時每一步呼叫兩次,再加權 (1−w)、w
同一個網路既能有提示詞,也能沒有。
Classifier-free guidance(最終形式)$$\begin{aligned}\tilde u_t^\theta(x\mid y)=\ &(1-w)\,u_t^\theta(x\mid\varnothing)\\&+w\,u_t^\theta(x\mid y)\end{aligned}$$
投影片 34–35 的圖:投影片 34 是柯基,左 \(w=1.0\),右 \(w=4.0\),右邊全都是清楚的柯基。投影片 35 是貓、柯基、火山三組,每組左右各六張,右邊的圖都比左邊貼題;這一頁沒有標 \(w\)。

老師 29:57:\(w=4\) 的狗非常貼題。實際上所有模型都用它,沒有它根本不行。講義也說,幾乎所有 AI 生成的圖和影片都大量使用 CFG,\(w\ge4\)。

一句話帶走:多一個「不告訴你提示詞」的標籤 \(\varnothing\),一個網路就能同時給出 \(u(x\mid y)\) 和 \(u(x)\)。

07訓練與取樣(投影片 32–33)

訓練只要改一行:有時候不告訴模型提示詞 30:27。

CFG 訓練
  1. 抽一對 \((z,y)\),抽 \(t\),抽 \(\epsilon\);令 \(x=\alpha_tz+\beta_t\epsilon\)。
  2. 以機率 \(\eta\) 令 \(y\leftarrow\varnothing\)。
  3. 損失 \(\Vert u_t^\theta(x\mid y)-(\dot\alpha_tz+\dot\beta_t\epsilon)\Vert^2\),梯度下降。

老師舉的例子是 20% 的時間不給提示詞。網路要學會有提示詞時跟著走,也要學會沒提示詞時怎麼辦。改動非常小,所以才這麼好用,全部包在同一個訓練裡 31:28。

為什麼 \(y=\varnothing\) 學到的正好是 \(u(x)\):丟標籤是隨機決定的,和 \(z\) 無關,所以 \(y=\varnothing\) 的那些資料,就是從整個資料分佈 \(p_{\text{data}}(z)\) 抽的。對這批資料做回歸,等於第 2 講沒有提示詞的訓練,學到的就是無導引的邊際向量場。(這段是轉述者補充,講義只說把 \(\varnothing\) 當成「沒有條件」。)

投影片 32 的圖:Algorithm 5,第 6 行紅字:Drop label with a certain probability!。投影片寫機率 \(p\),講義同時用 \(p\) 和 \(\eta\),是同一個東西。
CFG 取樣
  1. 選提示詞 \(y\) 和 \(w\gt1\);抽 \(X_0\sim p_{\text{init}}\)。
  2. 模擬 \(\mathrm dX_t=\tilde u_t^\theta(X_t\mid y)\,\mathrm dt\),也就是每一步都用上面那個加權的向量場。
  3. 回傳 \(X_1\)。
投影片 33 的圖:Algorithm 8,紅字標 guidance scale \(w\gt1\) 和那行加權的向量場。也註明可以取 \(y=\varnothing\) 做無導引取樣。上方的公式把加權後的向量場寫成 \(u_t^{\theta,w}(x)\),就是這裡的 \(\tilde u_t^\theta(x\mid y)\),只是省略了 \(y\)。
手算一步 \(d=1\),\(h=0.1\),\(X_t=0.5\),\(w=4\)。假設網路回 \(u(x\mid y)=2\)、\(u(x\mid\varnothing)=1\)。\(\tilde u=-3\times1+4\times2=5\),\(X_{t+h}=0.5+0.1\times5=1\)。如果 \(w=1\),\(\tilde u=2\),只會走到 0.7。

講義的 Remark:擴充到 SDE 時,把 \(u_t^\theta(x\mid y)\) 換成 \(\tilde u_t^\theta(x\mid y)\) 就好。\(\tilde u=(1-w)u+wu(\cdot\mid y)\) 這個構造也對任何機率路徑都有意義,高斯只是用來看出分類器的直覺。

一句話帶走:訓練時多一步隨機丟標籤;取樣時每步呼叫網路兩次,再用 \((1-w)\)、\(w\) 加權。

08CFG 是 heuristic(投影片 36–37)

有學生問:這在理論上站得住腳嗎?到底是從什麼分佈取樣? 33:33 老師的回答:它是一個 heuristic(經驗法則:有道理、也好用,但沒有嚴格的保證)。

這是這門課第一次離開「從資料分佈取樣」。\(w\neq1\) 時,\(\tilde u\neq u(x\mid y)\),\(X_1\) 一般不再服從 \(p_{\text{data}}(\cdot\mid y)\)。理論上如果訓練完美、資料完美,根本不需要 CFG。它主要是靠優秀的實驗結果來證明自己。
投影片 36–37 的圖:投影片 36 的標題是幾乎所有你看到的圖和影片都用 CFG,寫著沒有它幾乎什麼都行不通;下面是 Stable Diffusion 3 的三張圖,紅框 \(w\approx4\)。投影片 37 的標題是 CFG 不再模擬資料分佈;四張小圖最左邊是資料分佈,往右 guidance 變強,三個團越來越集中,而且彼此遠離。圖出自 Classifier-free diffusion guidance。

老師的解讀 34:03:可以想成把分佈往定義這個類別的眾數(mode,機率密度最高的地方)推。他還提到一個有趣的現象 34:34:測量文字和圖片的吻合程度,現代模型生成的結果可能比網路上隨機的圖文配對還好。網路資料有錯誤的說明文字,模型某種意義上超越了它。代價是不再從同一個分佈取樣,多樣性會下降。

所以老師的結論是:「從資料分佈取樣」是個好的建模假設,但要知道它只是近似,CFG 已經超出了它。

口頭的小問題:33:01 老師說 Stable Diffusion 3 的 \(w=4\) 是把貢獻「放大三倍,因為 4−1」。依公式,和提示詞有關的項乘的是 \(w=4\),相對於沒有放大的 \(w=1\) 是 4 倍。3 倍是多出來的部分,因為 $$\begin{aligned}\tilde u=\ &u(x\mid y)\\&+(w-1)\big(u(x\mid y)-u(x)\big)\end{aligned}$$

一個形狀上的直覺(轉述者補充) 固定 \(t\) 看 score 的等式:\(\nabla\log p(x)+w\nabla\log p(y\mid x)\) 就是 \(\nabla\log\big[p(x)\,p(y\mid x)^w\big]\)。所以在單一時刻,它是把 \(p(x)\) 乘上分類器機率的 \(w\) 次方。\(p(y\mid x)\) 接近 1 的地方幾乎不變,機率小的地方被壓得更小,於是分佈被推離其他類別。但這只是單一時刻的 score,整條 ODE 下來的 \(X_1\) 一般不是這個分佈。可以用 Demo B 的設定驗算:標籤完全正確、\(w=4\) 時,直接對 \(t=1\) 的 \(p(x)\,p(A\mid x)^4\) 做數值積分,平均距離 2.65、標準差 0.50,幾乎就是 A 群本身;實際模擬出來卻是 3.50 和 0.33。所以這個形狀只能當直覺,不能當答案。
一句話帶走:\(w\gt1\) 換來更貼題,代價是不再從資料分佈取樣、多樣性下降,而且只有實驗結果支持。

Demo Bw 會做什麼

怎麼看:三群資料,標準差 0.5。向量場用公式算(沒有訓練),用 100 步 Euler 法(每步 \(X_{t+h}=X_t+h\,\tilde u\))模擬 1,200 個粒子;彩色點是終點,細線是 12 條路徑。標籤錯誤率模擬網路上錯誤的說明文字:提示詞 A 的資料中,有這個比例其實來自另外兩群。
  • 標籤錯誤率 20%:\(w=1\) 時 82.0% 落在 A 群,就是資料裡的 80%(\(w=1\) 忠實重現資料);\(w=2\) 是 97.3%,\(w=4\) 是 100.0%。這就是老師說的比資料還貼題。\(w=0\) 不看提示詞,35.0%,就是三群之一(1,200 個粒子的抽樣誤差讓它不剛好是 33.3%)。
  • 副作用:到原點的平均距離從 2.64(\(w=1\))變成 3.32(\(w=4\))、4.04(\(w=10\)):粒子在遠離另外兩群,\(w=10\) 時平均已經跑到圓圈(中心 2.6、半徑 1,也就是到原點 3.6)之外。該群的標準差從 0.50 降到 0.35、0.30,多樣性下降。這和投影片 37 的圖一樣。
  • 把錯誤率設成 0:\(w=1\) 已經 100.0%,\(w=4\) 沒有好處,只有扭曲(距離 3.50、標準差 0.33)。錯誤率 50% 時,\(w=1\) 是 51.3%,\(w=4\) 是 85.8%。

09課堂問答與代價

\(w\lt1\) 呢?· 35:34會弱化提示詞,結果比較不依賴提示詞。這也是可行的。(講義補充:\(w\neq1\) 都不是真正的導引向量場,\(w\lt1\) 也一樣。)
\(w\) 很大會怎樣?· 36:34圖片會非常飽和。例如貓:除了貓以外的變化都消失,塌縮(所有樣本擠向少數幾種樣子)到眾數。
往反方向呢?· 37:04大概就是避開那個提示詞:生成一張盡量不像貓的圖。(往反方向就是 \(w\lt0\):\(\tilde u=u(x)+w(u(x\mid y)-u(x))\) 的第二項變號。這個式子是轉述者加的。)老師說他不知道那應該長什麼樣子,但確實可以做。

CFG 的代價

老師問大家它有什麼缺點。學生的回答麥克風沒收到,老師接著說:對,這個方法主要靠好的實驗結果來證明 36:04,這是我們得接受的。他再補一個實際的 37:34:每一步要呼叫網路兩次,一次有提示詞、一次沒有,所以效率減半。可以接受,但要記得。

VanillaClassifier guidanceCFG
要訓練的模型12(含有雜訊資料上的分類器)1(丟標籤)
每步呼叫網路11 + 分類器梯度2
文字提示詞可以很難可以
取樣自 \(p_{\text{data}}(\cdot\mid y)\)理論上是\(w\gt1\) 時不是\(w\gt1\) 時不是
一句話帶走:CFG 每步要呼叫網路兩次;\(w\) 大會塌縮,\(w\lt1\) 會弱化提示詞。

Demo C親手訓練 CFG

和 Demo B 同樣的資料,這次真的訓練:網路輸入多了 4 維的 one-hot(只有一個位置是 1、其他是 0 的向量;四個位置是 A、B、C、\(\varnothing\)),每筆資料有 20% 機率把標籤換成 \(\varnothing\)。3,000 步,電腦上大約 11 秒,手機可能更久。取樣 30 步,每步呼叫網路兩次。

怎麼看:按開始訓練,完成後讀數會列出提示詞 A、各個 \(w\) 的結果。訓練後拖動 \(w\),不用重新訓練,但每次都要重新取樣,電腦上會停頓約半秒。
  • 標籤錯誤率 20%(預設):提示詞 A,\(w=0\)、1、2、4、8 的正確比例是 33.0%、78.8%、95.6%、99.8%、100.0%,平均距離是 2.52、2.48、2.73、3.16、4.17。正確比例和 Demo B 用公式算的幾乎相同,代表網路真的學到了;距離比公式(2.64、2.90、3.32、3.84)多少有差,\(w=8\) 差最多,約 0.33。
  • 標籤完全正確:同樣的 \(w\) 是 32.0%、100.0%、100.0%、100.0%、100.0%。這個簡單資料在 \(w=1\) 就已經正確。真實影像上 vanilla guidance 為什麼不夠貼題,除了標籤錯誤還有欠擬合(模型太弱或訓練不夠,沒學到真正的向量場;講義),這個小例子沒有呈現後者。
  • 標籤完全正確時,\(w\) 大的距離和公式差很多:\(w=4\)、8 訓練出來是 3.03、2.81,同樣 30 步的公式向量場是 3.52、4.12。原因可能是粒子被推到訓練資料很少的地方,網路在那裡不準;我沒有進一步驗證。比例不受影響,但這提醒你,大 \(w\) 時網路給的向量場不一定可靠。

10沒講到的投影片(投影片 38–46)

老師說文獻導覽留到下週 37:34。投影片 38–43 是「A guide to the diffusion literature」:時間慣例、加雜訊的幾種說法、前向 SDE 與反向 SDE、flow matching 能連接任意分佈。這一批和第 4 講投影片 35–39 內容相同,放在第 4 講的文獻導覽處理。

投影片 44–45 的圖:投影片 44 是課程總覽,投影片 45:下一堂課週一 11am–12:30pm,E25-111,主題是神經網路架構和 latent space;office hours 在上這堂課的當天(週五)3pm–4:30pm,36-156。

老師的預告 38:04:週一講架構和 latent space,把模型放大成真的影像生成器。最後一堂是選修性質的進階主題:離散 diffusion 和 distillation。投影片 46 是參考文獻。

編號的小問題:投影片 15 和 32 都叫 Algorithm 5。投影片 24 標「Section 6」、38 標「Section 5」,順序顛倒,講義的 Guidance 是 §5。黑板也一樣,前兩節寫 5.1、5.2,CFG 卻寫 6.3。

Lab 3:實作 CFG,在 MNIST 上比較不同的 \(w\)。講義說你會在 Lab 3 生成類似講義圖片的結果。可以到課程網站取得。

和其他頁面的關聯

  • CS236 第 17 講:classifier guidance 和 CFG 的 score 版本。
  • 書 B21(§8.1–8.3):同一個主題,有更多細節。

常見誤解

  • 「Classifier-free 就是不需要分類器的概念。」推導仍然從分類器出發,只是不用訓練它。那個分類器是假想的。
  • 「CFG 更準確地從 \(p_{\text{data}}(\cdot\mid y)\) 取樣。」相反,\(w\gt1\) 時就不是從它取樣了。\(w=1\) 才是。
  • 「要訓練兩個網路。」一個就夠,丟標籤讓同一個網路同時學會有條件和沒條件。
  • 「\(p(x)\,p(y\mid x)^w\) 就是 CFG 生成的分佈。」那只是單一時刻的 score 的形狀,\(X_1\) 一般不服從它(第 8 節的驗算)。
  • 「\(w\) 是訓練時決定的。」\(w\) 是取樣時才選的,訓練時只有丟標籤的機率。
  • 「\(w\) 越大越好。」太大時會飽和、塌縮,多樣性消失,甚至跑到資料範圍之外(Demo B)。
  • 「條件向量場的 \(z\) 和提示詞 \(y\) 是一樣的。」\(u(x\mid z)\) 是訓練目標,\(u(x\mid y)\) 是網路要學的邊際向量場。
  • 「\(1-w\) 是負的,所以公式錯了。」負號正是重點:減去無導引的方向,就是放大兩者的差。

自我測驗

1. Vanilla guidance 和無條件的 flow matching 只差哪兩處?
資料抽成對的 \((z,y)\);網路多一個輸入 \(y\)。目標還是 \(u_t^{\text{target}}(x\mid z)\)。
2. 為什麼 \(\nabla\log p_t(y)\) 是 0?
\(\nabla\) 是對 \(x\) 的梯度,而 \(p_t(y)\) 不含 \(x\)。
3. 寫出 \(u(x\mid y)\) 的分解,說明每一項。
\(u(x\mid y)=u(x)+a_t\nabla\log p_t(y\mid x)\):和提示詞無關的向量場,加上往分類器更相信 \(y\) 的方向走。
4. Classifier guidance 的兩個主要困難?
要多訓練一個在有雜訊資料上的分類器;\(y\) 是文字時,\(p_t(y\mid x)\) 和它的梯度很難算。
5. 從 \(\tilde u=u(x)+wa_t\nabla\log p_t(y\mid x)\) 推到 CFG 公式。
代入第 5 節開頭的等式,加減 \(wb_tx\),用轉換公式得 \(u(x)+w(u(x\mid y)-u(x))\),整理成 \((1-w)u(x)+wu(x\mid y)\)。
6. \(u(x\mid y)=(2,0)\)、\(u(x\mid\varnothing)=(1,1)\)、\(w=3\),\(\tilde u\) 是多少?
\(-2(1,1)+3(2,0)=(4,-2)\)。
7. \(w=0\)、\(w=1\) 分別是什麼?
\(w=0\):無導引,\(u(x\mid\varnothing)\)。\(w=1\):vanilla guidance。
8. 訓練時為什麼要丟標籤?不丟會怎樣?
要讓網路學會 \(u(x\mid\varnothing)\)。資料裡沒有 \(y=\varnothing\),不丟的話 \(\varnothing\) 這個輸入永遠沒被訓練過。
9. 取樣 100 步、\(w=4\),要呼叫網路幾次?
200 次,每步一次有提示詞、一次 \(\varnothing\)。
10. 老師為什麼說 CFG 是 heuristic?
\(w\gt1\) 時不再從資料分佈取樣,也沒有理論保證,主要靠實驗結果支持。
11. 為什麼生成結果可能比資料更貼題?
資料的圖文配對有錯誤,放大 \(w\) 把樣本推向定義該類別的地方。Demo B、C 裡,標籤錯誤率 20% 時,\(w=1\) 只有約八成正確,\(w=4\) 幾乎全對。

延伸閱讀