接上文

Diffusion model(一): 公式推导详解
Diffusion model(二): 训练推导详解
Diffusion model(三): 公式结论

Diffusion的训练推导

1. 最小化负对数似然与变分下界

在弄懂diffusion model前向和反向过程之后,最后我们需要了解其训练推导过程,即用什么loss以及为什么。在diffusion的反向过程中,根据(3)(3)(3)式我们需要预测μθ(xt,t),Σθ(xt,t)\mu_{\theta}(x_{t}, t), \Sigma_{\theta}(x_{t}, t)μθ​(xt​,t),Σθ​(xt​,t),如何得到一个合理的均值和方差?类似于VAE,在对真实数据分布情况下,最大化模型预测分布的对数似然,即优化x0∼q(x0)x_{0}\sim q(x_{0})x0​∼q(x0​)下的pθ(x0)p_{\theta}(x_{0})pθ​(x0​)的交叉熵
L=Eq(x0)[−log⁡pθ(x0)](12)\mathcal{L} = \mathbb{E}_{q(x_{0})}[-\log p_{\theta}(x_{0})] \tag{12} L=Eq(x0​)​[−logpθ​(x0​)](12)

注意,我们的真实目标是最大化pθ(x)p_{\theta}(x)pθ​(x),(3)(3)(3)对pθ(x)p_{\theta}(x)pθ​(x)取了负log⁡\loglog,所以这里要最小化L\mathcal{L}L。与VAE类似,我们通过变分下限VLB来优化(12)(12)(12)的负对数似然,如下
−log⁡pθ(x0)≤−log⁡pθ(x0)+DKL(q(x1:T∣x0)∣∣pθ(x1:T∣x0))=−log⁡pθ(x0)+Eq(x1:T∣x0)[log⁡q(x1:T∣x0)pθ(x1:T∣x0)]=−log⁡pθ(x0)+Eq(x1:T∣x0)[log⁡q(x1:T∣x0)pθ(x0:T)Pθ(x0)]=−log⁡pθ(x0)+Eq(x1:T∣x0)[log⁡q(x1:T∣x0)pθ(x0:T)+log⁡pθ(x0)⏟此项与q(x1:T∣x0)无关,可直接提出]=Eq(x1:T∣x0)log⁡q(x1:T∣x0)pθ(x0:T)(13)\begin{aligned} -\log p_{\theta}(x_{0}) &\leq -\log p_{\theta}(x_{0}) + D_{KL}(q(x_{1:T}|x_{0}) || p_{\theta}(x_{1:T}|x_{0})) \\ &= -\log p_{\theta}(x_{0}) + \mathbb{E}_{q(x_{1:T}|x_{0})}[\log \frac{q(x_{1:T}|x_{0})}{p_{\theta}(x_{1:T}|x_{0})}] \\ &= -\log p_{\theta}(x_{0}) + \mathbb{E}_{q(x_{1:T}|x_{0})}[\log \frac{q(x_{1:T}|x_{0})}{\frac{p_{\theta}(x_{0:T})}{P_{\theta}(x_{0})}}] \\ &= -\log p_{\theta}(x_{0}) + \mathbb{E}_{q(x_{1:T}|x_{0})}[\log \frac{q(x_{1:T}|x_{0})}{p_{\theta}(x_{0:T})} + \underbrace{\log p_{\theta}(x_{0})}_{此项与q(x_{1:T}|x_{0})无关,可直接提出}] \\ &= \mathbb{E}_{q(x_{1:T}|x_{0})} \log \frac{q(x_{1:T}|x_{0})}{p_{\theta}(x_{0:T})} \end{aligned} \tag{13} −logpθ​(x0​)​≤−logpθ​(x0​)+DKL​(q(x1:T​∣x0​)∣∣pθ​(x1:T​∣x0​))=−logpθ​(x0​)+Eq(x1:T​∣x0​)​[logpθ​(x1:T​∣x0​)q(x1:T​∣x0​)​]=−logpθ​(x0​)+Eq(x1:T​∣x0​)​[logPθ​(x0​)pθ​(x0:T​)​q(x1:T​∣x0​)​]=−logpθ​(x0​)+Eq(x1:T​∣x0​)​[logpθ​(x0:T​)q(x1:T​∣x0​)​+此项与q(x1:T​∣x0​)无关,可直接提出logpθ​(x0​)​​]=Eq(x1:T​∣x0​)​logpθ​(x0:T​)q(x1:T​∣x0​)​​(13)

