搜尋課程與筆記

搜尋筆記

輸入主題、關鍵字或單元編號,例如 Flow Matching、U4。

    按 Esc 關閉 · ⌘ / Ctrl K 開啟搜尋

    U5.5 7 分鐘閱讀 2026年10月

    U5.5 再跳一次,真的等於把同一條路切細嗎?

    本篇重用2 篇

    網路只會回終點,多步要怎麼做?

    U5.2 學的是 fθ(xt,t)≈ψt→0(xt)f_\theta(x_t,t)\approx\psi_{t\to0}(x_t)。第一次呼叫後,樣本已在資料端;若還要再用一次,不能直接把這個乾淨輸出假裝成中間時間的 state。

    就像一班車只會直達總站,要再搭一次,我們得先回到某個出發站。CM 的做法是替目前完成品再加一份新 noise,造出中間 noise level 的輸入,再跳回終點。選 T>τ1>⋯>τM−1>0T>\tau_1>\cdots>\tau_{M-1}>0,程序是

    x^0=fθ(xT,T),xτk=x^0+τkϵk,x^0←fθ(xτk,τk),ϵk∼N(0,I).\begin{aligned} \hat x_0&=f_\theta(x_T,T),\\ x_{\tau_k}&=\hat x_0+\tau_k\epsilon_k,\\ \hat x_0&\leftarrow f_\theta(x_{\tau_k},\tau_k), \qquad\epsilon_k\sim\mathcal N(0,I). \end{aligned}

    每個 ϵk\epsilon_k 都是新抽的,並與此前結果獨立。這個「再加噪、再跳」與從 xTx_T 沿原 ODE 到 xτkx_{\tau_k} 是不同操作。

    先檢查精確函數:換軌會不會弄壞分布?

    一條樣本路線換了,不表示整體分布一定錯。先假設 xT∼pTx_T\sim p_T,而 ff 是精確的終點 map。第一跳之後,x^0∼p0\hat x_0\sim p_0。對它加上獨立的 τϵ\tau\epsilon,按照加噪 kernel 的定義,得到的分布就是 pτp_\tau;再套用 f(⋅,τ)f(\cdot,\tau),又回到 p0p_0。

    因此

    p0→加上獨立 τϵpτ→f(⋅,τ)p0.p_0\xrightarrow{\text{加上獨立 }\tau\epsilon} p_\tau\xrightarrow{f(\cdot,\tau)}p_0.

    每個循環都成立,就可對循環次數歸納。精確 CM 的多步程序在每次輸出時都保留資料分布。 原始噪聲與最後樣本的配對會改變,但 marginal 可以一直正確;兩種性質不能混成同一件事。

    邊界若終點是 ε,重新加噪的標準差也要跟著改

    若精確 map 只到 pεp_\varepsilon,為了從 pεp_\varepsilon 加噪到 pτp_\tau,新增 noise 的標準差應為 τ2−ε2\sqrt{\tau^2-\varepsilon^2}。變異數相加後才得到 τ2\tau^2。下文以乾淨端 00 簡化;有限 TT 的近似 prior 與正的終止時間,都是另外要計入的誤差。

    那 learned map 的誤差,能不能越跳越小?

    精確程序合法,仍沒有回答模型有誤差時會怎樣。我們用 U5.0 的一維 Gaussian 再算一次。資料 p0=N(0,1)p_0=\mathcal N(0,1),精確終點函數是 f(x,t)=x/1+t2f(x,t)=x/\sqrt{1+t^2}。

    假設目前完成品為零均值、變異數 VV,再加上 τϵ\tau\epsilon,輸入變異數變成 V+τ2V+\tau^2。若使用精確 ff,下一次完成品的變異數為

    Vnext=V+τ21+τ2,Vnext−1=V−11+τ2.V_{\mathrm{next}}=\frac{V+\tau^2}{1+\tau^2}, \qquad V_{\mathrm{next}}-1=\frac{V-1}{1+\tau^2}.

    這個 toy 中,精確第二跳確實可以收縮先前的 variance error。所以不能說「CM 沒有 score,任何第二跳都不可能修正第一跳」。要判斷的是實際 map 定義的 transition,而不是它是否顯式輸出 score。

    課堂提問Q1

    如果精確 map 可以收縮誤差,是否表示一個已訓練的 fθf_\theta 也會有同樣保證?

    先想一想,再展開看整理後的答案

    不會自動有。試著加入一個仍滿足乾淨端邊界的偏差:令 f^(x,t)=(1+ct)x/1+t2\hat f(x,t)=(1+ct)x/\sqrt{1+t^2},其中 c>0c>0。由於 t=0t=0 時係數為 11,它仍有 f^(x,0)=x\hat f(x,0)=x,但其他時間不精確。

    從正確資料 V=1V=1 開始,加噪再用 f^\hat f,下一次輸出變異數是 (1+cτ)2>1(1+c\tau)^2>1。這表示單靠正確邊界,不能保證多跳一次仍保留正確分布,更不能保證品質單調改善。

    對這個帶偏的 map,完整 recurrence 是

    Vnext=(1+cτ)21+τ2(V+τ2).V_{\mathrm{next}} =\frac{(1+c\tau)^2}{1+\tau^2}(V+\tau^2).

    它同時包含舊分布的偏差、這一跳的新增偏差,以及所選 τ\tau 的影響。假設為了分析而重複固定 τ\tau,令 a=(1+cτ)2/(1+τ2)a=(1+c\tau)^2/(1+\tau^2);若 a<1a<1,variance 趨向 aτ2/(1−a)a\tau^2/(1-a),通常不是 11;若 a≥1a\ge1,也沒有這個有限不動點。實務上遞減的 τk\tau_k 要逐項代入,不能拿固定 τ\tau 的結論當成特定 sampler 的定理。

    為什麼不能直接套 Euler 的步數保證?

    U3.1 的全域誤差分析先控制每段 local error,例如 O(h2)O(h^2),再用穩定性將它們合成 O(h)O(h)。這裡增加 CM 呼叫次數時,每次仍是「從當下 noise level 到終點」的完整 map;我們沒有先證明它的 approximation error 隨相鄰 sampling 間隔按 h2h^2 縮小。

    所以不能由「用了更多步」直接套用 Euler 的收斂階。這不表示多步必定變壞,也不表示沒有任何連續極限或收斂分析;只表示需要為這個模型與這個 transition 另做分析。少步改善、多步停滯或退化,都要由實驗與適用條件判斷。

    互動 demo:解析 Gaussian 檢查。 調整起始時間、區間與位置,直接計算本篇的關係;偏差控制是明示的 surrogate,沒有使用預設的品質曲線。

    我們真正缺的是哪個輸出?

    CM 只會回答「這裡的共同終點」,所以多步程序另用加噪把完成品送回中途。若模型也能直接回答「沿同一條路到指定中間時間會在哪裡」,就能保留一條 deterministic trajectory 作分段跳躍。

    這會改變可用的 sampler 與誤差分析方式,但仍不代表 learned map 的多步品質必然單調。下一個單元要把這個更一般的輸出寫清楚;進入它之前,先在實作篇檢查本單元三個主要等式。

    消化一下

    想一想

    精確 CM 在正確 marginal 上重新加噪再跳,會怎樣?

    想一想

    Gaussian 例子中的精確第二跳,是否可能修正先前 variance error?

    想一想

    為什麼更多 CM steps 不自動有 Euler 的 O(1/N)O(1/N) 保證?

    參考文獻

    主要理論參考:The Principles of Diffusion Models,§11.2.2 的多步取樣與 §11.4.4 的 sampler 討論;正文 Gaussian recurrence 為直接計算的教學例子。正文的符號沿用本課程;方法實作細節再對照下列原始論文。

    1. Song, Dhariwal, Chen & Sutskever, Consistency Models (ICML 2023)。
    2. Song & Dhariwal, Improved Techniques for Training Consistency Models (ICLR 2024)。
    3. Liu, Gong & Liu, Flow Straight and Fast: Learning to Generate and Transfer Data with Rectified Flow (ICLR 2023)。
    4. Sabour, Fidler & Kreis, Align Your Flow: Scaling Continuous-Time Flow Map Distillation (2025)。