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

news2025/1/31 23:58:21

接上文

Diffusion的训练推导

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

在弄懂diffusion model前向和反向过程之后,最后我们需要了解其训练推导过程,即用什么loss以及为什么。在diffusion的反向过程中,根据 ( 3 ) (3) (3)式我们需要预测 μ θ ( x t , t ) , Σ θ ( x t , t ) \mu_{\theta}(x_{t}, t), \Sigma_{\theta}(x_{t}, t) μθ(xt,t),Σθ(xt,t),如何得到一个合理的均值和方差?类似于VAE,在对真实数据分布情况下,最大化模型预测分布的对数似然,即优化 x 0 ∼ q ( x 0 ) x_{0}\sim q(x_{0}) x0q(x0)下的 p θ ( x 0 ) p_{\theta}(x_{0}) pθ(x0)的交叉熵
L = E q ( x 0 ) [ − log ⁡ p θ ( x 0 ) ] (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 ⁡ \log log,所以这里要最小化 L \mathcal{L} L。与VAE类似,我们通过变分下限VLB来优化 ( 12 ) (12) (12)负对数似然,如下
− log ⁡ p θ ( x 0 ) ≤ − log ⁡ p θ ( x 0 ) + D K L ( q ( x 1 : T ∣ x 0 ) ∣ ∣ p θ ( x 1 : T ∣ x 0 ) ) = − log ⁡ p θ ( x 0 ) + E q ( x 1 : T ∣ x 0 ) [ log ⁡ q ( x 1 : T ∣ x 0 ) p θ ( x 1 : T ∣ x 0 ) ] = − log ⁡ p θ ( x 0 ) + E q ( x 1 : T ∣ x 0 ) [ log ⁡ q ( x 1 : T ∣ x 0 ) p θ ( x 0 : T ) P θ ( x 0 ) ] = − log ⁡ p θ ( x 0 ) + E q ( x 1 : T ∣ x 0 ) [ log ⁡ q ( x 1 : T ∣ x 0 ) p θ ( x 0 : T ) + log ⁡ p θ ( x 0 ) ⏟ 此项与 q ( x 1 : T ∣ x 0 ) 无关,可直接提出 ] = E q ( x 1 : T ∣ x 0 ) log ⁡ q ( x 1 : T ∣ x 0 ) p θ ( x 0 : 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:Tx0)∣∣pθ(x1:Tx0))=logpθ(x0)+Eq(x1:Tx0)[logpθ(x1:Tx0)q(x1:Tx0)]=logpθ(x0)+Eq(x1:Tx0)[logPθ(x0)pθ(x0:T)q(x1:Tx0)]=logpθ(x0)+Eq(x1:Tx0)[logpθ(x0:T)q(x1:Tx0)+此项与q(x1:Tx0)无关,可直接提出 logpθ(x0)]=Eq(x1:Tx0)logpθ(x0:T)q(x1:Tx0)(13)

现在我们得到了最大似然的变分下界,即式 ( 13 ) (13) (13),但是根据式 ( 12 ) (12) (12),我们要优化 E q ( x 0 ) [ − log ⁡ p θ ( x 0 ) ] \mathbb{E}_{q(x_{0})}[-\log p_{\theta}(x_{0})] Eq(x0)[logpθ(x0)],比 ( 13 ) (13) (13)多了个期望,所以这里我们加上期望,同时根据重积分中的Fubini定理,得到
E q ( x 0 ) [ − log ⁡ p θ ( x 0 ) ] ≤ L V L B = E q ( x 0 ) ( E q ( x 1 : T ∣ x 0 ) log ⁡ q ( x 1 : T ∣ x 0 ) p θ ( x 0 : T ) ) = E q ( x 0 : T ) log ⁡ q ( x 1 : T ∣ x 0 ) p θ ( x 0 : 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:Tx0)logpθ(x0:T)q(x1:Tx0))=Eq(x0:T)logpθ(x0:T)q(x1:Tx0)(14)

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