现在我们得到了最大似然的变分下界,即式(13)(13)(13),但是根据式(12)(12)(12),我们要优化Eq(x0)[−log⁡pθ(x0)]\mathbb{E}_{q(x_{0})}[-\log p_{\theta}(x_{0})]Eq(x0​)​[−logpθ​(x0​)],比(13)(13)(13)多了个期望,所以这里我们加上期望,同时根据重积分中的Fubini定理,得到
Eq(x0)[−log⁡pθ(x0)]≤LVLB=Eq(x0)(Eq(x1:T∣x0)log⁡q(x1:T∣x0)pθ(x0:T))=Eq(x0:T)log⁡q(x1:T∣x0)pθ(x0:T)(14)\begin{aligned} \mathbb{E}_{q(x_{0})}[-\log p_{\theta}(x_{0})] & \leq \mathcal{L}_{VLB} \\ &= \mathbb{E}_{q(x_{0})}\left( \mathbb{E}_{q(x_{1:T}|x_{0})} \log \frac{q(x_{1:T}|x_{0})}{p_{\theta}(x_{0:T})} \right) \\ &= \mathbb{E}_{q(x_{0:T})} \log \frac{q(x_{1:T}|x_{0})}{p_{\theta}(x_{0:T})} \end{aligned} \tag{14} Eq(x0​)​[−logpθ​(x0​)]​≤LVLB​=Eq(x0​)​(Eq(x1:T​∣x0​)​logpθ​(x0:T​)q(x1:T​∣x0​)​)=Eq(x0:T​)​logpθ​(x0:T​)q(x1:T​∣x0​)​​(14)

2. 变分下界的详细推导优化

