【物理與機器學習】從非平衡熱力學到擴散模型

@[toc]
0.引子:從非平衡熱力學開始
1.架構簡介
2.反向過程的具體推導與 DDPM 改進

摘要:擴散模型將非平衡熱力學的“噪聲注入—去噪逆轉”理念注入生成建模中。DDPM(Denoising Diffusion Probabilistic Models)在 SD2015 的基礎上,通過重參數化、損失簡化、固定方差和網絡架構優化等一系列改進,實現了更穩定的訓練和更高質量的生成。本文將從物理直覺出發,面向概率論初學者詳細推導每一步公式,在一些重要概念處專門附上實例,確保新手友好。


0 引子:從非平衡熱力學開始

想象一滴墨水滴入靜水,墨滴在水中擴散,最終呈現均勻的淡灰色。擴散模型正借鑒這一物理過程:

  1. 前向擴散(Forward):逐步向樣本中注入噪聲,如同墨滴不斷散開;
  2. 反向去噪(Reverse):學習如何倒放這個過程,一步步去除噪聲,重現原始圖像。

如上圖所示,噪聲不斷在圖像中擴散

2015 年,Sohl-Dickstein 等人提出了首個非平衡熱力學生成框架:Deep Unsupervised Learning using Nonequilibrium Thermodynamics;2020 年,Ho 等人優化為 DDPM:Denoising Diffusion Probabilistic Models。引入重參數化、損失簡化和架構改進,使模型更易訓練且樣本質量提升。

本文圖片主要出自:Diffusion Models: DDPM | Generative AI Animated


1 架構簡介


1.1 前向擴散與反向去噪的直觀解讀

前向擴散

從真實樣本 x0x_0x0? 出發,在每一步 ttt 以方差 βt\beta_tβt? 遞增的方式添加高斯噪聲:

只加一步

如果我們只加一步噪聲,那么公式為:
x1=x0+β??~N(0,1)x_1 = x_0 +\beta \epsilon \quad \epsilon \sim \mathcal{N}(0,1) x1?=x0?+β??N(0,1)

β\betaβ事實上就是一個控制加噪聲強度的超參數。考慮到我們加噪聲實際上以及都是不斷地外套一個線性函數,所以第ttt步實際上可以表示為:

xt=x0+tβ??~N(0,1)x_t = x_0 +t\beta \epsilon \quad \epsilon \sim \mathcal{N}(0,1) xt?=x0?+??N(0,1)

那么對應的圖像實際上也就變成了:

加了t步的噪聲之后

不過,按照上述加噪聲的方式,我們得到的并非N(0,1)\mathcal{N}(0,1)N(0,1)的標準高斯分布,所以我們在加噪聲時需要來一點小小的技巧:

q(xt∣xt?1)=1?βxt?1+β?=N(xt;1?βtxt?1,βtI).q(x_t\mid x_{t-1}) = \sqrt{1-\beta} x_{t-1} + \beta \epsilon =\mathcal{N}\bigl(x_t;\sqrt{1-\beta_t}\,x_{t-1},\;\beta_t I\bigr). q(xt?xt?1?)=1?β?xt?1?+β?=N(xt?;1?βt??xt?1?,βt?I).

若表示為xt,x0x_t,x_0xt?,x0?的關系:
q(xt?∣x0)=αˉtx0+(1?αˉtt)??q(x_ t?∣x_ 0)= \bar{\alpha}_tx_0 +(1? \bar{\alpha}_tt)?? q(xt??x0?)=αˉt?x0?+(1?αˉt?t)??

αˉ=(1?β)t\bar{\alpha} = (1-\beta)^t αˉ=(1?β)t

注:這不是唯一的技巧,但是為論文中采用的技巧

提要:

可能有許多讀者在一開始會困惑: “為什么圖像能被表示為概率公式”?我們可以從 圖像的本質、噪聲添加的過程兩個角度拆解,結合公式 q(xt∣xt?1)=N(xt;1?βtxt?1,βtI)q(x_t \mid x_{t-1}) = \mathcal{N}\bigl(x_t;\sqrt{1-\beta_t}\,x_{t-1},\;\beta_t I\bigr)q(xt?xt?1?)=N(xt?;1?βt??xt?1?,βt?I)逐層解釋

  1. 圖像的本質:高維隨機變量計算機中的圖像,本質是高維像素值的集合(比如 256×256 圖像有 256×256×3=196608256 \times 256 \times 3 = 196608256×256×3=196608 個像素)。每個像素的取值(如 RGB 或灰度值)可以看作連續隨機變量(縮放到 [?1,1][-1,1][?1,1] 后更便于計算)。因此,一張圖像可以被視為 “高維隨機變量的一個樣本” —— 就像拋一次骰子得到一個數字,生成一張圖像相當于從 “所有可能圖像的分布” 中采樣一次。
  2. 正向加噪:用高斯分布建模 “圖像退化”擴散模型的正向過程是 “逐步給圖像加噪聲,讓其從清晰變模糊”。每一步加噪的本質是:給每個像素的取值疊加隨機擾動(噪聲)。公式拆解:
    q(xt∣xt?1)N(xt;1?βtxt?1?均值,derbraceβtI方差)q(x_t \mid x_{t-1}) \mathcal{N}\bigl(x_t;\ \underbrace{\sqrt{1-\beta_t}\,x_{t-1}}_{\text{均值}},\ derbrace{\beta_t I}_{\text{方差}}\bigr)q(xt?xt?1?)N(xt?;?均值1?βt??xt?1???,?derbraceβt?I方差?)
    而均值項
    1?βtxt?1\sqrt{1-\beta_t}\,x_{t-1}1?βt??xt?1?
    表示 “前一步圖像 xt?1x_{t-1}xt?1? 縮放后的結果”。因為加噪會讓圖像 “變淡”(像素值偏離原始值),所以用 1?βt\sqrt{1-\beta_t}1?βt??縮放

