Skip to content

擴散模型進階:訓練抽時間,生成走逆向鏈|CMU 10-423 第 8 堂

2026年10月11日1 分鐘
TL;DR前一堂知道怎麼造出 noisy input 與噪聲標籤,這堂要回答下一個缺口:網路預測 ε 之後,怎麼得到下一個較乾淨的樣本?

🌏 English version

影片狀態:錄影需登入或課程授權。 本文依公開投影片與作業整理,數值例子為本站補充,不是課堂逐字稿。

前一堂知道怎麼造出 noisy input 與噪聲標籤,這堂要回答下一個缺口:網路預測 ε 之後,怎麼得到下一個較乾淨的樣本?目標是把訓練、三種預測參數化與逆向取樣放在同一個可核算例子裡。第 8 堂末段的 VAE 引介在這裡只作橋接,完整變分推論與 ELBO 交給第 9 堂。

先分清三種需要預測的量

噪聲參數化預測 εθ(xₜ,t)。乾淨樣本參數化預測 x̂₀。均值參數化直接預測逆向高斯的 μθ。它們不是三種完全無關的模型家族:固定前向噪聲日程後,這些量可以透過已知係數互相換算。

閉式加噪 xₜ=√ᾱₜ x₀+√(1−ᾱₜ)ε,移項得到 x̂₀=(xₜ−√(1−ᾱₜ)εθ)/√ᾱₜ。然而 x̂₀ 不是 xₜ₋₁;前者是原始資料估計,後者是逆向鏈下一個狀態。混淆兩者會直接跳過取樣模型定義。

一個例子同時計算 x₀、ε 與均值

以下是本站自擬例子。兩步日程 α₁=α₂=0.8,所以 ᾱ₁=0.8、ᾱ₂=0.64,β₂=0.2。取 x₀=2、有效 ε=1,因此 x₂=0.8×2+0.6×1=2.2。若網路正好預測 εθ=1,x̂₀=(2.2−0.6)/0.8=2。

DDPM 的噪聲參數化逆向均值為 μθ=(xₜ−βₜ εθ/√(1−ᾱₜ))/√αₜ。本例 μθ=(2.2−0.2/0.6)/√0.8≈2.0870。即使 x̂₀=2,逆向均值也不是 2,因為我們在第 2 步要生成的是 x₁,而非直接輸出 x₀。

也能用 posterior mean 公式檢查:μ̃ₜ = [√ᾱₜ₋₁ βₜ/(1−ᾱₜ)]x₀ + [√αₜ(1−ᾱₜ₋₁)/(1−ᾱₜ)]xₜ。兩個係數都是約 0.4969,所以均值是 0.4969×(2+2.2)≈2.0870,跟噪聲換算一致。

posterior variance β̃₂=β₂(1−ᾱ₁)/(1−ᾱ₂)=1/9≈0.1111。如果選擇這個固定 variance 的取樣器,抽 z=0.3 時,x₁=μθ+√β̃₂ z≈2.1870。這個 z 是逆向取樣的新亂數,不是當初建構 x₂ 的 ε。DDPM 也討論其他固定 variance 選擇,必須說清楚用哪個。

訓練抽一個 t,生成反覆走全部 t

一次訓練樣本從資料得到 x₀,再抽 t 與 ε,直接構造 xₜ,比較模型輸出與目標。不同 batch 元素可以有不同 t;不用每次訓練都跑完整正向鏈與逆向鏈。對 t 的抽樣與 loss weighting 共同決定哪些噪聲尺度受到多大訓練壓力。

生成則先抽 x_T,再按 T、T−1、…、1 逐步呼叫模型。最後一個步驟通常不再加新噪聲,不能因為迴圈公式很像就忽略邊界。若日程沒有讓最末分佈接近標準高斯,直接從標準高斯起步也會有分佈差異。本例只有兩步,是算式示範,不是一個品質良好的影像生成日程。

相同換算不代表 loss 完全等價

固定 t 下,ε 與 x₀ 預測可線性換算;但誤差也被時間係數縮放。從 x̂₀−x₀ = −√((1−ᾱₜ)/ᾱₜ)(εθ−ε) 可知,均等加權的 x₀ MSE 與均等加權的 ε MSE,在不同 t 上給的權重不同。

DDPM 的變分目標含不同時間項與係數,常用 simplified noise MSE 不應被描述成逐項完全等於完整 ELBO。實作若變更 prediction target、weight 或 variance,除了輸出 shape 相同,還必須核對模型與取樣器是否使用相容定義。

變式題與答案

本例模型改成 εθ=0.5,x̂₀=(2.2−0.3)/0.8=2.375,μθ=(2.2−0.2×0.5/0.6)/√0.8≈2.2733。模型少估噪聲,乾淨樣本估計偏高;取樣均值也跟著偏高,但不是同一個值。

若 ᾱₜ=0.64,ε 預測誤差為 0.5,對應 x₀ 誤差幅度是多少?答案是 √(0.36/0.64)×0.5=0.375,平方誤差為 0.140625。能算出這個尺度,才有辦法解釋不同參數化與訓練權重。接下來 VAE 用另一種潛在變數模型,完整說明變分下界與重參數化。

上一篇|下一篇|系列總覽

課程影片來源

官方錄影入口位於 SCS Panopto。匿名資料夾未載入並提示登入;這表示未取得公開播放內容,不代表沒有錄影。原音與字幕須依課程授權存取。

參考資料