再次回到(12)(12)(12)式,我们的目标是最小化交叉熵,现在我们得到了他的变分下界,因此我们将最小化L\mathcal{L}L转移为最小化变分下界,即LVLB\mathcal{L}_{VLB}LVLB​,下面我们对变分下界进行化简,化简过程比较长,对一些具有疑惑的化简最后附带详解
LVLB=Eq(x0:T)[log⁡q(x1:T∣x0)pθ(x0:T)]=Eq(x0:T)[log⁡∏t=1Tq(xt∣xt−1)pθ(xT)∏t=1Tpθ(xt−1∣xt)]=Eq(x0:T)[−log⁡pθ(xT)+log⁡∏t=1Tq(xt∣xt−1)∏t=1Tpθ(xt−1∣xt)]=Eq(x0:T)[−log⁡pθ(xT)+∑i=1Tlog⁡q(xt∣xt−1)pθ(xt−1∣xt)]=Eq(x0:T)[−log⁡pθ(xT)+∑i=2Tlog⁡q(xt∣xt−1)pθ(xt−1∣xt)+log⁡q(x1∣x0)pθ(x0∣x1)⏟1.提出此项是因为无意义]=Eq(x0:T)[−log⁡pθ(xT)+∑i=2Tlog⁡q(xt∣xt−1,x0)q(xt∣x0)pθ(xt−1∣xt)q(xt−1∣x0)⏟2.此项与上一项的变化是额外考虑x0+log⁡q(x1∣x0)pθ(x0∣x1)]=Eq(x0:T)[−log⁡pθ(xT)+∑i=2Tlog⁡(q(xt∣xt−1,x0)pθ(xt−1∣xt)⋅q(xt∣x0)q(xt−1∣x0))+log⁡q(x1∣x0)pθ(x0∣x1)]=Eq(x0:T)[−log⁡pθ(xT)+∑i=2T(log⁡q(xt∣xt−1,x0)pθ(xt−1∣xt)+log⁡q(xt∣x0)q(xt−1∣x0))+log⁡q(x1∣x0)pθ(x0∣x1)]=Eq(x0:T)[−log⁡pθ(xT)+∑i=2Tlog⁡q(xt∣xt−1,x0)pθ(xt−1∣xt)+log⁡q(xT∣x0)q(x1∣x0)⏟3.上一项展开即可+log⁡q(x1∣x0)pθ(x0∣x1)]=Eq(x0:T)[−log⁡pθ(xT)+∑i=2Tlog⁡q(xt∣xt−1,x0)pθ(xt−1∣xt)+log⁡q(xT∣x0)−log⁡q(x1∣x0)+log⁡q(x1∣x0)−log⁡pθ(x0∣x1)]=Eq(x0:T)[log⁡q(xT∣x0)pθ(xT)+∑i=2Tlog⁡q(xt∣xt−1,x0)pθ(xt−1∣xt)−log⁡pθ(x0∣x1)]=Eq(x0:T)[DKL(q(xT∣x0)∣∣pθ(xT))⏟LT+∑i=2TDKL(q(xt−1∣xt,x0)∣∣pθ(xt−1∣xt))⏟Lt−log⁡pθ(x0∣x1)⏟L0]\begin{aligned} \mathcal{L}_{VLB} &= \mathbb{E}_{q(x_{0:T})} \left[ \log \frac{q(x_{1:T}|x_{0})}{p_{\theta}(x_{0:T})} \right] \\ &= \mathbb{E}_{q(x_{0:T})} \left[ \log\frac{\prod_{t=1}^{T}q(x_{t}|x_{t-1})}{p_{\theta}(x_{T}) \prod_{t=1}^{T}p_{\theta}(x_{t-1}|x_{t})} \right] \\ &= \mathbb{E}_{q(x_{0:T})} \left[ -\log p_{\theta}(x_{T}) + \log \frac{\prod_{t=1}^{T}q(x_{t}|x_{t-1})}{ \prod_{t=1}^{T}p_{\theta}(x_{t-1}|x_{t})} \right] \\ &= \mathbb{E}_{q(x_{0:T})} \left[ -\log p_{\theta}(x_{T}) + \sum_{i=1}^{T} \log \frac{q(x_{t}|x_{t-1})}{p_{\theta}(x_{t-1}|x_{t})} \right] \\ &= \mathbb{E}_{q(x_{0:T})} \left[ -\log p_{\theta}(x_{T}) + \sum_{i=2}^{T} \log \frac{{\color{red}q(x_{t}|x_{t-1})}}{p_{\theta}(x_{t-1}|x_{t})} + \underbrace{{\color{blue}\log \frac{q(x_{1} | x_{0})}{p_{\theta} (x_{0}|x_{1})}}}_{1. 提出此项是因为无意义} \right] \\ &= \mathbb{E}_{q(x_{0:T})} \left[ -\log p_{\theta}(x_{T}) + \sum_{i=2}^{T} \underbrace{\log \frac{{\color{red}q(x_{t}|x_{t-1}, x_{0})q(x_{t} | x_{0})}}{p_{\theta}(x_{t-1}|x_{t}) {\color{red}q(x_{t-1}|x_{0})}}}_{2. 此项与上一项的变化是额外考虑x_{0}} + \log \frac{q(x_{1} | x_{0})}{p_{\theta} (x_{0}|x_{1})} \right] \\ &= \mathbb{E}_{q(x_{0:T})} \left[ -\log p_{\theta}(x_{T}) + \sum_{i=2}^{T} \log \left( \frac{q(x_{t}|x_{t-1}, x_{0})}{p_{\theta}(x_{t-1}|x_{t}) } \cdot \frac{q(x_{t} | x_{0})}{q(x_{t-1}|x_{0})} \right) + \log \frac{q(x_{1} | x_{0})}{p_{\theta} (x_{0}|x_{1})} \right] \\ &= \mathbb{E}_{q(x_{0:T})} \left[ -\log p_{\theta}(x_{T}) + {\color{orange}\sum_{i=2}^{T}} \left( \log \frac{q(x_{t}|x_{t-1}, x_{0})}{p_{\theta}(x_{t-1}|x_{t}) } + {\color{orange}\log \frac{q(x_{t} | x_{0})}{q(x_{t-1}|x_{0})}} \right) + \log \frac{q(x_{1} | x_{0})}{p_{\theta} (x_{0}|x_{1})} \right] \\ &= \mathbb{E}_{q(x_{0:T})} \left[ -\log p_{\theta}(x_{T}) + \sum_{i=2}^{T} \log \frac{q(x_{t}|x_{t-1}, x_{0})}{p_{\theta}(x_{t-1}|x_{t}) } + \underbrace{{\color{orange}\log \frac{q(x_{T} | x_{0})}{q(x_{1}|x_{0})}}}_{3. 上一项展开即可} + \log \frac{q(x_{1} | x_{0})}{p_{\theta} (x_{0}|x_{1})} \right] \\ &= \mathbb{E}_{q(x_{0:T})} \left[ {\color{gold}-\log p_{\theta}(x_{T})} + \sum_{i=2}^{T} \log \frac{q(x_{t}|x_{t-1}, x_{0})}{p_{\theta}(x_{t-1}|x_{t}) } + {\color{gold}\log q(x_{T}|x_{0}) - \log q(x_{1}|x_{0}) + \log q(x_{1}|x_{0}) - \log p_{\theta}(x_{0}|x_{1})} \right] \\ &= \mathbb{E}_{q(x_{0:T})} \left[ {\color{gold} \log \frac{q(x_{T}|x_{0})}{p_{\theta}(x_{T})}} + \sum_{i=2}^{T} \log \frac{q(x_{t}|x_{t-1}, x_{0})}{p_{\theta}(x_{t-1}|x_{t}) } {\color{gold} - \log p_{\theta}(x_{0}|x_{1})} \right] \\ &= \mathbb{E}_{q(x_{0:T})} \left[ \underbrace{D_{KL}(q(x_{T}|x_{0}) || p_{\theta}(x_{T}))}_{L_{T}} + \sum_{i=2}^{T} \underbrace{D_{KL}(q(x_{t-1}|x_{t}, x_{0})|| p_{\theta}(x_{t-1} | x_{t}))}_{L_{t}} - \underbrace{\log p_{\theta}(x_{0}|x_{1})}_{L_{0}} \right] \end{aligned} LVLB​​=Eq(x0:T​)​[logpθ​(x0:T​)q(x1:T​∣x0​)​]=Eq(x0:T​)​[logpθ​(xT​)∏t=1T​pθ​(xt−1​∣xt​)∏t=1T​q(xt​∣xt−1​)​]=Eq(x0:T​)​[−logpθ​(xT​)+log∏t=1T​pθ​(xt−1​∣xt​)∏t=1T​q(xt​∣xt−1​)​]=Eq(x0:T​)​[−logpθ​(xT​)+i=1∑T​logpθ​(xt−1​∣xt​)q(xt​∣xt−1​)​]=Eq(x0:T​)​​−logpθ​(xT​)+i=2∑T​logpθ​(xt−1​∣xt​)q(xt​∣xt−1​)​+1.提出此项是因为无意义logpθ​(x0​∣x1​)q(x1​∣x0​)​​​​=Eq(x0:T​)​​−logpθ​(xT​)+i=2∑T​2.此项与上一项的变化是额外考虑x0​logpθ​(xt−1​∣xt​)q(xt−1​∣x0​)q(xt​∣xt−1​,x0​)q(xt​∣x0​)​​​+logpθ​(x0​∣x1​)q(x1​∣x0​)​​=Eq(x0:T​)​[−logpθ​(xT​)+i=2∑T​log(pθ​(xt−1​∣xt​)q(xt​∣xt−1​,x0​)​⋅q(xt−1​∣x0​)q(xt​∣x0​)​)+logpθ​(x0​∣x1​)q(x1​∣x0​)​]=Eq(x0:T​)​[−logpθ​(xT​)+i=2∑T​(logpθ​(xt−1​∣xt​)q(xt​∣xt−1​,x0​)​+logq(xt−1​∣x0​)q(xt​∣x0​)​)+logpθ​(x0​∣x1​)q(x1​∣x0​)​]=Eq(x0:T​)​​−logpθ​(xT​)+i=2∑T​logpθ​(xt−1​∣xt​)q(xt​∣xt−1​,x0​)​+3.上一项展开即可logq(x1​∣x0​)q(xT​∣x0​)​​​+logpθ​(x0​∣x1​)q(x1​∣x0​)​​=Eq(x0:T​)​[−logpθ​(xT​)+i=2∑T​logpθ​(xt−1​∣xt​)q(xt​∣xt−1​,x0​)​+logq(xT​∣x0​)−logq(x1​∣x0​)+logq(x1​∣x0​)−logpθ​(x0​∣x1​)]=Eq(x0:T​)​[logpθ​(xT​)q(xT​∣x0​)​+i=2∑T​logpθ​(xt−1​∣xt​)q(xt​∣xt−1​,x0​)​−logpθ​(x0​∣x1​)]=Eq(x0:T​)​​LT​DKL​(q(xT​∣x0​)∣∣pθ​(xT​))​​+i=2∑T​Lt​DKL​(q(xt−1​∣xt​,x0​)∣∣pθ​(xt−1​∣xt​))​​−L0​logpθ​(x0​∣x1​)​​​​