例子:假設 xt?1x_{t-1}xt?1? 是清晰貓圖的某個像素(值為 0.50.50.5),βt=0.01\beta_t = 0.01βt?=0.01(加少量噪聲),則均值為 1?0.01×0.5≈0.497\sqrt{1-0.01} \times 0.5 \approx 0.4971?0.01?×0.50.497(像素值略降低,圖像開始模糊)。方差項 βtI\beta_t Iβt?I:I 是單位矩陣,意味著每個像素的噪聲是獨立的高斯分布(不同像素的噪聲互不影響)。βt\beta_tβt? 控制噪聲的 “強度”(越大,噪聲越強,圖像越模糊)。

反向去噪

理論上說,在反向部分,我們完全可以將前向部分的xt,xt?1x_t,x_{t-1}xt?,xt?1?交換位置得到真實后驗再計算即可。但事實上真實后驗
q(xt?1∣xt,x0)=q(xt∣xt?1)q(xt?1∣x0)q(xt∣x0)q(x_{t-1}\mid x_t,x_0) = \frac{q(x_t\mid x_{t-1})\,q(x_{t-1}\mid x_0)}{q(x_t\mid x_0)} q(xt?1?xt?,x0?)=q(xt?x0?)q(xt?xt?1?)q(xt?1?x0?)?
無法解析,因為它依賴于對高維分布 q(x0)q(x_0)q(x0?) 的復雜積分。不過,為什么 q(xt?1∣xt,x0)q(x_{t-1}\mid x_t,x_0)q(xt?1?xt?,x0?) 難以解析?

假設 x0x_0x0? 是一張 64×6464\times6464×64 的彩色圖像(維度 64×64×3=1228864\times64\times3=1228864×64×3=12288),

  • 分子是可以利用前向過程表示,但是分母要計算
    q(xt∣x0)=∫q(xt∣xt?1)q(xt?1∣x0)dxt?1,q(x_t\mid x_0) = \int q(x_t\mid x_{t-1})\,q(x_{t-1}\mid x_0)\,\mathrm{d}x_{t-1}, q(xt?x0?)=q(xt?xt?1?)q(xt?1?x0?)dxt?1?,
    需要對 12288 維空間做積分。
  • 這樣的高維積分既沒有解析解,也無法通過常規模擬快速收斂(“維度詛咒”)。

因此,我們不能直接寫出 q(xt?1∣xt,x0)q(x_{t-1}\mid x_t,x_0)q(xt?1?xt?,x0?) 的明確公式,也無法精確求值。

于是,我們引入神經網絡 pθp_\thetapθ? ,只需讓網絡根據大量樣本擬合這一映射,無需解析積分,就能實現高效去噪。
引入神經網絡
用參數化分布
pθ(xt?1∣xt)=N(xt?1;μθ(xt,t),Σθ(t))p_\theta(x_{t-1}\mid x_t) = \mathcal{N}\bigl(x_{t-1};\mu_\theta(x_t,t),\,\Sigma_\theta(t)\bigr) pθ?(xt?1?xt?)=N(xt?1?;μθ?(xt?,t),Σθ?(t))
近似上述真實后驗,θ\thetaθ 為網絡權重,通過最小化損失自動學習。

那么,具體是怎么訓練該神經網絡的呢?待我們在下一節推導損失函數后再揭曉答案。

改進點:SD2015 的網絡既要預測均值 μ~t\tilde\mu_tμ~?t? 又要輸出方差 β~t\tilde\beta_tβ~?t?,任務較重;DDPM 在后續簡化步驟中將方差固定,大大減輕網絡負擔。

1.2 數學表達一覽

  • 前向整體
    q(x1:T∣x0)=∏t=1Tq(xt∣xt?1).q(x_{1:T}\mid x_0) = \prod_{t=1}^T q(x_t\mid x_{t-1}). q(x1:T?x0?)=t=1T?q(xt?xt?1?).

  • 反向整體
    pθ(x0:T)=p(xT)∏t=1Tpθ(xt?1∣xt).p_\theta(x_{0:T}) = p(x_T)\prod_{t=1}^T p_\theta(x_{t-1}\mid x_t). pθ?(x0:T?)=p(xT?)t=1T?pθ?(xt?1?xt?).

  • 采樣 vs. 訓練

    • 采樣:從 xT~N(0,I)x_T\sim \mathcal{N}(0,I)xT?N(0,I) 逆向采樣至 x0x_0x0?
    • 訓練:最大化對數似然 log?pθ(x0)\log p_\theta(x_0)logpθ?(x0?),或等價地最小化其 ELBO(證據下界)。在一節大家就明白了。

