网络的 输出 是:预测在前向过程中,从 x t − 1 x_{t-1} xt−1 得到 x t x_t xt 时参加的谁人噪声 ϵ \epsilon ϵ。
有了这个预测的噪声 ϵ θ ( x t , t ) \epsilon_\theta(x_t, t) ϵθ(xt,t),我们就可以使用一个数学公式,从当前的 x t x_t xt 中“减去”这个预测的噪声(并加上一些必要的随机性),来估计出上一步轻微清楚一点的图像 x t − 1 x_{t-1} xt−1。
这个过程从 t = T t = T t=T 开始,输入一个随机噪声 x T x_T xT,然后利用神经网络反复预测并去除噪声,一步步得到 x T − 1 x_{T-1} xT−1, x T − 2 x_{T-2} xT−2, …, 直到 x 0 x_0 x0。最终得到的 x 0 x_0 x0 就是模子天生的图片。
这是一个固定、预定义的马尔可夫链,它徐徐向数据 x 0 x_0 x0(来自真实数据分布 q ( x 0 ) q(x_0) q(x0))添加高斯噪声,颠末 T T T 步后得到近似纯噪声 x T x_T xT。
状态定义:
x 1 , x 2 , … , x T x_1, x_2, \ldots, x_T x1,x2,…,xT 是隐变量(latent variables),与原始数据 x 0 x_0 x0 具有雷同的维度。
转移概率:
每一步从 x t − 1 x_{t-1} xt−1 到 x t x_t xt 的转移被定义为一个条件高斯分布
q ( x t ∣ x t − 1 ) = N ( x t ; 1 − β t x t − 1 , β t I ) q(x_t \mid x_{t-1}) = \mathcal{N}\Big(x_t; \sqrt{1 - \beta_t}\, x_{t-1},\, \beta_t\, I\Big) q(xt∣xt−1)=N(xt;1−βt xt−1,βtI)
其中:
β t \beta_t βt 是一个预先设定的(通常很小的)方差值,代表在第 t t t 步参加的噪声强度。
β 1 < β 2 < ⋯ < β T \beta_1 < \beta_2 < \cdots < \beta_T β1<β2<⋯<βT 构成了一个方差计划 (variance schedule)。
1 − β t x t − 1 \sqrt{1 - \beta_t}\, x_{t-1} 1−βt xt−1 表现对上一步状态的轻微缩放。
β t I \beta_t\, I βtI 是参加的高斯噪声的协方差矩阵(其中 I I I 为单元矩阵)。
联合概率分布:
整个前向过程的联合概率为
q ( x 1 : T ∣ x 0 ) = ∏ t = 1 T q ( x t ∣ x t − 1 ) . q(x_{1:T} \mid x_0) = \prod_{t=1}^T q(x_t \mid x_{t-1}). q(x1:T∣x0)=t=1∏Tq(xt∣xt−1).
紧张特性 (采样 x t x_t xt 的闭式解):
由于高斯分布的良好性质,我们可以直接从 x 0 x_0 x0 采样得到恣意步调 t t t 的 x t x_t xt,而无需进行 t t t 次迭代。设定
α t = 1 − β t , α ˉ t = ∏ s = 1 t α s . \alpha_t = 1 - \beta_t,\quad \bar{\alpha}_t = \prod_{s=1}^t \alpha_s. αt=1−βt,αˉt=s=1∏tαs.
那么,便有闭式解:
q ( x t ∣ x 0 ) = N ( x t ; α ˉ t x 0 , ( 1 − α ˉ t ) I ) , q(x_t \mid x_0) = \mathcal{N}\Big(x_t; \sqrt{\bar{\alpha}_t}\, x_0,\, (1 - \bar{\alpha}_t)\, I\Big), q(xt∣x0)=N(xt;αˉt x0,(1−αˉt)I),
大概写成
x t = α ˉ t x 0 + 1 − α ˉ t ε , ε ∼ N ( 0 , I ) . x_t = \sqrt{\bar{\alpha}_t}\, x_0 + \sqrt{1 - \bar{\alpha}_t}\, \varepsilon,\quad \varepsilon \sim \mathcal{N}(0, I). xt=αˉt x0+1−αˉt ε,ε∼N(0,I).
PS:“第 t 步的噪声图片 x_t,其实就是(原始图片 x₀ 褪色 t 步后的残影)加上 (一个标准噪声 ε 被放大 t 步对应倍数后的结果)。t 越小,x_t 越像 x₀;t 越大,x_t 越像纯噪声 ε。” 2. 反向过程 (Reverse Process / Denoising Process)
这部门是我们需要学习的过程。目的是从噪声
x T ∼ N ( 0 , I ) x_T \sim \mathcal{N}(0, I) xT∼N(0,I)
开始,逐步反向运行该过程,最终天生一个样本 x 0 x_0 x0,使其看起来像真实数据分布 q ( x 0 ) q(x_0) q(x0) 中的样本。
目的:
学习反向的转移概率 p ( x t − 1 ∣ x t ) p(x_{t-1} \mid x_t) p(xt−1∣xt)。
挑战:
直接盘算真实后验 q ( x t − 1 ∣ x t ) q(x_{t-1} \mid x_t) q(xt−1∣xt) 比力困难,因为它需要思量整个数据集的信息。但如果同时条件化 x 0 x_0 x0,则后验 q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1} \mid x_t, x_0) q(xt−1∣xt,x0) 是可求解的(tractable)。
真实的后验 (给定 x 0 x_0 x0):
利用贝叶斯定理可以证明,
q ( x t − 1 ∣ x t , x 0 ) = N ( x t − 1 ; μ ~ t ( x t , x 0 ) , β ~ t I ) , q(x_{t-1} \mid x_t, x_0) = \mathcal{N}\Big(x_{t-1}; \tilde{\mu}_t(x_t, x_0),\, \tilde{\beta}_t\, I\Big), q(xt−1∣xt,x0)=N(xt−1;μ~t(xt,x0),β~tI),
其中均值和方差分别为
μ ~ t ( x t , x 0 ) = α ˉ t − 1 β t 1 − α ˉ t x 0 + α t ( 1 − α ˉ t − 1 ) 1 − α ˉ t x t , \tilde{\mu}_t(x_t, x_0) = \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, μ~t(xt,x0)=1−αˉtαˉt−1 βtx0+1−αˉtαt (1−αˉt−1)xt,
β ~ t = 1 − α ˉ t − 1 1 − α ˉ t β t . \tilde{\beta}_t = \frac{1 - \bar{\alpha}_{t-1}}{1 - \bar{\alpha}_t}\, \beta_t. β~t=1−αˉt1−αˉt−1βt.
模子近似:
由于在天生时我们没有 x 0 x_0 x0 信息,因此使用一个神经网络 p θ p_\theta pθ 来近似反向转移概率:
p θ ( x t − 1 ∣ x t ) = N ( x t − 1 ; μ θ ( x t , t ) , Σ θ ( x t , t ) ) . p_\theta(x_{t-1} \mid x_t) = \mathcal{N}\Big(x_{t-1}; \mu_\theta(x_t, t),\, \Sigma_\theta(x_t, t)\Big). pθ(xt−1∣xt)=N(xt−1;μθ(xt,t),Σθ(xt,t)).
其中, μ θ \mu_\theta μθ 与 Σ θ \Sigma_\theta Σθ 分别由神经网络根据输入 x t x_t xt 实时间步 t t t 预测得到。
简化方差:
在实际应用中,常将方差 Σ θ ( x t , t ) \Sigma_\theta(x_t, t) Σθ(xt,t) 设为固定值,而不是由网络学习。常见做法为:
Σ θ ( x t , t ) = σ t 2 I , \Sigma_\theta(x_t, t) = \sigma_t^2\, I, Σθ(xt,t)=σt2I,
其中 σ t 2 \sigma_t^2 σt2 大概选择为 β t \beta_t βt 或 β ~ t \tilde{\beta}_t β~t。云云,我们主要需要学习的是均值 μ θ ( x t , t ) \mu_\theta(x_t, t) μθ(xt,t)。
天生过程:
从
x T ∼ N ( 0 , I ) x_T \sim \mathcal{N}(0, I) xT∼N(0,I)
开始,依次(从 t = T t = T t=T 到 1 1 1)采样
x t − 1 ∼ p θ ( x t − 1 ∣ x t ) . x_{t-1} \sim p_\theta(x_{t-1} \mid x_t). xt−1∼pθ(xt−1∣xt).
3. 练习目的 (Learning Objective)
我们盼望最大化练习数据 x 0 x_0 x0 的对数似然 log p θ ( x 0 ) \log p_\theta(x_0) logpθ(x0)。直接优化此目的较为困难,因此与变分自编码器(VAE)类似,我们通过优化证据下界(Evidence Lower Bound, ELBO,也称 Variational Lower Bound, VLB)来间接练习模子。
PS:直接盘算 p_θ(x₀) 这个概率极其困难。因为它涉及到 AI 大概通过的所有“去噪步调”最终得到 x₀ 的所有大概路径,这太复杂了!
ELBO 推导:
log p θ ( x 0 ) ≥ L V L B = E q ( x 1 : T ∣ x 0 ) [ log p θ ( x 0 : T ) q ( x 1 : T ∣ x 0 ) ] . \log p_\theta(x_0) \geq L_{\mathrm{VLB}} = \mathbb{E}_{q(x_{1:T}\mid x_0)} \left[ \log \frac{p_\theta(x_{0:T})}{q(x_{1:T}\mid x_0)} \right]. logpθ(x0)≥LVLB=Eq(x1:T∣x0)[logq(x1:T∣x0)pθ(x0:T)].
通常写作:
L V L B = E q [ log p ( x T ) + ∑ t = 1 T log p θ ( x t − 1 ∣ x t ) q ( x t ∣ x t − 1 ) ] , L_{\mathrm{VLB}} = \mathbb{E}_q \left[ \log p(x_T) + \sum_{t=1}^{T} \log \frac{p_\theta(x_{t-1}\mid x_t)}{q(x_t\mid x_{t-1})} \right], LVLB=Eq[logp(xT)+t=1∑Tlogq(xt∣xt−1)pθ(xt−1∣xt)],
PS:如果我们想办法把 ELBO (L_VLB) 的值只管提高,那么我们也就间接地把真正的目的 log p θ ( x 0 ) \log p_\theta(x_0) logpθ(x0) 提高了(至少不会让它变差)。以是,我们不去优化谁人困难的 log p θ ( x 0 ) \log p_\theta(x_0) logpθ(x0),而是优化相对容易处理惩罚的 ELBO (L_VLB)。
(其中 p ( x T ) p(x_T) p(xT) 项由于不依赖于参数 θ \theta θ 可忽略)进一步分解为:
L V L B = E q [ log p θ ( x 0 ∣ x 1 ) ] − D K L ( q ( x T ∣ x 0 ) ∥ p ( x T ) ) − ∑ t = 2 T E q [ D K L ( q ( x t − 1 ∣ x t , x 0 ) ∥ p θ ( x t − 1 ∣ x t ) ) ] . L_{\mathrm{VLB}} = \mathbb{E}_q\Big[\log p_\theta(x_0\mid x_1)\Big] - D_{\mathrm{KL}}\big(q(x_T\mid x_0) \,\|\, p(x_T)\big) - \sum_{t=2}^{T} \mathbb{E}_q\Big[D_{\mathrm{KL}}\big(q(x_{t-1}\mid x_t, x_0) \,\|\, p_\theta(x_{t-1}\mid x_t)\big)\Big]. LVLB=Eq[logpθ(x0∣x1)]−DKL(q(xT∣x0)∥p(xT))−t=2∑TEq[DKL(q(xt−1∣xt,x0)∥pθ(xt−1∣xt))].
PS: p θ ( x 0 ∣ x 1 ) p_θ(x₀|x₁) pθ(x0∣x1):表现 AI 在去噪的末了一步(从轻微有点噪声的 x₁ 变成清楚的 x₀)时,把图片还原得有多好。
D K L ( q ( x T ∣ x 0 ) ∣ ∣ p ( x T ) ) D_KL(q(x_T|x₀) || p(x_T)) DKL(q(xT∣x0)∣∣p(xT)) (噪声匹配 - 练习时可忽略)这部门只跟固定的前向过程和我们对噪声的固定假设有关,跟 AI 的参数 θ 无关。既然跟我们要优化的 θ 无关,那么在练习 AI(优化 θ)时就可以忽略它。
Σ E q [ D K L ( q ( x t − 1 ∣ x t , x 0 ) ∣ ∣ p θ ( x t − 1 ∣ x t ) ) ] Σ E_q[D_KL(q(x_{t-1}|x_t, x₀) || p_θ(x_{t-1}|x_t))] ΣEq[DKL(q(xt−1∣xt,x0)∣∣pθ(xt−1∣xt))] (一步步去噪的匹配 - 焦点部门!):
这是练习中最紧张的部门。它是对所有中间去噪步调(从 t=T 到 t=2)求和。
q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t, x_0) q(xt−1∣xt,x0):这是如果我们有“作弊码”(知道原始清楚图片 x₀),从 x_t 回到 x_{t-1} 的“理想方式”或“精确答案”。我们知道它是一个精确的高斯分布 N ( μ ~ t , β ~ t I ) N(μ̃_t, β̃_t I) N(μ~t,β~tI)。这是我们每一步的目的。
p θ ( x t − 1 ∣ x t ) p_θ(x_{t-1}|x_t) pθ(xt−1∣xt):这是我们的 AI 模子在第 t 步实际做的事情,它只看到当前的 x_t,尝试推测 x_{t-1} 应该是什么样子。我们也把它设计成一个高斯分布 N ( μ θ , σ t 2 I ) N(μ_θ, σ_t² I) N(μθ,σt2I)。这是 AI 的预测。
D K L ( . . . ) D_KL(...) DKL(...):KL 散度是权衡这两个概率分布(理想的 q 和 AI 预测的 p_θ)有多么“不像”或“差别多大”。
目的:为了最大化 ELBO,我们需要在每一步都最小化这个 KL 散度。我们盼望 AI 的预测 (p_θ) 尽大概地接近理想目的 (q)。
关键洞察与简化:
在上式中,项 D K L ( q ( x T ∣ x 0 ) ∥ p ( x T ) ) D_{\mathrm{KL}}\big(q(x_T\mid x_0) \,\|\, p(x_T)\big) DKL(q(xT∣x0)∥p(xT)) 不依赖于模子参数 θ \theta θ,因此可忽略。
log p θ ( x 0 ∣ x 1 ) \log p_\theta(x_0\mid x_1) logpθ(x0∣x1) 为末了一步的重构项。
焦点在于最小化每一步的 KL 散度:
D K L ( q ( x t − 1 ∣ x t , x 0 ) ∥ p θ ( x t − 1 ∣ x t ) ) . D_{\mathrm{KL}}\big(q(x_{t-1}\mid x_t, x_0) \,\|\, p_\theta(x_{t-1}\mid x_t)\big). DKL(q(xt−1∣xt,x0)∥pθ(xt−1∣xt)).
我们知道:
q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}\mid x_t, x_0) q(xt−1∣xt,x0) 是高斯分布 N ( μ ~ t , β ~ t I ) \mathcal{N}(\tilde{\mu}_t,\, \tilde{\beta}_t\, I) N(μ~t,β~tI)。
模子 p θ ( x t − 1 ∣ x t ) p_\theta(x_{t-1}\mid x_t) pθ(xt−1∣xt) 为高斯分布 N ( μ θ ( x t , t ) , σ t 2 I ) \mathcal{N}(\mu_\theta(x_t, t),\, \sigma_t^2\, I) N(μθ(xt,t),σt2I)(此处方差固定)。
最小化这两个固定方差高斯分布之间的 KL 散度,主要等价于最小化它们均值之间的平方误差:
∥ μ ~ t ( x t , x 0 ) − μ θ ( x t , t ) ∥ 2 , \|\tilde{\mu}_t(x_t, x_0) - \mu_\theta(x_t, t)\|^2, ∥μ~t(xt,x0)−μθ(xt,t)∥2,
(忽略那些不依赖于 θ \theta θ 的比例因子与常数项)。
参数化本事 (Noise Prediction):
固然可以直接让神经网络预测均值 μ θ \mu_\theta μθ 以匹配 μ ~ t \tilde{\mu}_t μ~t,但 Ho et al.(DDPM 论文)提出了一种更稳定且结果更好的方法:让神经网络 ε θ ( x t , t ) \varepsilon_\theta(x_t, t) εθ(xt,t) 预测在第 t t t 步参加的噪声 ε \varepsilon ε。
回想前向过程公式:
x t = α ˉ t x 0 + 1 − α ˉ t ε . x_t = \sqrt{\bar{\alpha}_t}\, x_0 + \sqrt{1 - \bar{\alpha}_t}\, \varepsilon. xt=αˉt x0+1−αˉt ε.
反解可得:
x 0 = x t − 1 − α ˉ t ε α ˉ t . x_0 = \frac{x_t - \sqrt{1 - \bar{\alpha}_t}\, \varepsilon}{\sqrt{\bar{\alpha}_t}}. x0=αˉt xt−1−αˉt ε.
将 x 0 x_0 x0 带入 μ ~ t ( x t , x 0 ) \tilde{\mu}_t(x_t, x_0) μ~t(xt,x0) 的表达式后,可以证明 μ ~ t \tilde{\mu}_t μ~t 可以表现为 x t x_t xt 与 ε \varepsilon ε 的函数。
若采用下面的参数化形式,
μ θ ( x t , t ) = 1 α t ( x t − β t 1 − α ˉ t ε θ ( x t , t ) ) , \mu_\theta(x_t, t) = \frac{1}{\sqrt{\alpha_t}} \left( x_t - \frac{\beta_t}{\sqrt{1 - \bar{\alpha}_t}}\, \varepsilon_\theta(x_t, t) \right), μθ(xt,t)=αt 1(xt−1−αˉt βtεθ(xt,t)),
则最小化 ∥ μ ~ t − μ θ ∥ 2 \|\tilde{\mu}_t - \mu_\theta\|^2 ∥μ~t−μθ∥2 便等价于(忽略不依赖于 θ \theta θ 的系数)最小化
∥ ε − ε θ ( x t , t ) ∥ 2 . \|\varepsilon - \varepsilon_\theta(x_t, t)\|^2. ∥ε−εθ(xt,t)∥2.
最终的简化目的函数:
实际练习中,我们通常最小化以下盼望损失:
L s i m p l e ( θ ) = E t , x 0 , ε [ ∥ ε − ε θ ( α ˉ t x 0 + 1 − α ˉ t ε , t ) ∥ 2 ] , L_{\mathrm{simple}}(\theta) = \mathbb{E}_{t,\, x_0,\, \varepsilon} \Big[ \big\|\varepsilon - \varepsilon_\theta\Big(\sqrt{\bar{\alpha}_t}\, x_0 + \sqrt{1 - \bar{\alpha}_t}\, \varepsilon,\, t\Big) \big\|^2 \Big], Lsimple(θ)=Et,x0,ε[ ε−εθ(αˉt x0+1−αˉt ε,t) 2],
其中:
t t t 从 { 1 , … , T } \{1, \ldots, T\} {1,…,T} 中均匀采样;
x 0 x_0 x0 来自真实数据分布 q ( x 0 ) q(x_0) q(x0) 的采样;
ε ∼ N ( 0 , I ) \varepsilon \sim \mathcal{N}(0, I) ε∼N(0,I) 为标准高斯噪声;
ε θ \varepsilon_\theta εθ 为神经网络(通常采用 U-Net 结构),输入噪声图像 x t x_t xt 和时间步 t t t,输出预测的噪声 ε \varepsilon ε。
初始化
从标准高斯分布中采样初始噪声:
x T ∼ N ( 0 , I ) . x_T \sim \mathcal{N}(0, I). xT∼N(0,I).
反向采样过程
对 t t t 从 T T T 递减至 1 1 1:
若 t > 1 t > 1 t>1,从 N ( 0 , I ) \mathcal{N}(0, I) N(0,I) 中采样随机噪声 z z z;若 t = 1 t = 1 t=1,令 z = 0 z = 0 z=0。
利用练习好的神经网络盘算噪声预测:
ε pred = ε θ ( x t , t ) . \varepsilon_{\text{pred}} = \varepsilon_\theta(x_t, t). εpred=εθ(xt,t).
盘算反向过程的均值:
μ θ ( x t , t ) = 1 α t ( x t − β t 1 − α ˉ t ε pred ) . \mu_\theta(x_t, t) = \frac{1}{\sqrt{\alpha_t}} \left( x_t - \frac{\beta_t}{\sqrt{1 - \bar{\alpha}_t}}\, \varepsilon_{\text{pred}} \right). μθ(xt,t)=αt 1(xt−1−αˉt βtεpred).
使用固定标准差 σ t \sigma_t σt(通常有 σ t 2 = β ~ t \sigma_t^2 = \tilde{\beta}_t σt2=β~t 或 σ t 2 = β t \sigma_t^2 = \beta_t σt2=βt)进行采样:
x t − 1 = μ θ ( x t , t ) + σ t z . x_{t-1} = \mu_\theta(x_t, t) + \sigma_t\, z. xt−1=μθ(xt,t)+σtz.
p θ p_\theta pθ 代表的是模子本身,更准确地说,是由参数 θ \theta θ 定义的概率模子。
θ \theta θ (theta) 代表神经网络的所有可学习参数(权重、偏置等)。
p θ ( x 0 ) p_\theta(x_0) pθ(x0) 不是“天生好图片的概率”,而是这个模子认为某张真实的、清楚的图片 x 0 x_0 x0 出现的概率密度。你可以理解为,模子根据它学到的知识,判断 x 0 x_0 x0 这张图片有多么“公道”或“像它应该天生的东西”。
我们的目的是调整参数 θ \theta θ,使得模子 p θ p_\theta pθ 对于所有真实的练习图片 x 0 x_0 x0 都给出尽大概高的概率密度值。也就是说,让模子以为真实图片都是非常“公道”的。
2. ELBO 推导: L V L B L_{VLB} LVLB 为什么等于右边?
这里涉及两个等式,我们分开表明:
第一个等式:
L V L B = E q [ log p θ ( x 0 : T ) q ( x 1 : T ∣ x 0 ) ] L_{VLB} = \mathbb{E}_q\left[\log\frac{p_\theta(x_{0:T})}{q(x_{1:T}\mid x_0)}\right] LVLB=Eq[logq(x1:T∣x0)pθ(x0:T)]
这是 ELBO 的标准定义,源自变分推断理论。它直接关联了我们想最大化的 log p θ ( x 0 ) \log p_\theta(x_0) logpθ(x0) 和一个可以盘算的量。
p θ ( x 0 : T ) p_\theta(x_{0:T}) pθ(x0:T):表现根据我们的模子 p θ p_\theta pθ(包括反向去噪过程 p θ ( x t − 1 ∣ x t ) p_\theta(x_{t-1}\mid x_t) pθ(xt−1∣xt) 和最终噪声假设 p ( x T ) p(x_T) p(xT)),从噪声 x T x_T xT 一路天生到 x 0 x_0 x0 并经历中间状态 x 1 x_1 x1 到 x T − 1 x_{T-1} xT−1 的整个完整路径的联合概率。
q ( x 1 : T ∣ x 0 ) q(x_{1:T}\mid x_0) q(x1:T∣x0):表现根据固定的前向加噪过程 q q q,从清楚图片 x 0 x_0 x0 出发,天生噪声序列 x 1 x_1 x1 到 x T x_T xT 的联合概率。
log ( ⋅ ) \log(\cdot) log(⋅):取对数。
E q ( ⋅ ) \mathbb{E}_q(\cdot) Eq(⋅):表现对所有大概的噪声序列(由 q ( x 1 : T ∣ x 0 ) q(x_{1:T}\mid x_0) q(x1:T∣x0) 定义)求平均值(盼望)。
这个公式的意义在于,它把难以盘算的 log p θ ( x 0 ) \log p_\theta(x_0) logpθ(x0) 与一个涉及模子 p θ p_\theta pθ 与已知过程 q q q 的表达式联系起来,并且知道前者总是大于等于后者(以是叫下界)。
第二个等式(“通常写作”):
L V L B = E q [ log p ( x T ) + ∑ t = 1 T log p θ ( x t − 1 ∣ x t ) q ( x t ∣ x t − 1 ) ] L_{VLB} = \mathbb{E}_q\left[\log p(x_T) + \sum_{t=1}^T \log\frac{p_\theta(x_{t-1}\mid x_t)}{q(x_t\mid x_{t-1})}\right] LVLB=Eq[logp(xT)+t=1∑Tlogq(xt∣xt−1)pθ(xt−1∣xt)]
这个等式是通过对第一个等式中的 log p θ ( x 0 : T ) q ( x 1 : T ∣ x 0 ) \log\frac{p_\theta(x_{0:T})}{q(x_{1:T}\mid x_0)} logq(x1:T∣x0)pθ(x0:T) 进行代数睁开和重新组合得到的。
怎么推的?
把 p θ ( x 0 : T ) p_\theta(x_{0:T}) pθ(x0:T) 写成因子连乘:
p ( x T ) ⋅ p θ ( x T − 1 ∣ x T ) ⋯ p θ ( x 0 ∣ x 1 ) p(x_T) \cdot p_\theta(x_{T-1}\mid x_T) \cdots p_\theta(x_0\mid x_1) p(xT)⋅pθ(xT−1∣xT)⋯pθ(x0∣x1)
把 q ( x 1 : T ∣ x 0 ) q(x_{1:T}\mid x_0) q(x1:T∣x0) 写成因子连乘:
q ( x T ∣ x T − 1 ) ⋯ q ( x 1 ∣ x 0 ) q(x_T\mid x_{T-1}) \cdots q(x_1\mid x_0) q(xT∣xT−1)⋯q(x1∣x0)
利用 log A B = log A − log B \log\frac{A}{B} = \log A - \log B logBA=logA−logB 和 log ( A ⋅ B ⋅ … ) = log A + log B + … \log(A\cdot B\cdot\ldots) = \log A + \log B + \ldots log(A⋅B⋅…)=logA+logB+…
颠末整理,就可以把对整个序列的联合概率的对数,变成对每一步转移概率比值的对数求和,再加上初始噪声项 log p ( x T ) \log p(x_T) logp(xT)。
这种形式更有用,因为它把复杂的整体概率分解成了一步一步的过程,更容易分析和优化。
3. KL 散度 (Kullback-Leibler Divergence)
是什么?
KL 散度是权衡**两个概率分布 P P P 和 Q Q Q 有多“不像”**的一种方式。它的值 D K L ( P ∥ Q ) D_{KL}(P \parallel Q) DKL(P∥Q) 告诉你,如果你用分布 Q Q Q 来近似分布 P P P,你会损失多少信息,大概说 Q Q Q 相比于 P P P 有多少“意外之处”。
如何权衡相似性?
KL 散度的值总是大于等于 0 0 0。
当且仅当两个分布 P P P 和 Q Q Q 完全雷同时,KL 散度等于 0 0 0。
KL 散度的值越小,表现两个分布越相似、越接近;而值越大,则差别越大。
通俗类比:
想象 P P P 是某都会真实的地图,而 Q Q Q 是你画的一张草图。
KL 散度 D K L ( P ∥ Q ) D_{KL}(P \parallel Q) DKL(P∥Q) 就好比在权衡你这张草图 Q Q Q 与真实地图 P P P 比力,有多么“不准确”或“误导人”。
留意:
KL 散度具有不对称性,即 D K L ( P ∥ Q ) D_{KL}(P \parallel Q) DKL(P∥Q) 通常不等于 D K L ( Q ∥ P ) D_{KL}(Q \parallel P) DKL(Q∥P)。在这个暗号中, P P P 被视为基准(真实地图),而 Q Q Q 是要比力的对象(草图)。
q ( x t ∣ x t − 1 ) q(x_t \mid x_{t-1}) q(xt∣xt−1):从 x t − 1 x_{t-1} xt−1 到 x t x_t xt 的单步加噪概率(固定的)。
q ( x 1 : T ∣ x 0 ) q(x_{1:T} \mid x_0) q(x1:T∣x0):给定 x 0 x_0 x0,天生整个噪声序列 x 1 , … , x T x_1, \dots, x_T x1,…,xT 的概率(固定的)。
q ( x t ∣ x 0 ) q(x_t \mid x_0) q(xt∣x0):给定 x 0 x_0 x0,得到第 t t t 步噪声图片 x t x_t xt 的概率(有闭式解,固定的)。
q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1} \mid x_t, x_0) q(xt−1∣xt,x0):给定 x t x_t xt 和 x 0 x_0 x0,反推 x t − 1 x_{t-1} xt−1 的概率(需要用到 x 0 x_0 x0,但也是基于 q q q 推导出来的)。
以是, E q [ … ] E_q[\ldots] Eq[…] 意味着在整个由前向过程定义的所有大概性(包括选择哪个 x 0 x_0 x0,以及基于 x 0 x_0 x0 天生的噪声序列 x 1 : T x_{1:T} x1:T)上求平均值。
5. 最小化 KL 散度的过程是怎样的?
目的是最小化
D K L ( q ( x t − 1 ∣ x t , x 0 ) ∥ p θ ( x t − 1 ∣ x t ) ) D_{KL}(q(x_{t-1}\mid x_t, x_0) \parallel p_\theta(x_{t-1}\mid x_t)) DKL(q(xt−1∣xt,x0)∥pθ(xt−1∣xt))
这里的 θ \theta θ 是我们唯一能调整的内容(仅存在于 p θ p_\theta pθ 中)。
这个过程即梯度降落 (Gradient Descent):
盘算损失:
对于一个练习样本(包括 x 0 x_0 x0, t t t, ϵ \epsilon ϵ,从而得到 x t x_t xt 和目的分布 q q q),盘算当前的 KL 散度值(或与之等价、但更容易盘算的目的,比方背面提到的均值平方差)。这个值即表现当前的“误差”或“损失”。
在 ELBO 的分解中
L V L B = E q [ log p θ ( x 0 ∣ x 1 ) ] − … L_{VLB} = \mathbb{E}_q\big[\log p_\theta(x_0\mid x_1)\big] - \ldots LVLB=Eq[logpθ(x0∣x1)]−…
中, log p θ ( x 0 ∣ x 1 ) \log p_\theta(x_0\mid x_1) logpθ(x0∣x1) 就是末了一步的重构项。它直接反映了模子从末了一个噪声状态 x 1 x_1 x1 中“重构”出清楚图像 x 0 x_0 x0 的结果(通过概率高低来度量)。
更广义地看,每一个 KL 散度项
D K L ( q ( … ) ∥ p θ ( … ) ) D_{KL}(q(\ldots) \parallel p_\theta(\ldots)) DKL(q(…)∥pθ(…))
也可视为第 t t t 步的“重构损失”,因为它权衡了模子反向过程 p θ p_\theta pθ 与理想反向过程 q q q 之间的差距。
7. 双竖线 ∣ ∣ || ∣∣ 是什么意思? p p p 和 q q q 是概率分布吗?
正解! p p p 和 q q q 都代表概率分布。
在 D K L ( P ∥ Q ) D_{KL}(P \parallel Q) DKL(P∥Q) 中,双竖线 ∣ ∣ || ∣∣ 只是 KL 散度的标准暗号,用来分隔比力的两个概率分布 P P P 和 Q Q Q。这符号本身没有其他独立的数学运算意义,仅是暗号的一部门。
8. 应该如何最小化它们的平方误差?
我们要最小化的目的为
Loss = ∥ μ ~ t ( x t , x 0 ) − μ θ ( x t , t ) ∥ 2 \text{Loss} = \|\tilde{\mu}_t(x_t, x_0) - \mu_\theta(x_t, t)\|^2 Loss=∥μ~t(xt,x0)−μθ(xt,t)∥2
如何做? 这正是梯度降落的焦点应用:
前向传播:
给定 x t x_t xt 和 t t t,将它们输入到神经网络 ϵ θ \epsilon_\theta ϵθ,得到输出 ϵ θ ( x t , t ) \epsilon_\theta(x_t, t) ϵθ(xt,t)。
利用 ϵ θ ( x t , t ) \epsilon_\theta(x_t, t) ϵθ(xt,t) 与 x t x_t xt, t t t,通过 μ θ \mu_\theta μθ 的公式盘算出 μ θ ( x t , t ) \mu_\theta(x_t, t) μθ(xt,t)。
同时,由于练习时有 x 0 x_0 x0,可以盘算出目的均值 μ ~ t ( x t , x 0 ) \tilde{\mu}_t(x_t, x_0) μ~t(xt,x0)。
盘算损失:
盘算损失:
Loss = ∥ μ ~ t ( x t , x 0 ) − μ θ ( x t , t ) ∥ 2 \text{Loss} = \|\tilde{\mu}_t(x_t, x_0) - \mu_\theta(x_t, t)\|^2 Loss=∥μ~t(xt,x0)−μθ(xt,t)∥2
(这里的 ∥ ⋅ ∥ 2 \|\cdot\|^2 ∥⋅∥2 表现向量各元素差的平方和)。
反向传播:
利用微积分中的链式法则,盘算 Loss \text{Loss} Loss 关于 μ θ \mu_\theta μθ 的梯度。
再盘算 μ θ \mu_\theta μθ 关于 ϵ θ ( x t , t ) \epsilon_\theta(x_t, t) ϵθ(xt,t) 的梯度。
最终,盘算 Loss \text{Loss} Loss 对神经网络内部所有参数 θ \theta θ 的梯度,这正是反向传播算法的工作。
输入:
它担当两个输入:当前的噪声图片 x t x_t xt以及当前的时间步 t t t(通常会编码为一个向量)。
输出:
它的输出是一个与输入图片 x t x_t xt 尺寸雷同的张量,这个输出便是模子对噪声 ϵ \epsilon ϵ 的预测结果。
因此, ϵ θ ( x t , t ) \epsilon_\theta(x_t, t) ϵθ(xt,t) 就是神经网络模子针对输入 ( x t , t ) (x_t, t) (xt,t) 所盘算出的具体输出值。
它并非一个概率,而是模子基于“为了得到 x t x_t xt,当初大概参加了什么噪声”这一问题给出的具体推测(一个噪声向量/图像)。练习的目的正是使得 ϵ θ ( x t , t ) \epsilon_\theta(x_t, t) ϵθ(xt,t) 尽大概接近真实噪声 ϵ \epsilon ϵ。