再次回到 ( 12 ) (12) (12)式,我们的目标是最小化交叉熵,现在我们得到了他的变分下界,因此我们将最小化 L \mathcal{L} L转移为最小化变分下界,即 L V L B \mathcal{L}_{VLB} LVLB,下面我们对变分下界进行化简,化简过程比较长,对一些具有疑惑的化简最后附带详解
L V L B = E q ( x 0 : T ) [ log ⁡ q ( x 1 : T ∣ x 0 ) p θ ( x 0 : T ) ] = E q ( x 0 : T ) [ log ⁡ ∏ t = 1 T q ( x t ∣ x t − 1 ) p θ ( x T ) ∏ t = 1 T p θ ( x t − 1 ∣ x t ) ] = E q ( x 0 : T ) [ − log ⁡ p θ ( x T ) + log ⁡ ∏ t = 1 T q ( x t ∣ x t − 1 ) ∏ t = 1 T p θ ( x t − 1 ∣ x t ) ] = E q ( x 0 : T ) [ − log ⁡ p θ ( x T ) + ∑ i = 1 T log ⁡ q ( x t ∣ x t − 1 ) p θ ( x t − 1 ∣ x t ) ] = E q ( x 0 : T ) [ − log ⁡ p θ ( x T ) + ∑ i = 2 T log ⁡ q ( x t ∣ x t − 1 ) p θ ( x t − 1 ∣ x t ) + log ⁡ q ( x 1 ∣ x 0 ) p θ ( x 0 ∣ x 1 ) ⏟ 1. 提出此项是因为无意义 ] = E q ( x 0 : T ) [ − log ⁡ p θ ( x T ) + ∑ i = 2 T log ⁡ q ( x t ∣ x t − 1 , x 0 ) q ( x t ∣ x 0 ) p θ ( x t − 1 ∣ x t ) q ( x t − 1 ∣ x 0 ) ⏟ 2. 此项与上一项的变化是额外考虑 x 0 + log ⁡ q ( x 1 ∣ x 0 ) p θ ( x 0 ∣ x 1 ) ] = E q ( x 0 : T ) [ − log ⁡ p θ ( x T ) + ∑ i = 2 T log ⁡ ( q ( x t ∣ x t − 1 , x 0 ) p θ ( x t − 1 ∣ x t ) ⋅ q ( x t ∣ x 0 ) q ( x t − 1 ∣ x 0 ) ) + log ⁡ q ( x 1 ∣ x 0 ) p θ ( x 0 ∣ x 1 ) ] = E q ( x 0 : T ) [ − log ⁡ p θ ( x T ) + ∑ i = 2 T ( log ⁡ q ( x t ∣ x t − 1 , x 0 ) p θ ( x t − 1 ∣ x t ) + log ⁡ q ( x t ∣ x 0 ) q ( x t − 1 ∣ x 0 ) ) + log ⁡ q ( x 1 ∣ x 0 ) p θ ( x 0 ∣ x 1 ) ] = E q ( x 0 : T ) [ − log ⁡ p θ ( x T ) + ∑ i = 2 T log ⁡ q ( x t ∣ x t − 1 , x 0 ) p θ ( x t − 1 ∣ x t ) + log ⁡ q ( x T ∣ x 0 ) q ( x 1 ∣ x 0 ) ⏟ 3. 上一项展开即可 + log ⁡ q ( x 1 ∣ x 0 ) p θ ( x 0 ∣ x 1 ) ] = E q ( x 0 : T ) [ − log ⁡ p θ ( x T ) + ∑ i = 2 T log ⁡ q ( x t ∣ x t − 1 , x 0 ) p θ ( x t − 1 ∣ x t ) + log ⁡ q ( x T ∣ x 0 ) − log ⁡ q ( x 1 ∣ x 0 ) + log ⁡ q ( x 1 ∣ x 0 ) − log ⁡ p θ ( x 0 ∣ x 1 ) ] = E q ( x 0 : T ) [ log ⁡ q ( x T ∣ x 0 ) p θ ( x T ) + ∑ i = 2 T log ⁡ q ( x t ∣ x t − 1 , x 0 ) p θ ( x t − 1 ∣ x t ) − log ⁡ p θ ( x 0 ∣ x 1 ) ] = E q ( x 0 : T ) [ D K L ( q ( x T ∣ x 0 ) ∣ ∣ p θ ( x T ) ) ⏟ L T + ∑ i = 2 T D K L ( q ( x t − 1 ∣ x t , x 0 ) ∣ ∣ p θ ( x t − 1 ∣ x t ) ) ⏟ L t − log ⁡ p θ ( x 0 ∣ x 1 ) ⏟ L 0 ] \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:Tx0)]=Eq(x0:T)[logpθ(xT)t=1Tpθ(xt1xt)t=1Tq(xtxt1)]=Eq(x0:T)[logpθ(xT)+logt=1Tpθ(xt1xt)t=1Tq(xtxt1)]=Eq(x0:T)[logpθ(xT)+i=1Tlogpθ(xt1xt)q(xtxt1)]=Eq(x0:T) logpθ(xT)+i=2Tlogpθ(xt1xt)q(xtxt1)+1.提出此项是因为无意义 logpθ(x0x1)q(x1x0) =Eq(x0:T) logpθ(xT)+i=2T2.此项与上一项的变化是额外考虑x0 logpθ(xt1xt)q(xt1x0)q(xtxt1,x0)q(xtx0)+logpθ(x0x1)q(x1x0) =Eq(x0:T)[logpθ(xT)+i=2Tlog(pθ(xt1xt)q(xtxt1,x0)q(xt1x0)q(xtx0))+logpθ(x0x1)q(x1x0)]=Eq(x0:T)[logpθ(xT)+i=2T(logpθ(xt1xt)q(xtxt1,x0)+logq(xt1x0)q(xtx0))+logpθ(x0x1)q(x1x0)]=Eq(x0:T) logpθ(xT)+i=2Tlogpθ(xt1xt)q(xtxt1,x0)+3.上一项展开即可 logq(x1x0)q(xTx0)+logpθ(x0x1)q(x1x0) =Eq(x0:T)[logpθ(xT)+i=2Tlogpθ(xt1xt)q(xtxt1,x0)+logq(xTx0)logq(x1x0)+logq(x1x0)logpθ(x0x1)]=Eq(x0:T)[logpθ(xT)q(xTx0)+i=2Tlogpθ(xt1xt)q(xtxt1,x0)logpθ(x0x1)]=Eq(x0:T) LT DKL(q(xTx0)∣∣pθ(xT))+i=2TLt DKL(q(xt1xt,x0)∣∣pθ(xt1xt))L0 logpθ(x0x1)

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