2 反向過程 pθp_\thetapθ? 的具體推導與 DDPM 改進

2.1 變分下界的起點

首先,我們應該明確:為了訓練出能夠完成去噪與生成任務的神經網絡,我們的目標函數是最大化模型對真實數據的似然,也就是
max?θlog?pθ(x0).\max_\theta\;\log p_\theta(x_0)\,. θmax?logpθ?(x0?).

  • 統計視角:最大化 log?pθ(x0)\log p_\theta(x_0)logpθ?(x0?) 等價于最小化負對數似然(NLL),也就是說,我們希望模型對觀測到的數據給出盡可能高的“信心”值。如果讀者對于概率統計的知識有些生疏了的話,可以看看下面具體的舉例:

    例子:伯努利分布下的硬幣拋擲

    • 設我們使用參數 θ\thetaθ 表示“正面朝上”的概率,概率模型為
      pθ(x)=θx(1?θ)1?x,x∈{0,1}.p_\theta(x) = \theta^x (1-\theta)^{1-x},\quad x\in\{0,1\}. pθ?(x)=θx(1?θ)1?x,x{0,1}.
    • 如果觀測到一組拋擲結果 {1,0,1,1,0}\{1,0,1,1,0\}{1,0,1,1,0}(1 表示正面,0 表示反面),則該組數據的對數似然為
      log?pθ({xi})=∑i=15[xilog?θ+(1?xi)log?(1?θ)].\log p_\theta(\{x_i\}) = \sum_{i=1}^5 \bigl[x_i\log\theta + (1-x_i)\log(1-\theta)\bigr]. logpθ?({xi?})=i=15?[xi?logθ+(1?xi?)log(1?θ)].
    • 最大化這段式子,就是求解最佳 θ\thetaθ,使得模型預測的“正面概率”最貼合實際觀測。具體地,上式在 θ=∑xi5=0.6\theta=\tfrac{\sum x_i}{5}=0.6θ=5xi??=0.6 處取得最大值,這也恰好是觀測中正面出現的頻率。

    通過這個過程,我們看到:最大化 log?pθ(x0)\log p_\theta(x_0)logpθ?(x0?) 就像讓模型“學習”數據的真實分布,用最合理的參數去解釋觀測結果。

  • 物理視角:在非平衡熱力學框架下,?log?pθ(x0)-\log p_\theta(x_0)?logpθ?(x0?) 可被解讀為模型“解釋”數據所需的自由能(或“做功”),最低自由能對應最自然的物理過程。

然而,log?pθ(x0)\log p_\theta(x_0)logpθ?(x0?) 涉及對所有中間變量 x1:Tx_{1:T}x1:T? 的積分
log?pθ(x0)=log?∫pθ(x0:T)dx1:T,\log p_\theta(x_0) = \log \int p_\theta(x_{0:T})\,\mathrm{d}x_{1:T}\,, logpθ?(x0?)=logpθ?(x0:T?)dx1:T?,
直接計算幾乎不可行。因為這里的是的,這里的 dx1:T\mathrm{d}x_{1:T}dx1:T? 就是
dx1dx2?dxT\mathrm{d}x_1\,\mathrm{d}x_2\,\cdots\,\mathrm{d}x_T dx1?dx2??dxT?

相當于我們需要對所有可能的路徑積分

對所有可能的路徑積分

P.S.:如果不太理解,可以參考本小節結束后的具體舉例。