注意:这里化简有一个疑问是从倒数第2行到倒数第1行的过程中,如果要得到KL散度,是需要加上期望符号的,即E\mathbb{E}E,但是推导中没有加,这里不知道为啥,但是就这么用好了

公式解释部分,上述公式懂的话可以不看
1.公式中的红笔部分q(xt∣xt−1)q(x_{t}|x_{t-1})q(xt​∣xt−1​)化简
由xt−1x_{t-1}xt−1​得xtx_{t}xt​比较困难,但是当提供额外的x0x_{0}x0​时,xt−1x_{t-1}xt−1​和xtx_{t}xt​的候选会减少,选择更加确定,因此这里我们加上x0x_{0}x0​,这样推导如下
q(xt∣xt−1)=q(xt−1∣xt)q(xt)q(xt−1)⟶addx0q(xt−1∣xt,x0)q(xt∣x0)q(xt−1∣x0)q(x_{t}|x_{t-1}) = \frac{q(x_{t-1}|x_{t})q(x_{t})}{q(x_{t-1})} ~~ \stackrel{add~x_{0}}{\longrightarrow} ~~ \frac{q(x_{t-1}|x_{t}, x_{0})q(x_{t}|x_{0})}{q(x_{t-1}|x_{0})} q(xt​∣xt−1​)=q(xt−1​)q(xt−1​∣xt​)q(xt​)​  ⟶add x0​​  q(xt−1​∣x0​)q(xt−1​∣xt​,x0​)q(xt​∣x0​)​
2. 公式中蓝色部分为什么无意义?
在红笔公式化简之后,给定x0x_{0}x0​,q(xt∣xt−1)q(x_{t}|x_{t-1})q(xt​∣xt−1​)可以得到q(xt−1∣xt,x0)q(xt∣x0)q(xt−1∣x0)\frac{q(x_{t-1}|x_{t}, x_{0})q(x_{t}|x_{0})}{q(x_{t-1}|x_{0})}q(xt−1​∣x0​)q(xt−1​∣xt​,x0​)q(xt​∣x0​)​,如果我们不将蓝色部分提出,那么q(x1∣x0)q(x_{1}|x_{0})q(x1​∣x0​)会变为q(x0∣x1,x0)q(x1∣x0)q(x0∣x0)\frac{q(x_{0}|x_{1}, x_{0})q(x_{1}|x_{0})}{q(x_{0}|x_{0})}q(x0​∣x0​)q(x0​∣x1​,x0​)q(x1​∣x0​)​,此表达式是无意义的