公式解释部分,上述公式懂的话可以不看
1.公式中的红笔部分 q ( x t ∣ x t − 1 ) q(x_{t}|x_{t-1}) q(xtxt1)化简
x t − 1 x_{t-1} xt1 x t x_{t} xt比较困难,但是当提供额外的 x 0 x_{0} x0时, x t − 1 x_{t-1} xt1 x t x_{t} xt的候选会减少,选择更加确定,因此这里我们加上 x 0 x_{0} x0,这样推导如下
q ( x t ∣ x t − 1 ) = q ( x t − 1 ∣ x t ) q ( x t ) q ( x t − 1 )    ⟶ a d d   x 0    q ( x t − 1 ∣ x t , x 0 ) q ( x t ∣ x 0 ) q ( x t − 1 ∣ x 0 ) 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(xtxt1)=q(xt1)q(xt1xt)q(xt)  add x0  q(xt1x0)q(xt1xt,x0)q(xtx0)
2. 公式中蓝色部分为什么无意义?
在红笔公式化简之后,给定 x 0 x_{0} x0 q ( x t ∣ x t − 1 ) q(x_{t}|x_{t-1}) q(xtxt1)可以得到 q ( x t − 1 ∣ x t , x 0 ) q ( x t ∣ x 0 ) q ( x t − 1 ∣ x 0 ) \frac{q(x_{t-1}|x_{t}, x_{0})q(x_{t}|x_{0})}{q(x_{t-1}|x_{0})} q(xt1x0)q(xt1xt,x0)q(xtx0),如果我们不将蓝色部分提出,那么 q ( x 1 ∣ x 0 ) q(x_{1}|x_{0}) q(x1x0)会变为 q ( x 0 ∣ x 1 , x 0 ) q ( x 1 ∣ x 0 ) q ( x 0 ∣ x 0 ) \frac{q(x_{0}|x_{1}, x_{0})q(x_{1}|x_{0})}{q(x_{0}|x_{0})} q(x0x0)q(x0x1,x0)q(x1x0),此表达式是无意义的

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

