复现的源码:denoising-diffusion-pytorch | https://github.com/FMsunyh/denoising-diffusion-pytorch
自己的学习心得和部分笔记,希望对您有所帮助。
马尔可夫链的定义,在任何一本随机过程书籍中都可以查到的内容。
p ( x t + 1 ∣ x t , x t − 1 , . . . , x 1 ) = p ( x t + 1 ∣ x t ) (1) p(x_{t+1}|x_{t},x_{t-1},...,x_{1})=p(x_{t+1}|x_{t}) \tag{1} p(xt+1∣xt,xt−1,...,x1)=p(xt+1∣xt)(1)
这个定义以及它的性质,在后面的证明中会使用到。
解释性例子
无记忆性,当天的股票表现仅仅是和前一天有关,与历史其他状态无关。
当有两个独立的正态分布变量 X X X和 Y Y Y时,它们的均值与方差分别为 μ x μ_x μx, μ y μ_y μy 和 σ x 2 σ^2_x σx2, σ y 2 σ^2_y σy2。我们要使用到的2条性质如下:
相加性 U = X + Y U=X+Y U=X+Y:
均值: E ( U ) = E ( X + Y ) = μ x + μ y E(U) = E(X + Y) = \mu_x + \mu_y E(U)=E(X+Y)=μx+μy
方差: V a r ( U ) = V a r ( X + Y ) = σ x 2 + σ y 2 Var(U) = Var(X + Y) = \sigma^2_x + \sigma^2_y Var(U)=Var(X+Y)=σx2+σy2
即,它们的和也满足正态分布 U = X + Y U=X+Y U=X+Y ~ N ( μ x + μ y , σ x 2 + σ y 2 ) N(\mu_x+\mu_y, \sigma^2_x + \sigma^2_y) N(μx+μy,σx2+σy2)
相减性 V = X − Y V=X-Y V=X−Y:
均值: E ( V ) = E ( X − Y ) = μ x − μ y E(V) = E(X - Y) = \mu_x - \mu_y E(V)=E(X−Y)=μx−μy
方差: V a r ( V ) = V a r ( X − Y ) = σ x 2 + σ y 2 Var(V) = Var(X - Y) = \sigma^2_x + \sigma^2_y Var(V)=Var(X−Y)=σx2+σy2
即,它们的差也满足正态分布 U = X − Y U=X-Y U=X−Y ~ N ( μ x − μ y , σ x 2 + σ y 2 ) N(\mu_x-\mu_y, \sigma^2_x + \sigma^2_y) N(μx−μy,σx2+σy2)
P ( B ∣ A ) = P ( A ∣ B ) ⋅ P ( B ) P ( A ) P(B | A) = \frac{{P(A | B) \cdot P(B)}}{{P(A)}} P(B∣A)=P(A)P(A∣B)⋅P(B)
P ( A ) P(A) P(A)是常数,已知的, P ( B ) P(B) P(B)是先验概率, P ( A ∣ B ) P(A | B) P(A∣B)是似然, P ( B ∣ A ) P(B | A) P(B∣A)是后验概率。
A是数据,可以理解为我们的训练数据,B就是你当前的认知,而 P ( B ∣ A ) P(B | A) P(B∣A)就是我们学习了新的数据后,得到的新认知。
P ( B ∣ A , C ) = P ( A ∣ B , C ) ⋅ P ( B ∣ C ) P ( A ∣ C ) P(B | A, C) = \frac{{P(A | B, C) \cdot P(B | C)}}{{P(A | C)}} P(B∣A,C)=P(A∣C)P(A∣B,C)⋅P(B∣C)
END
前向过程,也就是给原图加噪过程,从 x 0 x_0 x0到 x t x_t xt的过程,该过程可以视为马尔科夫链过程,满足::
p ( x t ∣ x t − 1 ) = N ( x t ; α t x t − 1 , β t I ) p(x_t|x_{t-1})=\mathcal{N}(x_t;\sqrt{\alpha_t}x_{t-1}, \beta_t I) p(xt∣xt−1)=N(xt;αtxt−1,βtI)
x t = α t x t − 1 + β t ϵ t ϵ t ∼ N ( 0 , I ) x_t = \sqrt{\alpha_t} x_{t-1} + \sqrt{\beta_t} \epsilon_t \; \; \epsilon_t \sim \mathcal{N}(0,I) xt=αtxt−1+βtϵtϵt∼N(0,I)
α t = 1 − β t \alpha_t=1-\beta_t αt=1−βt
其中 β t ∈ ( 0 , 1 ) \beta_t \in(0,1) βt∈(0,1)为高斯分布的方差超差,并满足 β 1 < β 2 < . . . < β T \beta_1<\beta_2<...<\beta_T β1<β2<...<βT。
前两行公式是一个意思,表示 x t − 1 x_{t-1} xt−1加上一个高斯噪声得到 x t x_{t} xt, α t = 1 − β t \alpha_t=1-\beta_t αt=1−βt是一个超参数,已知值。
推导 x t x_{t} xt和 x 0 x_{0} x0的关系,对公式$x_t = \sqrt{\alpha_t} x_{t-1} + \sqrt{\beta_t} \epsilon_t ; ; \epsilon_t \sim \mathcal{N}(0,I) $进行展开:
x t = α t x t − 1 + β t ϵ t ϵ t ∼ N ( 0 , I ) x t − 1 = α t − 1 x t − 2 + β t − 1 ϵ t − 1 ϵ t − 1 ∼ N ( 0 , I ) . . . x 1 = α 1 x 0 + β 1 ϵ 1 ϵ 1 ∼ N ( 0 , I ) \begin{aligned} x_t &= \sqrt{\alpha_t} x_{t-1} + \sqrt{\beta_t} \epsilon_t \; \; \epsilon_t \sim \mathcal{N}(0,I) \\ x_{t-1} &= \sqrt{\alpha_{t-1}} x_{t-2} + \sqrt{\beta_{t-1}} \epsilon_{t-1} \; \; \epsilon_{t-1} \sim \mathcal{N}(0,I) \\ ... \\ x_1 &= \sqrt{\alpha_{1}} x_0 + \sqrt{\beta_1} \epsilon_1 \; \; \epsilon_1 \sim \mathcal{N}(0,I) \\ \end{aligned} xtxt−1...x1=αtxt−1+βtϵtϵt∼N(0,I)=αt−1xt−2+βt−1ϵt−1ϵt−1∼N(0,I)=α1x0+β1ϵ1ϵ1∼N(0,I)
把 x t − 1 x_{t-1} xt−1 和 β t = 1 − α t \beta_t=1-\alpha_t βt=1−αt 代入 x t x_{t} xt,得到:
x t = α t x t − 1 + β t ϵ t = α t ( α t − 1 x t − 2 + 1 − α t − 1 ϵ t − 1 ) + 1 − α t ϵ t = α t α t − 1 x t − 2 + α t 1 − α t − 1 ϵ t − 1 + 1 − α t ϵ t = α t α t − 1 x t − 2 + α t − α t α t − 1 ϵ t − 1 + 1 − α t ϵ t = α t α t − 1 x t − 2 + α t − α t α t − 1 2 + 1 − α t 2 ϵ t − 2 = α t α t − 1 x t − 2 + 1 − α t α t − 1 ϵ t − 2 = … = ∏ i = 1 t α i x 0 + 1 − ∏ i = 1 t α i ϵ 0 = α t ˉ x 0 + 1 − α t ˉ ϵ 0 ;设: α ˉ t = α 1 . . . α t ∼ N ( x t , α t ˉ x 0 , ( 1 − α t ˉ ) I ) \begin{aligned} x_t &= \sqrt{\alpha_t} x_{t-1} + \sqrt{\beta_t} \epsilon_t \\ &=\sqrt{\alpha_t} (\sqrt{\alpha_{t-1}} x_{t-2} + \sqrt{1-\alpha_{t-1}} \epsilon_{t-1}) + \sqrt{1-\alpha_t} \epsilon_t \\ &=\sqrt{\alpha_t} \sqrt{\alpha_{t-1}} x_{t-2} + \sqrt{\alpha_t} \sqrt{1-\alpha_{t-1}} \epsilon_{t-1} + \sqrt{1-\alpha_t} \epsilon_t \\ &=\sqrt{\alpha_t\alpha_{t-1}} x_{t-2} + \sqrt{\alpha_t-\alpha_t\alpha_{t-1}} \epsilon_{t-1} + \sqrt{1-\alpha_t} \epsilon_t \\ &=\sqrt{\alpha_t\alpha_{t-1}} x_{t-2} + \sqrt{\sqrt{\alpha_t-\alpha_t\alpha_{t-1}}^2 + \sqrt{1-\alpha_t}^2} \epsilon_{t-2} \\ &=\sqrt{\alpha_t\alpha_{t-1}} x_{t-2} + \sqrt{1-\alpha_t\alpha_{t-1}} \epsilon_{t-2} \\ &=\dots \\ &=\sqrt{\prod_{i=1}^t{\alpha_i}}x_0 + \sqrt{1-\prod_{i=1}^t{\alpha_i}}\epsilon_0 \\ &=\sqrt{\bar{\alpha_t}}x_0 + \sqrt{1-\bar{\alpha_t}}\epsilon_0;设:\bar{\alpha}_t= \alpha_1...\alpha_t \\ &\sim \mathcal{N}(x_t, \sqrt{\bar{\alpha_t}}x_0, (1-\bar{\alpha_t})I) \end{aligned} xt=αtxt−1+βtϵt=αt(αt−1xt−2+1−αt−1ϵt−1)+1−αtϵt=αtαt−1xt−2+αt1−αt−1ϵt−1+1−αtϵt=αtαt−1xt−2+αt−αtαt−1ϵt−1+1−αtϵt=αtαt−1xt−2+αt−αtαt−12+1−αt2ϵt−2=αtαt−1xt−2+1−αtαt−1ϵt−2=…=i=1∏tαix0+1−i=1∏tαiϵ0=αtˉx0+1−αtˉϵ0;设:αˉt=α1...αt∼N(xt,αtˉx0,(1−αtˉ)I)
其中,
公式$\sqrt{\sqrt{\alpha_t-\alpha_t\alpha_{t-1}}^2 + \sqrt{1-\alpha_t}^2} \epsilon_{t-2} $ ,用到了2个高斯分布相加的性质;
公式 α t ˉ x 0 + 1 − α t ˉ ϵ 0 \sqrt{\bar{\alpha_t}}x_0 + \sqrt{1-\bar{\alpha_t}}\epsilon_0 αtˉx0+1−αtˉϵ0, 用到了参数重整技巧
最后得到 x t 和 x 0 x_{t}和x_0 xt和x0的关系, p ( x t ∣ x 0 ) p(x_{t}|x_0) p(xt∣x0):
p ( x t ∣ x 0 ) = α ˉ t x 0 + 1 − α ˉ t ϵ ϵ ∼ N ( 0 , I ) p(x_{t}|x_0) = \sqrt{\bar{\alpha}_{t}}x_0 + \sqrt{1-\bar{\alpha}_{t}}\epsilon \; \; \epsilon \sim \mathcal{N}(0, I) p(xt∣x0)=αˉtx0+1−αˉtϵϵ∼N(0,I)
到这里,我们就可以知道,已知 x 0 x_0 x0, α ˉ t \bar{\alpha}_{t} αˉt和 ϵ \epsilon ϵ高斯采样,直接得到 x t x_{t} xt。
两个高斯分布求距离,论文中用了KL散度去计算距离。
END
贝叶斯公式
p ( x t − 1 ∣ x t ) = p ( x t ∣ x t − 1 ) ⋅ p ( x t − 1 ) p ( x t ) p(x_{t-1}|x_t) = \frac{{p(x_t | x_{t-1}) \cdot p(x_{t-1})}}{{p(x_t)}} p(xt−1∣xt)=p(xt)p(xt∣xt−1)⋅p(xt−1)
问题是: p ( x t − 1 ) , p ( x t ) p(x_{t-1}) \; , p(x_t) p(xt−1),p(xt)未知,因为无法直接从 x t x_t xt推导 x t − 1 x_{t-1} xt−1
但是可以在 x 0 x_0 x0的条件下进行推导,引入条件贝叶斯公式:
p ( x t − 1 ∣ x t , x 0 ) = p ( x t ∣ x t − 1 , x 0 ) ⋅ p ( x t − 1 ∣ x 0 ) p ( x t ∣ x 0 ) = p ( x t ∣ x t − 1 ) ⋅ p ( x t − 1 ∣ x 0 ) p ( x t ∣ x 0 ) (3) p(x_{t-1}|x_t, x_0) = \frac{{p(x_t | x_{t-1}, x_0) \cdot p(x_{t-1}|x_0)}}{{p(x_t|x_0)}} = \frac{{p(x_t | x_{t-1}) \cdot p(x_{t-1}|x_0)}}{{p(x_t|x_0)}} \tag{3} p(xt−1∣xt,x0)=p(xt∣x0)p(xt∣xt−1,x0)⋅p(xt−1∣x0)=p(xt∣x0)p(xt∣xt−1)⋅p(xt−1∣x0)(3)
由前向过程,可以得到以下3式,将以下3式代入,化简一下:
p ( x t − 1 ∣ x 0 ) = α ˉ t − 1 x 0 + 1 − α ˉ t − 1 ϵ ∼ N ( α ˉ t − 1 x 0 , 1 − α ˉ t − 1 ) p ( x t ∣ x 0 ) = α ˉ t x 0 + 1 − α ˉ t ϵ ∼ N ( α ˉ t x 0 , 1 − α ˉ t ) p ( x t ∣ x t − 1 ) = α t x t − 1 + 1 − α ˉ t ϵ ∼ N ( α t x t − 1 , 1 − α ˉ t ) \begin{aligned} p(x_{t-1}|x_0) &= \sqrt{\bar{\alpha}_{t-1}}x_0 + \sqrt{1-\bar{\alpha}_{t-1}}\epsilon \sim \mathcal{N}(\sqrt{\bar{\alpha}_{t-1}}x_0, 1-\bar{\alpha}_{t-1}) \\ p(x_{t}|x_0) &= \sqrt{\bar{\alpha}_{t}}x_0 + \sqrt{1-\bar{\alpha}_{t}}\epsilon \sim \mathcal{N}(\sqrt{\bar{\alpha}_{t}}x_0, 1-\bar{\alpha}_{t}) \\ p(x_{t}|x_{t-1}) &= \sqrt{\alpha_{t}}x_{t-1} + \sqrt{1-\bar{\alpha}_{t}}\epsilon \sim \mathcal{N}(\sqrt{\alpha_{t}}x_{t-1}, 1-\bar{\alpha}_{t}) \end{aligned} p(xt−1∣x0)p(xt∣x0)p(xt∣xt−1)=αˉt−1x0+1−αˉt−1ϵ∼N(αˉt−1x0,1−αˉt−1)=αˉtx0+1−αˉtϵ∼N(αˉtx0,1−αˉt)=αtxt−1+1−αˉtϵ∼N(αtxt−1,1−αˉt)
开始化简:
p ( x t − 1 ∣ x t , x 0 ) = p ( x t ∣ x t − 1 , x 0 ) ⋅ p ( x t − 1 ∣ x 0 ) p ( x t ∣ x 0 ) = p ( x t ∣ x t − 1 ) ⋅ p ( x t − 1 ∣ x 0 ) p ( x t ∣ x 0 ) = N ( α t x t − 1 , 1 − α ˉ t ) ⋅ N ( α ˉ t − 1 x 0 , 1 − α ˉ t − 1 ) N ( α ˉ t x 0 , 1 − α ˉ t ) \begin{aligned} p(x_{t-1}|x_t, x_0) &= \frac{{p(x_t | x_{t-1}, x_0) \cdot p(x_{t-1}|x_0)}}{{p(x_t|x_0)}} \\ &= \frac{{p(x_t | x_{t-1}) \cdot p(x_{t-1}|x_0)}}{{p(x_t|x_0)}} \\ &=\frac{\mathcal{N}(\sqrt{\alpha_{t}}x_{t-1}, 1-\bar{\alpha}_{t}) \cdot \mathcal{N}(\sqrt{\bar{\alpha}_{t-1}}x_0, 1-\bar{\alpha}_{t-1})} {\mathcal{N}(\sqrt{\bar{\alpha}_{t}}x_0, 1-\bar{\alpha}_{t})} \end{aligned} p(xt−1∣xt,x0)=p(xt∣x0)p(xt∣xt−1,x0)⋅p(xt−1∣x0)=p(xt∣x0)p(xt∣xt−1)⋅p(xt−1∣x0)=N(αˉtx0,1−αˉt)N(αtxt−1,1−αˉt)⋅N(αˉt−1x0,1−αˉt−1)
p ( x t − 1 ∣ x t , x 0 ) ∝ e x p ( − 1 2 ( ( x t − α t x t − 1 ) 2 β t ) + ( x t − 1 − α ˉ t − 1 x 0 ) 2 1 − α ˉ t − 1 − ( x t − α ˉ t x 0 ) 2 1 − α ˉ t ) p(x_{t-1}|x_t, x_0) \propto exp(-\frac{1}{2}(\frac{(x_t-\sqrt{\alpha_t}x_{t-1})^2}{\beta_t})+\frac{(x_{t-1}-\sqrt{\bar{\alpha}}_{t-1}x_0)^2}{1-\bar{\alpha}_{t-1}}-\frac{(x_t-\sqrt{\bar{\alpha}_t}x_0)^2}{1-\bar{\alpha}_t}) p(xt−1∣xt,x0)∝exp(−21(βt(xt−αtxt−1)2)+1−αˉt−1(xt−1−αˉt−1x0)2−1−αˉt(xt−αˉtx0)2)
T i p s N o r m a l d i s t r i b u t i o n : e x p ( − ( x − μ ) 2 2 σ 2 ) = e x p ( − 1 2 ( 1 σ 2 x 2 − 2 μ σ 2 x + μ 2 σ 2 ) ) Tips\ Normal\ distribution:exp(-\frac{(x-\mu)^2}{2\sigma^2})=exp(-\frac{1}{2}(\frac{1}{\sigma^2}x^2-\frac{2\mu}{\sigma^2}x+\frac{\mu^2}{\sigma^2})) Tips Normal distribution:exp(−2σ2(x−μ)2)=exp(−21(σ21x2−σ22μx+σ2μ2))
参考论文 Understanding Diffusion Models: A Unified Perspective
从上式,我们可以知道, x t − 1 x_{t-1} xt−1是满足均值为 μ \mu μ,方差为 σ \sigma σ,它们的取值分别为:
σ 2 = β t ( 1 − α ˉ t − 1 ) α t ( 1 − α ˉ t − 1 ) + β t \sigma^2 = \frac{\beta_t(1-\bar{\alpha}_{t-1})}{\alpha_t(1-\bar{\alpha}_{t-1})+\beta_t} σ2=αt(1−αˉt−1)+βtβt(1−αˉt−1)
μ = α t ( 1 − α ˉ t − 1 ) 1 − α t ˉ x t + α ˉ t − 1 β t 1 − α ˉ t x 0 \mu = \frac{\sqrt{\alpha_t}(1-\bar{\alpha}_{t-1})}{1-\bar{\alpha_t}}x_t+\frac{\sqrt{\bar{\alpha}_{t-1}}\beta_t}{1-\bar{\alpha}_t}x_0 μ=1−αtˉαt(1−αˉt−1)xt+1−αˉtαˉt−1βtx0
x 0 是未知的 , 我们可以选择一个未知的函数使得 x 0 = f ( x t ) ,但是观察之前的公式可以得知,从 x 0 推导 x t 的公式取逆就是一条满足的公式【没理解?】 x_0是未知的,我们可以选择一个未知的函数使得x_0=f(x_t),但是观察之前的公式可以得知,从x_0推导x_t的公式取逆就是一条满足的公式【没理解?】 x0是未知的,我们可以选择一个未知的函数使得x0=f(xt),但是观察之前的公式可以得知,从x0推导xt的公式取逆就是一条满足的公式【没理解?】
x 0 = 1 α ˉ t ( x t − 1 − α ˉ t ϵ t ) x_0 = \frac{1}{\sqrt{\bar{\alpha}}_t}(x_t-\sqrt{1-\bar{\alpha}_t}\epsilon_t) x0=αˉt1(xt−1−αˉtϵt)
只是其中一个公式,
代入
μ = 1 α t ( x t − β t 1 − α ˉ t ϵ t ) \mu=\frac{1}{\sqrt{\alpha_t}}(x_t-\frac{\beta_t}{\sqrt{1-\bar\alpha}_t}\epsilon_t) μ=αt1(xt−1−αˉtβtϵt)
因为 ϵ t \epsilon_t ϵt是高斯噪音,用神经网络去拟合,也就是我们训练大模型的网络Unet,表示为: ϵ θ ( x t , t ) \epsilon_\theta(x_t,t) ϵθ(xt,t)
从而也可以得到要优化的目标,就是拟合出每一步的噪音, ∣ ∣ ϵ t − ϵ θ ( x t , t ) ∣ ∣ 2 ||\epsilon_t-\epsilon_\theta(x_t,t)||^2 ∣∣ϵt−ϵθ(xt,t)∣∣2
最后的采样公式,利用重参数技巧:
x t − 1 = 1 α t ( x t − β t 1 − α ˉ t ϵ θ ( x t , t ) ) + σ t ϵ ϵ ∼ N ( 0 , I ) x_{t-1}=\frac{1}{\sqrt{\alpha_t}}(x_t-\frac{\beta_t}{\sqrt{1-\bar\alpha}_t}\epsilon_\theta(x_t,t))+\sigma_t\epsilon \;\; \epsilon \sim \mathcal{N}(0 , I) xt−1=αt1(xt−1−αˉtβtϵθ(xt,t))+σtϵϵ∼N(0,I)
END
Stable Diffusion: https://github.com/CompVis/stable-diffusion
DDPM 相关资料
DDIM 相关资料
PNDM/PLMS 相关资料
VAE 相关资料
相关论文
重参数技巧
博文
入门基础
原理进阶
李宏毅
参考源码