3. 由变分下界得到优化loss

去掉繁琐的推导过程以及最后的期望符号,我们再回头看一下VLB的化简结果
LVLB∝DKL(q(xT∣x0)∣∣pθ(xT))⏟LT+∑i=2TDKL(q(xt−1∣xt,x0)∣∣pθ(xt−1∣xt))⏟Lt−log⁡pθ(x0∣x1)⏟L0\mathcal{L}_{VLB} \propto \underbrace{D_{KL}(q(x_{T}|x_{0}) || p_{\theta}(x_{T}))}_{L_{T}} + \sum_{i=2}^{T} \underbrace{D_{KL}(q(x_{t-1}|x_{t}, x_{0})|| p_{\theta}(x_{t-1} | x_{t}))}_{L_{t}} - \underbrace{\log p_{\theta}(x_{0}|x_{1})}_{L_{0}} LVLB​∝LT​DKL​(q(xT​∣x0​)∣∣pθ​(xT​))​​+i=2∑T​Lt​DKL​(q(xt−1​∣xt​,x0​)∣∣pθ​(xt−1​∣xt​))​​−L0​logpθ​(x0​∣x1​)​​

  • LT=DKL(q(xT∣x0)∣∣pθ(xT))L_{T}=D_{KL}(q(x_{T}|x_{0}) || p_{\theta}(x_{T}))LT​=DKL​(q(xT​∣x0​)∣∣pθ​(xT​)): 这一项中的前向过程q(xT∣x0)q(x_{T}|x_{0})q(xT​∣x0​)是一个前向加噪的过程,而pθ(xT)p_{\theta}(x_{T})pθ​(xT​)是一个纯粹的高斯噪声,在我们前向过程中,q(xT∣x0)q(x_{T}|x_{0})q(xT​∣x0​)很容易变为高斯噪声,因此LTL_{T}LT​可以看为常量,计算时忽略即可
  • Lt=DKL(q(xt−1∣xt,x0)∣∣pθ(xt−1∣xt))L_{t}=D_{KL}(q(x_{t-1}|x_{t}, x_{0})|| p_{\theta}(x_{t-1} | x_{t}))Lt​=DKL​(q(xt−1​∣xt​,x0​)∣∣pθ​(xt−1​∣xt​)):这一项可以看做拉近2个高斯分布q(xt−1∣xt,x0)=(xt−1;μ~(xt,x0),β~tI)q(x_{t-1}|x_{t}, x_{0}) = \mathcal(x_{t-1}; \tilde{\mu}(x_{t}, x_{0}), \tilde{\beta}_{t}I)q(xt−1​∣xt​,x0​)=(xt−1​;μ~​(xt​,x0​),β~​t​I)和pθ(xt−1∣xt)=N(xt−1;μθ(xt,t),Σθ(xt,t))p_{\theta}({x_{t-1}|x_{t}}) = \mathcal{N}(x_{t-1}; \mu_{\theta}(x_{t}, t), \Sigma_{\theta}(x_{t}, t))pθ​(xt−1​∣xt​)=N(xt−1​;μθ​(xt​,t),Σθ​(xt​,t))之间的距离,根据多元高斯分布的KL散度求解
    Lt=Eq[12∣∣∑θ(xt,t)∣∣22∣∣μ~t(xt,x0)−μθ(xt,t)∣∣2]+CL_{t} = \mathbb{E}_{q}\left[ \frac{1}{2||\sum_{\theta}(x_{t}, t)||_{2}^{2}}|| \tilde{\mu}_{t}(x_{t}, x_{0}) - \mu_{\theta}(x_{t}, t) ||^{2} \right] + C Lt​=Eq​[2∣∣∑θ​(xt​,t)∣∣22​1​∣∣μ~​t​(xt​,x0​)−μθ​(xt​,t)∣∣2]+C
    把式(10)(10)(10)和(11)(11)(11)求得的μ~t(xt,x0)\tilde{\mu}_{t}(x_{t}, x_{0})μ~​t​(xt​,x0​),μθ(xt,t)\mu_{\theta}(x_{t}, t)μθ​(xt​,t)带入得
    Lt=Ex0,z‾t[12∣∣Σθ(xt,t)∣∣22∣∣μ~t(xt,x0)−μθ(xt,t)∣∣2]=Ex0,z‾t[12∣∣Σθ(xt,t)∣∣22∣∣1αt(xt−βt1−α‾tz‾t)−1αt(xt−βt1−α‾tzθ(xt,t))∣∣2]=Ex0,z‾t[βt22αt(1−α‾t∣∣Σθ∣∣22)∣∣z‾t−zθ(xt,t)∣∣2]=Ex0,z‾t[βt22αt(1−α‾t∣∣Σθ∣∣22)∣∣z‾t−zθ(α‾tx0+1−α‾tz‾t,t)∣∣2]\begin{aligned} L_{t} &= \mathbb{E}_{x_{0},\overline{z}_{t}}\left[ \frac{1}{2||\Sigma_{\theta}(x_{t}, t)||_{2}^{2}} || \tilde{\mu}_{t}(x_{t}, x_{0})-\mu_{\theta}(x_{t}, t) ||^{2} \right] \\ &= \mathbb{E}_{x_{0},\overline{z}_{t}}\left[ \frac{1}{2||\Sigma_{\theta}(x_{t}, t)||_{2}^{2}} || \frac{1}{\sqrt{\alpha_{t}}}(x_{t} - \frac{\beta_{t}}{\sqrt{1-\overline{\alpha}_{t}}}\overline{z}_{t}) - \frac{1}{\sqrt{\alpha_{t}}}(x_{t} - \frac{\beta_{t}}{\sqrt{1-\overline{\alpha}_{t}}}z_{\theta}(x_{t}, t))||^{2} \right] \\ &= \mathbb{E}_{x_{0},\overline{z}_{t}}\left[ \frac{\beta_{t}^{2}}{2\alpha_{t}(1-\overline{\alpha}_{t}||\Sigma_{\theta}||^{2}_{2})} || \overline{z}_{t}-z_{\theta}(x_{t}, t) ||^{2} \right] \\ &= \mathbb{E}_{x_{0},\overline{z}_{t}}\left[ \frac{\beta_{t}^{2}}{2\alpha_{t}(1-\overline{\alpha}_{t}||\Sigma_{\theta}||^{2}_{2})} || \overline{z}_{t}-z_{\theta}(\sqrt{\overline{\alpha}_{t}}x_{0} + \sqrt{1-\overline{\alpha}_{t}}\overline{z}_{t} , t) ||^{2} \right] \end{aligned} Lt​​=Ex0​,zt​​[2∣∣Σθ​(xt​,t)∣∣22​1​∣∣μ~​t​(xt​,x0​)−μθ​(xt​,t)∣∣2]=Ex0​,zt​​[2∣∣Σθ​(xt​,t)∣∣22​1​∣∣αt​​1​(xt​−1−αt​​βt​​zt​)−αt​​1​(xt​−1−αt​​βt​​zθ​(xt​,t))∣∣2]=Ex0​,zt​​[2αt​(1−αt​∣∣Σθ​∣∣22​)βt2​​∣∣zt​−zθ​(xt​,t)∣∣2]=Ex0​,zt​​[2αt​(1−αt​∣∣Σθ​∣∣22​)βt2​​∣∣zt​−zθ​(αt​​x0​+1−αt​​zt​,t)∣∣2]​
  • L0=−log⁡pθ(x0∣x1)L_{0}=-\log p_{\theta}(x_{0}|x_{1})L0​=−logpθ​(x0​∣x1​):其他博客解释这个相当于最后一步的熵,但是这个我不是很理解,如果想详细了解可以参考DDPM论文