我們借助以下推導,得到一個可優化的下界——ELBO(證據下界):

  1. 引入完整分布
    log?pθ(x0)=log?∫pθ(x0:T)dx1:T.\log p_\theta(x_0) = \log \int p_\theta(x_{0:T})\,\mathrm{d}x_{1:T}. logpθ?(x0?)=logpθ?(x0:T?)dx1:T?.

  2. 乘以并除以任意分布 q(x1:T∣x0)q(x_{1:T}\mid x_0)q(x1:T?x0?)

    注意:這是一個常見的、并且在其它ML模型的數學原理的推導中也會見到的小技巧。
    log?pθ(x0)=log?∫q(x1:T∣x0)pθ(x0:T)q(x1:T∣x0)dx1:T.\log p_\theta(x_0) = \log \int q(x_{1:T}\mid x_0)\,\frac{p_\theta(x_{0:T})}{q(x_{1:T}\mid x_0)} \,\mathrm{d}x_{1:T}. logpθ?(x0?)=logq(x1:T?x0?)q(x1:T?x0?)pθ?(x0:T?)?dx1:T?.

  3. 將積分寫成期望
    log?pθ(x0)=log?Eq(x1:T∣x0)[pθ(x0:T)q(x1:T∣x0)].\log p_\theta(x_0) = \log \mathbb{E}_{q(x_{1:T}\mid x_0)}\Bigl[ \tfrac{p_\theta(x_{0:T})}{q(x_{1:T}\mid x_0)} \Bigr]. logpθ?(x0?)=logEq(x1:T?x0?)?[q(x1:T?x0?)pθ?(x0:T?)?].

  4. 應用 Jensen 不等式log?\loglog 為凹函數)
    log?E[Y]≥E[log?Y]?log?pθ(x0)≥Eq(x1:T∣x0)[log?pθ(x0:T)q(x1:T∣x0)].\log \mathbb{E}[Y] \;\ge\; \mathbb{E}[\log Y] \quad\Longrightarrow\quad \log p_\theta(x_0) \;\ge\; \mathbb{E}_{q(x_{1:T}\mid x_0)}\Bigl[ \log \tfrac{p_\theta(x_{0:T})}{q(x_{1:T}\mid x_0)} \Bigr]. logE[Y]E[logY]?logpθ?(x0?)Eq(x1:T?x0?)?[logq(x1:T?x0?)pθ?(x0:T?)?].

  5. 取相反數,得到 ELBO
    ?log?pθ(x0)≤?Eq(x1:T∣x0)[log?pθ(x0:T)q(x1:T∣x0)].-\log p_\theta(x_0) \;\le\; -\mathbb{E}_{q(x_{1:T}\mid x_0)}\Bigl[ \log \tfrac{p_\theta(x_{0:T})}{q(x_{1:T}\mid x_0)} \Bigr]. ?logpθ?(x0?)?Eq(x1:T?x0?)?[logq(x1:T?x0?)pθ?(x0:T?)?].

至此,我們將原本難以直接計算的 log?pθ(x0)\log p_\theta(x_0)logpθ?(x0?),轉化為了可以通過采樣 q(x1:T∣x0)q(x_{1:T}\mid x_0)q(x1:T?x0?) 并分步優化的 ELBO 目標,便于利用梯度下降訓練網絡參數 θ\thetaθ

補充:

具體例子:兩步高斯鏈

假設我們有三個隨機變量按下面的馬爾可夫鏈生成:

  1. 先采樣 x2~N(0,1)x_2\sim\mathcal{N}(0,1)x2?N(0,1)
  2. 再采樣 x1∣x2~N(x2,1)x_1\mid x_2\sim\mathcal{N}(x_2,\,1)x1?x2?N(x2?,1)
  3. 最后采樣 x0∣x1~N(x1,1)x_0\mid x_1\sim\mathcal{N}(x_1,\,1)x0?x1?N(x1?,1)
    則聯合分布為
    pθ(x0,x1,x2)=p(x2)p(x1∣x2)p(x0∣x1)=N(x2;0,1)N(x>1;x2,1)N(x0;x1,1).p_\theta(x_0,x_1,x_2) = p(x_2)\,p(x_1\mid x_2)\,p(x_0\mid x_1) = \mathcal{N}(x_2;0,1)\,\mathcal{N}(x>_1;x_2,1)\,\mathcal{N}(x_0;x_1,1). pθ?(x0?,x1?,x2?)=p(x2?)p(x1?x2?)p(x0?x1?)=N(x2?;0,1)N(x>1?;x2?,1)N(x0?;x1?,1).
    我們關心的邊緣分布 (p_\theta(x_0)) 就是對所有中間狀態 (x_1) 和 (x_2) 同時積分:
    pθ(x0)=∫?∞∞?∫?∈>fty∞pθ(x0,x1,x2)dx>1dx2.p_\theta(x_0) = \int_{-\infty}^{\infty}\!\int_{-\in>fty}^{\infty} p_\theta(x_0,x_1,x_2)\,\mathrm{d}x>_1\,\mathrm{d}x_2. pθ?(x0?)=???∈>fty?pθ?(x0?,x1?,x2?)dx>1?dx2?.
  • 這里既要“遍歷”所有可能的 (x_1) 值,
  • 也要“遍歷”所有可能的 (x_2) 值,
  • 最終把這兩個積分都做完,才能得到只含 (x_0) 的邊緣概率。
    正是因為這種“對每一條從 x0x_0x0? 回溯到 xTx_TxT? 的所有中間路徑(即所有中間變量組合)都要積分”導致計算量巨大,難以直接求解,才需要我們引入變分下界(ELBO)或用神經網絡去近似。

2.2 *鏈式分解為 KL 項