去掉繁琐的推导过程以及最后的期望符号,我们再回头看一下VLB的化简结果
L V L B ∝ D K L ( q ( x T ∣ x 0 ) ∣ ∣ p θ ( x T ) ) ⏟ L T + ∑ i = 2 T D K L ( q ( x t − 1 ∣ x t , x 0 ) ∣ ∣ p θ ( x t − 1 ∣ x t ) ) ⏟ L t − log ⁡ p θ ( x 0 ∣ x 1 ) ⏟ L 0 \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}} LVLBLT DKL(q(xTx0)∣∣pθ(xT))+i=2TLt DKL(q(xt1xt,x0)∣∣pθ(xt1xt))L0 logpθ(x0x1)

  • L T = D K L ( q ( x T ∣ x 0 ) ∣ ∣ p θ ( x T ) ) L_{T}=D_{KL}(q(x_{T}|x_{0}) || p_{\theta}(x_{T})) LT=DKL(q(xTx0)∣∣pθ(xT)): 这一项中的前向过程 q ( x T ∣ x 0 ) q(x_{T}|x_{0}) q(xTx0)是一个前向加噪的过程,而 p θ ( x T ) p_{\theta}(x_{T}) pθ(xT)是一个纯粹的高斯噪声,在我们前向过程中, q ( x T ∣ x 0 ) q(x_{T}|x_{0}) q(xTx0)很容易变为高斯噪声,因此 L T L_{T} LT可以看为常量,计算时忽略即可
  • L t = D K L ( q ( x t − 1 ∣ x t , x 0 ) ∣ ∣ p θ ( x t − 1 ∣ x t ) ) L_{t}=D_{KL}(q(x_{t-1}|x_{t}, x_{0})|| p_{\theta}(x_{t-1} | x_{t})) Lt=DKL(q(xt1xt,x0)∣∣pθ(xt1xt)):这一项可以看做拉近2个高斯分布 q ( x t − 1 ∣ x t , x 0 ) = ( x t − 1 ; μ ~ ( x t , x 0 ) , β ~ t I ) q(x_{t-1}|x_{t}, x_{0}) = \mathcal(x_{t-1}; \tilde{\mu}(x_{t}, x_{0}), \tilde{\beta}_{t}I) q(xt1xt,x0)=(xt1;μ~(xt,x0),β~tI) p θ ( x t − 1 ∣ x t ) = N ( x t − 1 ; μ θ ( x t , t ) , Σ θ ( x t , t ) ) p_{\theta}({x_{t-1}|x_{t}}) = \mathcal{N}(x_{t-1}; \mu_{\theta}(x_{t}, t), \Sigma_{\theta}(x_{t}, t)) pθ(xt1xt)=N(xt1;μθ(xt,t),Σθ(xt,t))之间的距离,根据多元高斯分布的KL散度求解
    L t = E q [ 1 2 ∣ ∣ ∑ θ ( x t , t ) ∣ ∣ 2 2 ∣ ∣ μ ~ t ( x t , x 0 ) − μ θ ( x t , t ) ∣ ∣ 2 ] + C L_{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)221∣∣μ~t(xt,x0)μθ(xt,t)2]+C
    把式 ( 10 ) (10) (10) ( 11 ) (11) (11)求得的 μ ~ t ( x t , x 0 ) \tilde{\mu}_{t}(x_{t}, x_{0}) μ~t(xt,x0) μ θ ( x t , t ) \mu_{\theta}(x_{t}, t) μθ(xt,t)带入得
    L t = E x 0 , z ‾ t [ 1 2 ∣ ∣ Σ θ ( x t , t ) ∣ ∣ 2 2 ∣ ∣ μ ~ t ( x t , x 0 ) − μ θ ( x t , t ) ∣ ∣ 2 ] = E x 0 , z ‾ t [ 1 2 ∣ ∣ Σ θ ( x t , t ) ∣ ∣ 2 2 ∣ ∣ 1 α t ( x t − β t 1 − α ‾ t z ‾ t ) − 1 α t ( x t − β t 1 − α ‾ t z θ ( x t , t ) ) ∣ ∣ 2 ] = E x 0 , z ‾ t [ β t 2 2 α t ( 1 − α ‾ t ∣ ∣ Σ θ ∣ ∣ 2 2 ) ∣ ∣ z ‾ t − z θ ( x t , t ) ∣ ∣ 2 ] = E x 0 , z ‾ t [ β t 2 2 α t ( 1 − α ‾ t ∣ ∣ Σ θ ∣ ∣ 2 2 ) ∣ ∣ z ‾ t − z θ ( α ‾ t x 0 + 1 − α ‾ t z ‾ 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)221∣∣μ~t(xt,x0)μθ(xt,t)2]=Ex0,zt[2∣∣Σθ(xt,t)221∣∣αt 1(xt1αt βtzt)αt 1(xt1αt βtzθ(xt,t))2]=Ex0,zt[2αt(1αt∣∣Σθ22)βt2∣∣ztzθ(xt,t)2]=Ex0,zt[2αt(1αt∣∣Σθ22)βt2∣∣ztzθ(αt x0+1αt zt,t)2]
  • L 0 = − log ⁡ p θ ( x 0 ∣ x 1 ) L_{0}=-\log p_{\theta}(x_{0}|x_{1}) L0=logpθ(x0x1):其他博客解释这个相当于最后一步的熵,但是这个我不是很理解,如果想详细了解可以参考DDPM论文