所有的LLL就是最终的变分下界,DDPM将其进一步化简如下
Ltsimple=Ex0,z‾t[∣∣z‾t−zθ(α‾tx0+1−α‾tz‾t,t)∣∣2]L_{t}^{simple} = \mathbb{E}_{x_{0},\overline{z}_{t}}\left[ || \overline{z}_{t}-z_{\theta}(\sqrt{\overline{\alpha}_{t}}x_{0} + \sqrt{1-\overline{\alpha}_{t}}\overline{z}_{t} , t) ||^{2} \right] Ltsimple​=Ex0​,zt​​[∣∣zt​−zθ​(αt​​x0​+1−αt​​zt​,t)∣∣2]

论文没有将方差Σθ\Sigma_{\theta}Σθ​考虑在训练和推断中,而是将untrained的βt\beta_{t}βt​代替βt~\tilde{\beta_{t}}βt​~​,因为Σθ\Sigma_{\theta}Σθ​可能会导致训练不稳定

到这里我们知道了Diffusion model的训练其实也是去预测每一步的噪声,就像反向过程中对均值推导的那样,μ~t=1αt(xt−βt1−α‾tz‾t)\tilde{\mu}_{t} = \frac{1}{\sqrt{\alpha_{t}}}(x_{t} - \frac{\beta_{t}}{\sqrt{1-\overline{\alpha}_{t}}}\overline{z}_{t})μ~​t​=αt​​1​(xt​−1−αt​​βt​​zt​),这里的均值不依赖x0x_{0}x0​,而他的求解本质上就是xtx_{t}xt​减去随机噪声