展開 ELBO 得到(該部分推導相對冗雜,可見原論文附錄
L=LT+∑t=2TLt?1+L0,L = L_T + \sum_{t=2}^T L_{t-1} + L_0, L=LT?+t=2T?Lt?1?+L0?,
其中:

  • LT=DKL[q(xT∣x0)∥p(xT)],L_T = D_{\mathrm{KL}}\bigl[q(x_T\mid x_0)\,\|\,p(x_T)\bigr],LT?=DKL?[q(xT?x0?)p(xT?)],
    我們可以發現,該項中并不含有神經網絡的參數θ\thetaθ,所以在優化過程中可以不必考慮。

  • L0=?Eq(x1∣x0)[log?pθ(x0∣x1)].L_0 = -\mathbb{E}_{q(x_1\mid x_0)}\bigl[\log p_\theta(x_0\mid x_1)\bigr].L0?=?Eq(x1?x0?)?[logpθ?(x0?x1?)].
    這一項反映的實際上是模型最后一步的還原的過程。假如我們的還原步驟很長很長,顯然最后一步的影響微乎其微,故可以忽略。

  • Lt?1=Eq(xt∣x0)?[DKL(q(xt?1∣xt,x0)∥pθ(xt?1∣xt))],L_{t-1} = \mathbb{E}_{q(x_t\mid x_0)}\!\bigl[D_{\mathrm{KL}}\bigl(q(x_{t-1}\mid x_t,x_0)\,\|\,p_\theta(x_{t-1}\mid x_t)\bigr)\bigr],Lt?1?=Eq(xt?x0?)?[DKL?(q(xt?1?xt?,x0?)pθ?(xt?1?xt?))],
    于是我們最終的目標函數就等價于最小化上式。接下來我們對上式的含義進行一個拆解: 這其實是在說:對每一個“噪聲等級”ttt,我們都要讓模型給出的去噪分布
    pθ(xt?1∣xt)p_\theta(x_{t-1}\mid x_t)pθ?(xt?1?xt?)
    盡量貼近真實后驗
    q(xt?1∣xt,x0).q(x_{t-1}\mid x_t,x_0)\,. q(xt?1?xt?,x0?).

    1. 內層 KL 散度含義
      DKL(q∥pθ)=∫q(xt?1∣xt,x0)log?q(xt?1∣xt,x0)pθ(xt?1∣xt)dxt?1.D_{\mathrm{KL}}\bigl(q\,\|\,p_\theta\bigr) = \int q(x_{t-1}\mid x_t,x_0)\;\log\frac{q(x_{t-1}\mid x_t,x_0)}{p_\theta(x_{t-1}\mid x_t)}\;\mathrm{d}x_{t-1}. DKL?(qpθ?)=q(xt?1?xt?,x0?)logpθ?(xt?1?xt?)q(xt?1?xt?,x0?)?dxt?1?.

      • 這里的“log?qpθ\log\frac{q}{p_\theta}logpθ?q?”衡量了真實后驗與模型后驗在每一個可能的 xt?1x_{t-1}xt?1? 上的“距離”。
      • 如果兩者完全相同,KL 為 0;否則越大,說明差異越大,網絡需要更努力地學習。
    2. 外層期望的作用
      Eq(xt∣x0)[?]\mathbb{E}_{q(x_t\mid x_0)}[\;\cdot\;]Eq(xt?x0?)?[?]
      表示:我們不是只對某一個特定的xtx_txt? 做對比,而是對所有可能的“噪聲樣本” xtx_txt? 取平均。
      換句話說,模型要在整個前向擴散軌跡上,對每一個噪聲等級都表現良好。

    3. 關于真實后驗與訓練方法

      再次指出可能混引起混淆的一點:細心的同學可能會發現一點:如果我們已知了去噪過程$q(x_{t-1}\mid x_t,x_0) ,那為什么還需要使用神經網絡?事實上,我們能且僅能在訓練的過程中知道,那為什么還需要使用神經網絡?事實上,我們能且僅能在訓練的過程中知道,那為什么還需要使用神經網絡?事實上,我們能且僅能在訓練的過程中知道q(x_{t-1}\mid x_t,x_0),因為在該過程中我們是有原始圖像,因為在該過程中我們是有原始圖像,因為在該過程中我們是有原始圖像x_0$的。

      在推理過程,我們相當于只有一團混沌的噪聲,不可能解析地求出q(xt?1∣xt,x0)q(x_{t-1}\mid x_t,x_0)q(xt?1?xt?,x0?)。而我們的目標,正是利用DKL[q(xT∣x0)∥p(xT)],D_{\mathrm{KL}}\bigl[q(x_T\mid x_0)\,\|\,p(x_T)\bigr],DKL?[q(xT?x0?)p(xT?)],,去使 pθ(xt?1∣xt)p_\theta(x_{t-1}\mid x_t)pθ?(xt?1?xt?)
      盡量貼近真實后驗q(xt?1∣xt,x0)q(x_{t-1}\mid x_t,x_0)q(xt?1?xt?,x0?).

KL 散度 DKL[P∥Q]D_{\mathrm{KL}}[P\|Q]DKL?[PQ] 衡量分布 PPPQQQ 的差異。最小化 KL 即逼近真實后驗。

2.3 真后驗 & 參數化模型

在上一節我們看到,每一步的 ELBO 包含
Lt?1=Eq(xt∣x0)?[DKL(q(xt?1∣xt,x0)∥pθ(xt?1∣xt))].L_{t-1} = \mathbb{E}_{q(x_t\mid x_0)}\! \bigl[D_{\mathrm{KL}}(q(x_{t-1}\mid x_t,x_0)\,\|\,p_\theta(x_{t-1}\mid x_t))\bigr]. Lt?1?=Eq(xt?x0?)?[DKL?(q(xt?1?xt?,x0?)pθ?(xt?1?xt?))].
要最小化它,首先得知道“真實后驗” (xt?1∣xt,x0)(x_{t-1}\mid x_t,x_0)(xt?1?xt?,x0?)的形式。經過一番高斯鏈式推導(詳見附錄),我們可以得到:
q(xt?1∣xt,x0)=N(xt?1;μ~t(xt,x0),β~tI),q(x_{t-1}\mid x_t,x_0) = \mathcal{N}\bigl(x_{t-1};\,\tilde\mu_t(x_t,x_0),\;\tilde\beta_t I\bigr), q(xt?1?xt?,x0?)=N(xt?1?;μ~?t?(xt?,x0?),β~?t?I),
其中
$$
\tilde\mu_t
= \frac{\sqrt{\bar\alpha_{t-1}};\beta_t}{1-\bar\alpha_t},x_0

  • \frac{\sqrt{\alpha_t},(1-\bar\alpha_{t-1})}{1-\bar\alpha_t},x_t,
    \quad
    \tilde\beta_t
    = \frac{1-\bar\alpha_{t-1}}{1-\bar\alpha_t};\beta_t.
    $$

接下來,我們讓模型后驗pθ(xt?1∣xt)p_\theta(x_{t-1}\mid x_t)pθ?(xt?1?xt?)也服從高斯分布:
pθ(xt?1∣xt)=N(xt?1;μθ(xt,t),Σθ(t)).p_\theta(x_{t-1}\mid x_t) = \mathcal{N}\bigl(x_{t-1};\,\mu_\theta(x_t,t),\;\Sigma_\theta(t)\bigr). pθ?(xt?1?xt?)=N(xt?1?;μθ?(xt?,t),Σθ?(t)).
為了簡化采樣與訓練,DDPM 進一步固定方差 Σθ(t)=βtI\Sigma_\theta(t)=\beta_tIΣθ?(t)=βt?I,也就是只讓網絡去學習均值 μθ\mu_\thetaμθ? 的移動。

此時,每步的 KL 散度化為一個均方誤差項(省略常數):
DKL(N(μ~t,β~t)∥N(μθ,βt))∝12βt∥μθ(xt,t)?μ~t(xt,x0)∥2.D_{\mathrm{KL}}(\mathcal{N}(\tilde\mu_t,\tilde\beta_t)\,\|\, \mathcal{N}(\mu_\theta,\beta_t)) \;\propto\; \frac{1}{2\beta_t}\,\bigl\|\mu_\theta(x_t,t)-\tilde\mu_t(x_t,x_0)\bigr\|^2. DKL?(N(μ~?t?,β~?t?)N(μθ?,βt?))2βt?1??μθ?(xt?,t)?μ~?t?(xt?,x0?)?2.
于是,我們的去噪目標簡化為:
Lt?1=Eq(xt∣x0)?[12βt∥μθ(xt,t)?μ~t(xt,x0)∥2].L_{t-1} \;=\; \mathbb{E}_{q(x_t\mid x_0)}\!\Bigl[\, \tfrac{1}{2\beta_t}\,\bigl\|\mu_\theta(x_t,t)-\tilde\mu_t(x_t,x_0)\bigr\|^2 \Bigr]. Lt?1?=Eq(xt?x0?)?[2βt?1??μθ?(xt?,t)?μ~?t?(xt?,x0?)?2].


2.4 均值的閉式 & 重參數化到 ε

為了讓訓練更高效,先寫出μ~t\tilde\mu_tμ~?t? 的閉式表達:
μ~t(xt,x0)=1αt(xt?1?αt1?αˉt?),xt=αˉtx0+1?αˉt?,?~N(0,I).\tilde\mu_t(x_t,x_0)= \frac{1}{\sqrt{\alpha_t}}\Bigl(x_t- \tfrac{1-\alpha_t}{\sqrt{1-\bar\alpha_t}}\,\epsilon\Bigr),\quad x_t = \sqrt{\bar\alpha_t}\,x_0 + \sqrt{1-\bar\alpha_t}\,\epsilon,\;\epsilon\sim\mathcal{N}(0,I). μ~?t?(xt?,x0?)=αt??1?(xt??1?αˉt??1?αt???),xt?=αˉt??x0?+1?αˉt???,?N(0,I).

  • 這里的 ?\epsilon? 就是“前向過程中注入”的噪聲,重參數化技巧將隨機性都集中到它身上。

μ~t\tilde\mu_tμ~?t? 代入前面那步 MSE,我們得到:
∥μθ(xt,t)?μ~t∥2=∥μθ(xt,t)?1αt(xt?1?αt1?αˉt?)∥2.\|\mu_\theta(x_t,t)-\tilde\mu_t\|^2= \Bigl\|\mu_\theta(x_t,t)- \tfrac{1}{\sqrt{\alpha_t}}\bigl(x_t - \tfrac{1-\alpha_t}{\sqrt{1-\bar\alpha_t}}\,\epsilon\bigr) \Bigr\|^2. μθ?(xt?,t)?μ~?t?2=?μθ?(xt?,t)?αt??1?(xt??1?αˉt??1?αt???)?2.
再結合系數 12βt\tfrac1{2\beta_t}2βt?1?和對 ?\epsilon?的期望,就能證明等價于:
Lt?1∝Ex0,?,t[∥???θ(xt,t)∥2],L_{t-1}\propto\mathbb{E}_{x_0,\epsilon,t}\bigl[\|\epsilon-\epsilon_\theta(x_t,t)\|^2\bigr], Lt?1?Ex0?,?,t?[???θ?(xt?,t)2],
其中我們定義
?θ(xt,t):=αˉtμθ(xt,t)?αtxt×1?αˉt1?αt,\epsilon_\theta(x_t,t):= \sqrt{\bar\alpha_t}\,\mu_\theta(x_t,t)- \sqrt{\alpha_t}\,x_t \;\times\;\frac{\sqrt{1-\bar\alpha_t}}{1-\alpha_t}, ?θ?(xt?,t):=αˉt??μθ?(xt?,t)?αt??xt?×1?αt?1?αˉt???,
簡化后直接讓網絡預測 ?\epsilon?,大大提高了訓練穩定性和效果。


2.5 SD2015 的原始損失推導

回顧 SD2015,在沒有重參數化之前,模型直接學習 (\mu_\theta) 和 (\Sigma_\theta),并按變分界逐步最小化:
Lt?1SD=Eq(xt,xt?1∣x0)[?log?pθ(xt?1∣xt)]=E[βt22β~tαt(1?αˉt)∥xt?1?μ~t∥2],L_{t-1}^\text{SD} = \mathbb{E}_{q(x_t,x_{t-1}\mid x_0)}\Bigl[ -\log p_\theta(x_{t-1}\mid x_t) \Bigr] = \mathbb{E}\Bigl[\tfrac{\beta_t^2}{2\,\tilde\beta_t\,\alpha_t\,(1-\bar\alpha_t)} \|x_{t-1}-\tilde\mu_t\|^2 \Bigr], Lt?1SD?=Eq(xt?,xt?1?x0?)?[?logpθ?(xt?1?xt?)]=E[2β~?t?αt?(1?αˉt?)βt2??xt?1??μ~?t?2],
其中每步的權重
βt22β~tαt(1?αˉt)\tfrac{\beta_t^2}{2\,\tilde\beta_t\,\alpha_t\,(1-\bar\alpha_t)}2β~?t?αt?(1?αˉt?)βt2??
ttt 變化,導致訓練中需要精心調參且收斂不穩。DDPM 的一系列改進,正是為了解決這一痛點。

2.6 總結

推導過程總結



本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/90007.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/90007.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/90007.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Git常用命令詳解:從入門到精通

前言 Git作為當今最流行的分布式版本控制系統,已經成為開發者必備的技能之一。無論你是獨立開發者還是團隊協作,掌握Git的基本操作都能極大提高工作效率。本文將詳細介紹Git的常用命令,幫助你快速上手并精通Git的基本使用。 一、Git基礎概念…

Vue-22-通過flask接口提供的數據使用plotly.js繪圖(一)

文章目錄 1 任務背景 2 Flask提供接口(server.py) 2.1 原始代碼 2.2 跨域問題 3 Vue3獲取數據并渲染Plotly圖表 3.1 新建工程 3.2 程序 3.2.1 index.html(入口) 3.2.2 cpmponents/Plot.vue(子組件) 3.2.3 App.vue(父組件) 3.2.4 main.ts 3.3 展示 4 選擇圖表類型繪圖 4.1 App.v…

【mysql】換主鍵

需求:曲庫表的主鍵錯了,原先設置的是(sang_id),應該設置為(sang_name,singer)聯合主鍵。-- (0)先備份數據,我這里沒備份 -- (1)進行主鍵的切換之前,要進行一些…

Redis原理之緩存

上篇文章: Redis原理之集群https://blog.csdn.net/sniper_fandc/article/details/149141342?fromshareblogdetail&sharetypeblogdetail&sharerId149141342&sharereferPC&sharesourcesniper_fandc&sharefromfrom_link 目錄 1 Redis作為MySQL…

關于集合的底層數據結構

單列集合Collection分為list集合和set集合list集合分為ArrayList和LinkedListArrayList--底層數據結構是數組1.通過索引查詢快2.增刪要重構索引,增刪慢 LinkedList--底層數據結構是鏈表1.無索引查詢慢2.通過改變前節點的尾指針和后節點的前指針指向可快速增刪,增刪快set集合(…

批量插入技巧:減少事務提交次數的性能提升

一、事務提交成本分析每次事務提交觸發?磁盤I/O同步?(WAL機制)、?日志寫入?和?鎖資源釋放?操作,高頻獨立提交會產生指數級開銷?。實驗表明:MySQL提交1萬次單條插入比單次批量插入?慢20倍以上??。高頻提交還加劇鎖競爭與…

importlib.import_module() 的用法與實戰案例

🌟 一、什么是 importlib? importlib 是 Python 的一個內置標準庫,用于在程序運行時 動態導入模塊。 🔤 對比:普通 import vs importlib方式示例特點靜態導入import os編寫代碼時就確定要導入的模塊動態導入importlib.…

Oracle 12c 創建數據庫初級教程

1. 連接到Oracle sqlplus / as sysdba Oracle數據庫名稱默認為ORCL或sqlplus /ORCL as sysdba Oracle數據庫名稱默認為ORCL2. 創建表空間(數據庫) create user YOUR_USERNAME identified by "YOUR_PASSWORD"; YOUR_USERNAME為數據庫名稱和登…

zabbix服務器告警處理

zabbix服務器告警,信息為:Utilization of poller processes over 75%處理辦法為修改zabbix_server.conf配置文件,一般情況下為/etc/zabbix目錄下。根據自己輪詢器的類型修改對應的輪詢器的數量;我這里把StartPollers,S…

隨筆20250721 PostgreSQL實體類生成器

我來幫你創建一個C#程序,從PostgreSQL數據庫讀取表結構并生成對應的實體類文件。我已經創建了一個完整的PostgreSQL實體類生成器。這個程序包含以下主要功能:主要特性數據庫連接: 使用Npgsql連接PostgreSQL數據庫表結構讀取: 自動讀取所有表的結構信息類…

B樹、B-樹與B+樹

B樹、B-tree與B樹 在計算機科學,尤其是數據庫和文件系統的領域中,B樹、B-tree和B樹是理解數據如何被高效存儲和檢索的關鍵。它們之間關系緊密,但功能和應用上又存在著決定性的差異。 一、 核心概念澄清:B樹就是B-tree 首先需要明確…

視頻格式轉換工廠v3.2.5,集音視頻、圖片處理78MB

今天,我們要介紹的是一款功能強大的視頻處理軟件——視頻格式轉換工廠。這款軟件已經完美破解,無需登錄即可享受全部高級功能。它不僅支持視頻格式轉換,還涵蓋了音頻、圖片處理等多種功能,是一款真正的多媒體處理工具。 視頻格式轉…

VUE 中父級組件使用JSON.stringify 序列化子組件傳遞循環引用錯誤

背景 VUE 中父級組件使用JSON.stringify 序列化子組件傳遞的數據會報錯 runtime-core.esm-bundler.js:268 Uncaught TypeError: Converting circular structure to JSON –> starting at object with constructor ‘Object’ — property ‘config’ closes the circle 原因…

HTTP,HTTPS

在網絡工程師、開發工程師、運維工程師等崗位的面試中,??HTTP/HTTPS?? 是高頻必考知識點,尤其在前端、后端、測試、DevOps等與網絡通信相關的職位中。以下是系統化的核心考點梳理,涵蓋基礎概念、協議機制、安全特性及應聘高頻問題。??一…

Nginx訪問日志分析在云服務器環境的技術實現與案例

在云計算時代,Nginx訪問日志分析已成為服務器運維的關鍵環節。本文將深入解析如何通過日志切割、實時監控和可視化展示三大技術路徑,實現云環境下Nginx日志的高效分析。我們將結合具體案例,演示從原始日志到運維決策的完整技術閉環&#xff0…

鴻蒙實現一次上傳多張圖片

記錄初接觸鴻蒙,遇到的一個問題,需求是點擊一個圖片上傳的號圖,訪問本地圖片,可以選擇多張圖片并上傳。下面是圖片上傳后的方法://選擇圖片并上傳private async showPhotoPicker() {const maxImageCount 3;const rema…

【STM32】CRC 校驗函數

先上一下 CRC校驗 的源代碼&#xff1a; void crc_check(unsigned char *ptr,unsigned int len) //crc為開源函數 {unsigned long wcrc0XFFFF;//預置16位crc寄存器&#xff0c;初值全部為1unsigned char temp;//定義中間變量int i0,j0;//定義計數for(i0;i<len;i)//循環計算每…

【Java】SVN 版本控制軟件的快速安裝(可視化)

目錄 一、SVN 的概述 1.1 SVN 的概念 1.2 SVN 與 Git 的對比 1.3 SVN 軟件 二、SVN 的安裝 2.1 SVN 的工作流程 2.2 服務器端 SVN 的安裝 三、SVN 服務器端的配置 3.1 搭建項目 3.2 權限控制 四、SVN 客戶端的配置 4.1 SVN 客戶端的下載 4.2 客戶端連接 SVN 服務器…

Hadoop安全機制深度剖析:Kerberos認證與HDFS ACL細粒度權限控制

Hadoop安全機制概述在大數據時代&#xff0c;Hadoop作為分布式計算框架的核心組件&#xff0c;其安全性直接關系到企業數據資產的保護。隨著數據價值的不斷提升&#xff0c;Hadoop安全機制已從早期的"簡單信任模式"演進為包含多重防護措施的綜合體系&#xff0c;其重…

uniapp基本使用

資料 咸蝦米視頻 黑馬視頻 uniapp官方文檔 hbuilder 1.uniapp頁面生命周期 1.1 onLoad 還拿不到dom適合接受上頁的參數&#xff0c;聯網取數據&#xff0c;更新data。相當于created和beforeCreated期間主要的作用是比如說獲取url上的query參數 *url: ***/**?name張三&…