论文传送门:Denoising Diffusion Probabilistic Models
代码实现:DDPM模型——pytorch实现
推荐视频:54、Probabilistic Diffusion Model概率扩散模型理论与完整PyTorch代码详细解读
需要的数学基础:
联合概率(Joint probability):
P ( A , B , C ) = P ( C ∣ B , A ) P ( B , A ) = P ( C ∣ B , A ) P ( B ∣ A ) P ( A ) P(A, B, C)=P(C \mid B, A) P(B, A)=P(C \mid B, A) P(B \mid A) P(A) P(A,B,C)=P(C∣B,A)P(B,A)=P(C∣B,A)P(B∣A)P(A)
条件概率(Conditional probability):
P ( B , C ∣ A ) = P ( B ∣ A ) P ( C ∣ A , B ) P(B, C \mid A)=P(B \mid A) P(C \mid A, B) P(B,C∣A)=P(B∣A)P(C∣A,B)
马尔可夫链(Markov Chain):
p ( X t + 1 ∣ X t , … , X 1 ) = p ( X t + 1 ∣ X t ) p\left(X_{t+1} \mid X_{t}, \ldots, X_{1}\right)=p\left(X_{t+1} \mid X_{t}\right) p(Xt+1∣Xt,…,X1)=p(Xt+1∣Xt)
贝叶斯公式(Bayes Rule):
P ( A i ∣ B ) = P ( B ∣ A i ) P ( A i ) ∑ j P ( B ∣ A j ) P ( A j ) P\left(A_{i} \mid B\right)=\frac{P\left(B \mid A_{i}\right) P\left(A_{i}\right)}{\sum_{j} P\left(B \mid A_{j}\right) P\left(A_{j}\right)} P(Ai∣B)=∑jP(B∣Aj)P(Aj)P(B∣Ai)P(Ai)
正态分布(Normal distribution) X ∼ N ( μ , σ 2 ) X \sim N\left(\mu, \sigma^{2}\right) X∼N(μ,σ2)的概率密度函数:
f ( x ) = 1 2 π σ e − ( x − μ ) 2 2 σ 2 f(x)=\frac{1}{\sqrt{2 \pi} \sigma} e^{-\frac{(x-\mu)^{2}}{2 \sigma^{2}}} f(x)=2πσ1e−2σ2(x−μ)2
两个正态分布 X ∼ N ( μ X , σ X 2 ) X \sim N\left(\mu_{X}, \sigma_{X}^{2}\right) X∼N(μX,σX2)和 Y ∼ N ( μ Y , σ Y 2 ) Y \sim N\left(\mu_{Y}, \sigma_{Y}^{2}\right) Y∼N(μY,σY2)的叠加:
U = X + Y ∼ N ( μ X + μ Y , σ X 2 + σ Y 2 ) U=X+Y \sim N\left(\mu_{X}+\mu_{Y}, \sigma_{X}^{2}+\sigma_{Y}^{2}\right) U=X+Y∼N(μX+μY,σX2+σY2)
两个正态分布 p , q p,q p,q的KL散度(Kullback-Leibler divergence):
K L ( p , q ) = log σ q σ p + σ p 2 + ( μ p − μ q ) 2 2 σ q 2 − 1 2 K L(p, q)=\log \frac{\sigma_{q}}{\sigma_{p}}+\frac{\sigma_{p}^{2}+\left(\mu_{p}-\mu_{q}\right)^{2}}{2 \sigma_{q}^{2}}-\frac{1}{2} KL(p,q)=logσpσq+2σq2σp2+(μp−μq)2−21
重参数技巧(Reparameterrization):
若 X ∼ N ( μ , σ 2 ) , Y = X − μ σ ∼ N ( 0 , 1 ) 若X \sim N\left(\mu, \sigma^{2}\right), Y=\frac{X-\mu}{\sigma} \sim N(0,1) 若X∼N(μ,σ2),Y=σX−μ∼N(0,1)
从正态分布 X X X中采样 z z z,等价于从标准正态分布 Y Y Y中采样 z ′ z' z′, z = μ + σ × z ′ z = \mu + \sigma \times z' z=μ+σ×z′
一元二次式的配方:
a x 2 + b x = a ( x + b 2 a ) 2 + C a x^{2}+b x=a\left(x+\frac{b}{2 a}\right)^{2}+C ax2+bx=a(x+2ab)2+C
概念:
t t t:时刻(加噪次数)
T T T:总时长(总加噪次数)
x \mathbf{x} x:图像
x 0 \mathbf{x}_{0} x0:初始时刻图像
x t \mathbf{x}_{t} xt: t t t时刻图像
x T \mathbf{x}_{T} xT:终止时刻图像
x 0 x_0 x0 ~ q ( x 0 ) q(x_0) q(x0), q ( x 0 ) q(x_0) q(x0):真实图像分布
p θ ( x 0 ) : = ∫ p θ ( x 0 : T ) d x 1 : T p_\theta (x_0) := \int p_\theta (x_{0:T}) d x_{1:T} pθ(x0):=∫pθ(x0:T)dx1:T, p θ ( x 0 ) p_\theta (x_0) pθ(x0):生成图像分布
θ \theta θ:(网络)参数
β t \beta_{t} βt:扩散过程t时刻加入噪声的方差
β \beta β:噪声方差序列,长度为T,在 ( 0 , 1 ) (0,1) (0,1)区间内单调递增
Reverse process:
逆扩散过程的数学表达:
p θ ( x 0 : T ) : = p ( x T ) ∏ t = 1 T p θ ( x t − 1 ∣ x t ) p_{\theta}\left(\mathbf{x}_{0: T}\right):=p\left(\mathbf{x}_{T}\right) \prod_{t=1}^{T} p_{\theta}\left(\mathbf{x}_{t-1} \mid \mathbf{x}_{t}\right) pθ(x0:T):=p(xT)t=1∏Tpθ(xt−1∣xt)
全部时刻图像的联合概率分布 p θ ( x 0 : T ) p_{\theta}\left(\mathbf{x}_{0: T}\right) pθ(x0:T),整个过程是马尔科夫链。其中,
p ( x T ) = N ( x T ; 0 , I ) p\left(\mathbf{x}_{T}\right)=\mathcal{N}\left(\mathbf{x}_{T} ; \mathbf{0}, \mathbf{I}\right) p(xT)=N(xT;0,I)
p ( x T ) p\left(\mathbf{x}_{T}\right) p(xT)是标准正态分布, x T \mathbf{x}_{T} xT为采样值,与网络参数无关。
t t t时刻去噪的数学表达:
p θ ( x t − 1 ∣ x t ) : = N ( x t − 1 ; μ θ ( x t , t ) , Σ θ ( x t , t ) ) p_{\theta}\left(\mathbf{x}_{t-1} \mid \mathbf{x}_{t}\right):=\mathcal{N}\left(\mathbf{x}_{t-1} ; \boldsymbol{\mu}_{\theta}\left(\mathbf{x}_{t}, t\right), \boldsymbol{\Sigma}_{\theta}\left(\mathbf{x}_{t}, t\right)\right) pθ(xt−1∣xt):=N(xt−1;μθ(xt,t),Σθ(xt,t))
x t − 1 \mathbf{x}_{t-1} xt−1服从均值为 μ θ ( x t , t ) \boldsymbol{\mu}_{\theta}\left(\mathbf{x}_{t}, t\right) μθ(xt,t),方差为 Σ θ ( x t , t ) \boldsymbol{\Sigma}_{\theta}\left(\mathbf{x}_{t}, t\right) Σθ(xt,t)的正态分布,作者在原文中将方差 Σ θ ( x t , t ) \boldsymbol{\Sigma}_{\theta}\left(\mathbf{x}_{t}, t\right) Σθ(xt,t)设为 σ t 2 = β ~ t = 1 − α ˉ t − 1 1 − α ˉ t β t \sigma_{t}^{2}=\tilde{\beta}_{t}=\frac{1-\bar{\alpha}_{t-1}}{1-\bar{\alpha}_{t}} \beta_{t} σt2=β~t=1−αˉt1−αˉt−1βt(经实验, σ t 2 = β t \sigma_{t}^{2}={\beta}_{t} σt2=βt和 σ t 2 = β ~ t \sigma_{t}^{2}=\tilde{\beta}_{t} σt2=β~t的结果相似),与模型参数无关( β ~ t \tilde{\beta}_{t} β~t在后续计算中会提到)。
Forward process:
扩散过程的数学表达:
q ( x 1 : T ∣ x 0 ) : = ∏ t = 1 T q ( x t ∣ x t − 1 ) q\left(\mathbf{x}_{1: T} \mid \mathbf{x}_{0}\right):=\prod_{t=1}^{T} q\left(\mathbf{x}_{t} \mid \mathbf{x}_{t-1}\right) q(x1:T∣x0):=t=1∏Tq(xt∣xt−1)
给定初始图像 x 0 \mathbf{x}_{0} x0,全部时刻( t > 0 t>0 t>0)的联合概率分布,整个过程是马尔科夫链。
t t t时刻加噪的数学表达:
q ( x t ∣ x t − 1 ) : = N ( x t ; 1 − β t x t − 1 , β t I ) q\left(\mathbf{x}_{t} \mid \mathbf{x}_{t-1}\right):=\mathcal{N}\left(\mathbf{x}_{t} ; \sqrt{1-\beta_{t}} \mathbf{x}_{t-1}, \beta_{t} \mathbf{I}\right) q(xt∣xt−1):=N(xt;1−βtxt−1,βtI)
x t \mathbf{x}_{t} xt服从均值为 1 − β t x t − 1 \sqrt{1-\beta_{t}} \mathbf{x}_{t-1} 1−βtxt−1,方差为 β t \beta_{t} βt的正态分布。
使用重参数技巧,任意时刻的图像 x t \mathbf{x}_{t} xt可以由初始时刻图像 x 0 \mathbf{x}_{0} x0和噪声方差序列 β \beta β来确定,为简化表达,定义 α t : = 1 − β t \alpha_{t}:=1-\beta_{t} αt:=1−βt, α ˉ t : = ∏ s = 1 t α s \bar{\alpha}_{t}:=\prod_{s=1}^{t} \alpha_{s} αˉt:=∏s=1tαs,则:
x t = α t x t − 1 + 1 − α t ϵ t − 1 = α t ( α t − 1 x t − 2 + 1 − α t − 1 ϵ t − 2 ) + 1 − α t ϵ t − 1 = α t α t − 1 x t − 2 +