4. 训练与推断

最后我们附上论文中训练和推断的过程

在看论文的时候有一点困惑:解释一下为什么训练的时候reverse一步到位,sample的时候得一步一步的来。因为训练的时候我们对于均值u的预测,是建立在x0x_{0}x0​已知的基础上的,所以能够通过公式直接预测噪声进行训练,测试的时候我们只有采样的高斯随机噪声xtx_{t}xt​,并不知道他的x0x_{0}x0​是什么,所以需要一步一步的预测噪声

知识点补充

1. 重参数化技巧

重参数化技巧在VAE中被应用过,此技巧主要用来使采样可以进行反向传播,假设我们随机采样时从任意一个高斯分布N(μ,σ2)\mathcal{N}(\mu, \sigma^{2})N(μ,σ2)中采样,然后预测结果,最终结果是无法反向传播的(不可导),通常做法是使用标准高斯分布N(0,I)\mathcal{N}(0, I)N(0,I)作为引导

具体做法是首先从标准高斯分布中采样一个变量,然后根据高斯分布的均值μ\muμ和方差σ2\sigma^{2}σ2来对采样变量进行线性变换,如下
z=μ+σ⊙ϵ,ϵ∼N(0,I)z = \mu + \sigma \odot \epsilon, \epsilon \sim \mathcal{N}(0, I) z=μ+σ⊙ϵ,ϵ∼N(0,I)

重参数化之后得到的变量zzz具有随机性的,满足均值为μ\muμ,方差为σ2\sigma^{2}σ2的高斯分布,这样采样过程就可导了,随机性加到了ϵ∼N(0,I)\epsilon \sim \mathcal{N}(0, I)ϵ∼N(0,I)上,而不是N(μ,σ2)\mathcal{N}(\mu, \sigma^{2})N(μ,σ2)

再通俗解释一下,就是如果我们直接对原来高斯分布采样的话,采样之后的所有计算是可以反向传播的,但是是传不到<在采样这个步骤之前的过程>的,因为数据具有随机性了,反向传播不能传播随机性的梯度,当我们将随机性转移到ϵ∼N(0,I)\epsilon \sim \mathcal{N}(0, I)ϵ∼N(0,I)上时,因为标准高斯分布之前就没有数据了,所以不用继续传播了,传播的是对其采样之后的μ\muμ和σ\sigmaσ

到这里我们知道了Diffusion model的训练其实也是去预测每一步的噪声,就像反向过程中对均值推导的那样,μ~t=1αt(xt−βt1−α‾tz‾t)\tilde{\mu}_{t} = \frac{1}{\sqrt{\alpha_{t}}}(x_{t} - \frac{\beta_{t}}{\sqrt{1-\overline{\alpha}_{t}}}\overline{z}_{t})μ~​t​=αt​​1​(xt​−1−αt​​βt​​zt​),这里的均值不依赖x0x_{0}x0​,而他的求解本质上就是xtx_{t}xt​减去随机噪声