所有的 L L L就是最终的变分下界,DDPM将其进一步化简如下
L t s i m p l e = E x 0 , z ‾ t [ ∣ ∣ z ‾ t − z θ ( α ‾ t x 0 + 1 − α ‾ t z ‾ 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[∣∣ztzθ(α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 ( x t − β t 1 − α ‾ t z ‾ 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(xt1αt βtzt),这里的均值不依赖 x 0 x_{0} x0,而他的求解本质上就是 x t x_{t} xt减去随机噪声

4. 训练与推断

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

知识点补充

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)

重参数化之后得到的变量 z z z具有随机性的,满足均值为 μ \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 ( x t − β t 1 − α ‾ t z ‾ 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(xt1αt βtzt),这里的均值不依赖 x 0 x_{0} x0,而他的求解本质上就是 x t x_{t} xt减去随机噪声

4. 训练与推断

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/148383.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】进程状态和进程优先级

文章目录1. 进程状态2. Linux的进程状态3. 僵尸进程4. 孤儿进程5. 进程优先级1. 进程状态 为了更深入地了解进程&#xff0c;我们需要知道进程的不同状态。 不同的操作系统&#xff0c;对于进程状态有着不同的说法&#xff0c;如&#xff1a;运行、阻塞、挂起、新建、就绪、等…

SIoU Loss

1、论文 题目&#xff1a;《SIoU Loss: More Powerful Learning for Bounding Box Regression》 参考博客&#xff1a; https://blog.csdn.net/qq_56749449/article/details/125753992 2、原理 有关IoU损失函数&#xff0c;像GIoU、DIoU、CIoU都没有考虑真实框与预测框之间的…

关于zookeeper和kafka不得不说的秘密

zookeeper简介1. zookeeper的概述ZooKeeper是一个分布式的&#xff0c;开放源码的分布式应用程序协调服务&#xff0c;是Google的Chubby一个开源的实现&#xff0c;是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件&#xff0c;提供的功能包括&#xff1a…

【四】Netty 分隔符和定长解码器的应用

Netty 分隔符和定长解码器的应用理论说明LineBasedFrameDecoder 开发大概流程代码展示netty 依赖EchoServer 服务端启动类EchoServerHandlerEchoClientEchoClientHandler结果打印客户端打印服务端打印FixedLengthFrameDecoder 开发代码展示EchoServer 服务端启动类EchoFixServe…

【云原生】k8s之pod控制器

内容预知 前言 1.pod控制器的相关知识 1.1 pod控制器的作用 1.2 pod控制器的多种类型 1.3 pod容器中的有状态和无状态的对比 &#xff08;1&#xff09;有状态实例 &#xff08;2&#xff09;无状态实例 2.Deployment控制器 2.1 SatefulSet 控制器的运用 2.1 Sateful…

从0到1完成一个Vue后台管理项目(六、404页)

往期 从0到1完成一个Vue后台管理项目&#xff08;一、创建项目&#xff09; 从0到1完成一个Vue后台管理项目&#xff08;二、使用element-ui&#xff09; 从0到1完成一个Vue后台管理项目&#xff08;三、使用SCSS/LESS&#xff0c;安装图标库&#xff09; 从0到1完成一个Vu…

[LeetCode周赛复盘] 第 95 场周赛20230107

[LeetCode周赛复盘] 第 95 场周赛20230107 一、本周周赛总结二、 [Easy] 2525. 根据规则将箱子分类1. 题目描述2. 思路分析3. 代码实现三、[Medium] 2526. 找到数据流中的连续整数![在这里插入图片描述](https://img-blog.csdnimg.cn/237210adb20e457aaf2671e6e8f9e43b.png)2. …

Linux系统中C++多态和数据封装的基本方法

大家好&#xff0c;今天主要和大家分享一下&#xff0c;多态&#xff0c;数据封装的使用方法。 目录 第一&#xff1a;C中的多态 第二&#xff1a;C中数据封装方法 第一&#xff1a;C中的多态 C多态意味着调用成员函数时&#xff0c;会根据调用函数的对象的类型来执行不同的函…

将内核加载到内存

文章目录前言前置知识代码实验操作前言 本博客记录《操作系统真象还原》第五章第3个实验的操作~ 实验环境&#xff1a;ubuntu18.04VMware &#xff0c; Bochs下载安装 实验内容&#xff1a;将内核载入内存,初始化内核代码 实验原理 编写内核程序。将内核程序用dd命令复制到…

Odoo 16 企业版手册 - 库存管理之存储类别

存储类别 Odoo中的存储类别功能将允许您将许多存储位置分组到一个类别下。您可以在Odoo 库存管理模块中创建许多此类类别&#xff0c;这将有助于执行更智能的放置操作。在配置存储类别之前&#xff0c;您必须配置库存中可用的存储位置。然后&#xff0c;您可以将它们分组到一个…

LeetCode刷题模版:31 - 40

目录 简介31. 下一个排列32. 最长有效括号33. 搜索旋转排序数组34. 在排序数组中查找元素的第一个和最后一个位置35. 搜索插入位置36. 有效的数独37. 解数独38. 外观数列39. 组合总和40. 组合总和 II结语简介 Hello! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指…

电影解说开头怎么写吸引人?

电影解说开头怎么写吸引人&#xff1f;很多电影解说创作者文采不够好&#xff0c;开头不知道怎么写&#xff1f;毕竟想留住用户继续观看视频&#xff0c;开头是至关重要的&#xff0c;今天笔者就分享电影解说文案万能公式模板&#xff0c;让大家创作更简单&#xff01;一个好的…

feature engnineering 特征工程

特征工程数值型变量standardizationlog_transformation(使其符合正态分布)polynomial features分类型变量orinigalencoderonehot encoder分类创造下的数值以下代码根据Abhishek Thakur在kaggle上的机器学习30天 &#xff08;b站&#xff09; (kaggle)可惜的是&#xff0c;我没有…

Oracle 19c VLDB and Partitioning Guide 第5章:管理和维护基于时间的信息 读书笔记

本文为Oracle 19c VLDB and Partitioning Guide第5章Managing and Maintaining Time-Based Information的读书笔记。 Oracle 数据库提供了基于时间管理和维护数据的策略。 本章讨论 Oracle 数据库中的组件&#xff0c;这些组件可以构建基于时间管理和维护数据的策略。 尽管大…

计算机网络复习之网络层

文章目录数据报与虚电路服务的对比IP 协议IP数据报格式IP地址NAT&#xff08;网络地址转换&#xff09;子网划分和子网掩码在支持子网划分的因特网中&#xff0c;路由器如何转发IP数据报无分类编制CIDR构成超网RIP协议OSPF协议ARP协议ICMP协议Ping和Traceroute参考路由选择是网…

Eclipse安装教程

Eclipse安装教程 目录一&#xff0e; 概述二&#xff0e; 下载eclipse三&#xff0e; 安装eclipse四&#xff0e; 使用eclipse。一&#xff0e; 概述 eclipse是针对java编程的集成开发环境&#xff0c;其设计思想是“一切皆插件”。就其本身而言&#xff0c;eclipse只是一个框架…

Hive表的创建,删除,修改

TBLPROPERTIES的主要作用是按键-值对的格式为表增加额外的文档说明。Hive会自动增加两个表属性:一个是last_modified_by&#xff0c;其保存着最后修改这个表的用户的用户名﹔另一个是 last_modified_time&#xff0c;其保存着最后一次修改的新纪元时间秒。用户还可以拷贝一张已…

数据的合并和分组聚合

一&#xff1a;字符串离散化的案列 对于这一组电影数据&#xff0c;如果我们希望统计电影分类(genre)的情况&#xff0c;应该如何处理数据&#xff1f; 思路&#xff1a;重新构造一个全为0的数组&#xff0c;列名为分类&#xff0c;如果某一条数据中分类出现过&#xff0c;就让…

Java之class类

Class类 1.类图 2.Class类对象 系统创建 该class对象是通过类加载器ClassLoader的loadClass()方法生成对应类对应的class对象 通过debug可以追到该方法 3.对于某个类的class类对象 只加载一次 因为类值加载一次 类加载的时机 //1.创建对象实例的时候&#xff08;new&#xf…

7-10 列车调度

火车站的列车调度铁轨的结构如下图所示。 两端分别是一条入口&#xff08;Entrance&#xff09;轨道和一条出口&#xff08;Exit&#xff09;轨道&#xff0c;它们之间有N条平行的轨道。每趟列车从入口可以选择任意一条轨道进入&#xff0c;最后从出口离开。在图中有9趟列车&am…