Diffusion model(二): 训练推导详解相关推荐

  1. 使用残差网络与wgan制作二次元人物头像:训练过程详解

    训练过程详解: 项目地址:https://github.com/dlagez/gan_resnet 我们进入到代码中解析 首先这个网络由三部分文件组成.一个train,一个model,一个loss. ...

  2. Keras深度学习实战(1)——神经网络基础与模型训练过程详解

    Keras深度学习实战(1)--神经网络基础与模型训练过程详解 0. 前言 1. 神经网络基础 1.1 简单神经网络的架构 1.2 神经网络的训练 1.3 神经网络的应用 2. 从零开始构建前向传播 ...

  3. 【相机标定与三维重建原理及实现】学习笔记1——相机模型数学推导详解

    目录 前言 一.小孔成像模型 二.坐标系的变换 1.世界坐标系到相机坐标系的变换(刚体变换)[xw^→xc^\boldsymbol {\hat{x_{w}}}\rightarrow \boldsymb ...

  4. 二叉堆详解实现优先级队列

    二叉堆详解实现优先级队列 文章目录 二叉堆详解实现优先级队列 一.二叉堆概览 二.优先级队列概览 三.实现 swim 和 sink 四.实现 delMax 和 insert 五.最后总结 二叉堆(Bi ...

  5. Spring Cloud Eureka 入门 (二)服务提供者详解

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! "优秀不是过 ...

  6. 集合 (二) ----- Map集合详解

    相关文章: <集合 (一) ----- 集合的基本概念与Collection集合详解> <集合 (二) ----- Map集合详解> 文章目录 Map集合详解 一.Map集合基 ...

  7. LMDI 理论推导详解【从理论到Python-MATLAB实现(理论)】

    LMDI 理论推导详解[从理论到Python-MATLAB实现(理论)] 影响因素分解分析方法能够有效地反映任意时段上各个影响因素对目标变量变化的影响程度 大多数模型虽然可以定量反映各影响因素对目标变 ...

  8. 海康摄像头二次开发详解,包含海康摄像头登录、海康云台控制、视频下载等功能

    海康摄像头二次开发详解 准备 海康摄像头SDK开发下载路径: 开发过程中遇到的问题记录: 添加maven依赖 下面代码中会出现的实体类 CameraManage实体类: ControlDto实体类: ...

  9. 微信小程序云开发入门(二)-数据库详解

    微信小程序云开发入门(二)-数据库详解 接上一篇:微信小程序云开发入门(一) 摘要: 因为微信小程序云数据库有点类似传统的关系型数据库,但又有所不同.所以刚入手的时候会有点困扰,经过一段时间的学习和摸 ...

最新文章

  1. python使用fpdf生成结账发票pdf文件
  2. linux telnet远程登录工具,Linux 远程登录(telnet ssh)
  3. Exchange 数据库邮箱的修复
  4. Android华容道之一步一步实现-序言
  5. java 获取方法的注释_java – 有更有效的方法来获取注释方法吗?
  6. Linux(12.1-12.6)学习笔记
  7. Hyper-V应用指南之5-导出、导入虚拟机
  8. 自己手动复现一个熊猫烧香病毒
  9. 《Java就业培训教程》_张孝祥_书内源码_11
  10. Java实现将阿拉伯数字转换为中文数字123=》一二三
  11. 免费搭建一个云音乐网站
  12. 【原创】谈谈个人与平台
  13. 大白菜读取linux硬盘,大白菜的linux之旅,文件操作首探
  14. 服务器主板北桥芯片组有哪些,主板上北桥芯片组都负责管理哪些硬件?
  15. vue表单项目解决安卓键盘遮挡输入框问题
  16. c语言错误 243什么意思,c语言编译后[Error] stray apos;\243apos; in program
  17. Mongodb空密码可连接安全性问题
  18. 【python】网络编程
  19. 推出新浪微博粉丝关注统计分析业务
  20. spring task定时任务(个人笔记,非教程)

热门文章

  1. bootstrap ace后台管理界面模板
  2. 用AspectJ做的一个回合格斗小游戏
  3. 使用IIS配置Http
  4. Linux SATA驱动
  5. 铁岭专科学校计算机,铁岭师范高等专科学校计算机教师
  6. Primavera P6 EPPM 20.12.X Patch/Update(补丁/更新)
  7. iOS培训之iOS 8正式发布:增加多个新功能
  8. 常用的百度和谷歌搜索语法
  9. cad布局教程_合并CAD布局就是这么快!
  10. JavaWeb中Session详解