08.Diffusion Model数学原理分析(下)

文章目录


部分截图来自原课程视频《2023李宏毅最新生成式AI教程》,B站自行搜索。

书接上文。

denoising matching term

E q ( x t ∣ x 0 ) [ D K L ( q ( x t − 1 ∣ x t , x 0 ) ∣ ∣ p θ ( x t − 1 ∣ x t ) ) ] E_{q(x_t|x_0)}\left[D_{KL}({q(x_{t-1}|x_t,x_0)}||p_\theta(x_{t-1}|x_t)) \right] Eq(xtx0)[DKL(q(xt1xt,x0)∣∣pθ(xt1xt))]
这个式子还是很复杂,先来关注中间部分:
q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt1xt,x0)

其含义是已知清晰的图片 x 0 x_0 x0和经过 t t t个Denoise步骤后 x t x_t xt的情况下,其中间某个Denoise后的分布 x t − 1 x_{t-1} xt1
在这里插入图片描述
上面的原理那节中已经知道下面三个式子的计算方法:
在这里插入图片描述
现在的思路就是要把不会计算的式子用已知的式子表达出来。
q ( x t − 1 ∣ x t , x 0 ) = q ( x t − 1 , x t , x 0 ) q ( x t , x 0 ) = q ( x t ∣ x t − 1 , x 0 ) q ( x t − 1 ∣ x 0 ) q ( x 0 ) q ( x t ∣ x 0 ) q ( x 0 ) = q ( x t ∣ x t − 1 , x 0 ) q ( x t − 1 ∣ x 0 ) q ( x t ∣ x 0 ) \begin{align*}q(x_{t-1}|x_t,x_0)&=\cfrac{q(x_{t-1},x_t,x_0)}{q(x_t,x_0)}\\ &=\cfrac{q(x_t|x_{t-1},x_0)q(x_{t-1}|x_0)\cancel{q(x_0)}}{q(x_t|x_0)\cancel{q(x_0)}}\\ &=\cfrac{q(x_t|x_{t-1},x_0)q(x_{t-1}|x_0)}{q(x_t|x_0)}\end{align*} q(xt1xt,x0)=q(xt,x0)q(xt1,xt,x0)=q(xtx0)q(x0) q(xtxt1,x0)q(xt1x0)q(x0) =q(xtx0)q(xtxt1,x0)q(xt1x0)
上式中的三个q都是搞屎分布,而且三个分布的均值和Var都已知(看上面图片),下面就是原论文的推导:
q ( x t − 1 ∣ x t , x 0 ) = q ( x t ∣ x t − 1 , x 0 ) q ( x t − 1 ∣ x 0 ) q ( x t ∣ x 0 ) = N ( x t ; α t x t − 1 , ( 1 − α t ) I ) N ( x t − 1 ; α ˉ t − 1 x 0 , ( 1 − α ˉ t − 1 ) I ) N ( x t ; α ˉ t x 0 , ( 1 − α ˉ t ) I ) ∝ exp ⁡ { − [ ( x t − α t x t − 1 ) 2 2 ( 1 − α t ) + ( x t − 1 − α ˉ t − 1 x 0 ) 2 2 ( 1 − α ˉ t − 1 ) − ( x t − α ˉ t x 0 ) 2 2 ( 1 − α ˉ t ) ] } = exp ⁡ { − 1 2 [ ( x t − α t x t − 1 ) 2 1 − α t + ( x t − 1 − α ˉ t − 1 x 0 ) 2 1 − α ˉ t − 1 − ( x t − α ˉ t x 0 ) 2 1 − α ˉ t ] } = exp ⁡ { − 1 2 [ ( − 2 α t x t x t − 1 + α t x t − 1 2 ) 1 − α t + ( x t − 1 2 − 2 α ˉ t − 1 x t − 1 x 0 ) 1 − α ˉ t − 1 + C ( x t , x 0 ) ] } ∝ exp ⁡ { − 1 2 [ − 2 α t x t x t − 1 1 − α t + α t x t − 1 2 1 − α t + x t − 1 2 1 − α ˉ t − 1 − 2 α ˉ t − 1 x t − 1 x 0 1 − α ˉ t − 1 ] } = exp ⁡ { − 1 2 [ ( α t 1 − α t + 1 1 − α ˉ t − 1 ) x t − 1 2 − 2 ( α t x t 1 − α t + α ˉ t − 1 x 0 1 − α ˉ t − 1 ) x t − 1 ] } = exp ⁡ { − 1 2 [ α t ( 1 − α ˉ t − 1 ) + 1 − α t ( 1 − α t ) ( 1 − α ˉ t − 1 ) x t − 1 2 − 2 ( α t x t 1 − α t + α ˉ t − 1 x 0 1 − α ˉ t − 1 ) x t − 1 ] } = exp ⁡ { − 1 2 [ α t − α ˉ t + 1 − α t ( 1 − α t ) ( 1 − α ˉ t − 1 ) x t − 1 2 − 2 ( α t x t 1 − α t + α ˉ t − 1 x 0 1 − α ˉ t − 1 ) x t − 1 ] } = exp ⁡ { − 1 2 [ 1 − α ˉ t ( 1 − α t ) ( 1 − α ˉ t − 1 ) x t − 1 2 − 2 ( α t x t 1 − α t + α ˉ t − 1 x 0 1 − α ˉ t − 1 ) x t − 1 ] } = exp ⁡ { − 1 2 ( 1 − α ˉ t ( 1 − α t ) ( 1 − α ˉ t − 1 ) ) [ x t − 1 2 − 2 ( α t x t 1 − α t + α ˉ t − 1 x 0 1 − α ˉ t − 1 ) 1 − α ˉ t ( 1 − α t ) ( 1 − α ˉ t − 1 ) x t − 1 ] } = exp ⁡ { − 1 2 ( 1 − α ˉ t ( 1 − α t ) ( 1 − α ˉ t − 1 ) ) [ x t − 1 2 − 2 ( α t x t 1 − α t + α ˉ t − 1 x 0 1 − α ˉ t − 1 ) ( 1 − α t ) ( 1 − α ˉ t − 1 ) 1 − α ˉ t x t − 1 ] } = exp ⁡ { − 1 2 ( 1 ( 1 − α t ) ( 1 − α ˉ t − 1 ) 1 − α ˉ t ) [ x t − 1 2 − 2 ( α t x t 1 − α t + α ˉ t − 1 x 0 1 − α ˉ t − 1 ) ( 1 − α t ) ( 1 − α ˉ t − 1 ) 1 − α ˉ t x t − 1 ] } ∝ N ( x t − 1 ; α t ( 1 − α ˉ t − 1 ) x t + α ˉ t − 1 ( 1 − α t ) x 0 1 − α ˉ t ⏟ μ q ( x t , x 0 ) , ( 1 − α t ) ( 1 − α ˉ t − 1 ) 1 − α ˉ t I ⏟ ∑ q ( t ) ) \begin{align*} q(x_{t-1}|x_t,x_0)&=\cfrac{q(x_t|x_{t-1},x_0)q(x_{t-1}|x_0)}{q(x_t|x_0)}\\ &=\cfrac{\mathcal{N}(x_t;\sqrt{\alpha_t}x_{t-1},(1-\alpha_t)\mathrm{I})\mathcal{N}(x_{t-1};\sqrt{\bar\alpha_{t-1}}x_0,(1-\bar\alpha_{t-1})\mathrm{I}) }{\mathcal{N}(x_t;\sqrt{\bar\alpha_t}x_0,(1-\bar\alpha_t)\mathrm{I})}\\ &\propto \exp \left \{-\left[\cfrac{(x_t-\sqrt{\alpha_t}x_{t-1})^2}{2(1-\alpha_t)} + \cfrac{(x_{t-1}-\sqrt{\bar\alpha_{t-1}}x_0)^2}{2(1-\bar\alpha_{t-1})} - \cfrac{(x_t-\sqrt{\bar\alpha_t}x_0)^2}{2(1-\bar\alpha_t)}\right] \right \}\\ &=\exp \left \{-\cfrac{1}{2}\left[\cfrac{(x_t-\sqrt{\alpha_t}x_{t-1})^2}{1-\alpha_t} + \cfrac{(x_{t-1}-\sqrt{\bar\alpha_{t-1}}x_0)^2}{1-\bar\alpha_{t-1}} - \cfrac{(x_t-\sqrt{\bar\alpha_t}x_0)^2}{1-\bar\alpha_t}\right] \right \}\\ &=\exp \left \{-\cfrac{1}{2}\left[\cfrac{(-2\sqrt{\alpha_t}x_tx_{t-1}+\alpha_tx_{t-1}^2)}{1-\alpha_t} + \cfrac{(x_{t-1}^2-2\sqrt{\bar\alpha_{t-1}}x_{t-1}x_0)}{1-\bar\alpha_{t-1}} + C(x_t,x_0)\right] \right \}\\ &\propto \exp \left \{-\cfrac{1}{2}\left[-\cfrac{2\sqrt{\alpha_t}x_tx_{t-1}}{1-\alpha_t}+\cfrac{\alpha_tx_{t-1}^2}{1-\alpha_t} + \cfrac{x_{t-1}^2}{1-\bar\alpha_{t-1}} - \cfrac{2\sqrt{\bar\alpha_{t-1}}x_{t-1}x_0}{1-\bar\alpha_{t-1}} \right] \right \}\\ &=\exp \left \{-\cfrac{1}{2}\left[\left(\cfrac{\alpha_t}{1-\alpha_t} + \cfrac{1}{1-\bar\alpha_{t-1}} \right)x_{t-1}^2 - 2\left(\cfrac{\sqrt{\alpha_t}x_t}{1-\alpha_t} + \cfrac{\sqrt{\bar\alpha_{t-1}}x_0}{1-\bar\alpha_{t-1}} \right)x_{t-1} \right] \right \}\\ &=\exp \left \{-\cfrac{1}{2}\left[\cfrac{\alpha_t(1-\bar\alpha_{t-1})+1-\alpha_t}{(1-\alpha_t)(1-\bar\alpha_{t-1})}x_{t-1}^2 - 2\left(\cfrac{\sqrt{\alpha_t}x_t}{1-\alpha_t} + \cfrac{\sqrt{\bar\alpha_{t-1}}x_0}{1-\bar\alpha_{t-1}} \right)x_{t-1} \right] \right \}\\ &=\exp \left \{-\cfrac{1}{2}\left[\cfrac{\alpha_t-\bar\alpha_t+1-\alpha_t}{(1-\alpha_t)(1-\bar\alpha_{t-1})}x_{t-1}^2 - 2\left(\cfrac{\sqrt{\alpha_t}x_t}{1-\alpha_t} + \cfrac{\sqrt{\bar\alpha_{t-1}}x_0}{1-\bar\alpha_{t-1}} \right)x_{t-1} \right] \right \}\\ &=\exp \left \{-\cfrac{1}{2}\left[\cfrac{1-\bar\alpha_t}{(1-\alpha_t)(1-\bar\alpha_{t-1})}x_{t-1}^2 - 2\left(\cfrac{\sqrt{\alpha_t}x_t}{1-\alpha_t} + \cfrac{\sqrt{\bar\alpha_{t-1}}x_0}{1-\bar\alpha_{t-1}} \right)x_{t-1} \right] \right \}\\ &=\exp \left \{-\cfrac{1}{2}\left(\cfrac{1-\bar\alpha_t}{(1-\alpha_t)(1-\bar\alpha_{t-1})}\right)\left[x_{t-1}^2 - 2\cfrac{\left(\cfrac{\sqrt{\alpha_t}x_t}{1-\alpha_t} + \cfrac{\sqrt{\bar\alpha_{t-1}}x_0}{1-\bar\alpha_{t-1}} \right)}{\cfrac{1-\bar\alpha_t}{(1-\alpha_t)(1-\bar\alpha_{t-1})}}x_{t-1} \right] \right \}\\ &=\exp \left \{-\cfrac{1}{2}\left(\cfrac{1-\bar\alpha_t}{(1-\alpha_t)(1-\bar\alpha_{t-1})}\right)\left[x_{t-1}^2 - 2\cfrac{\left(\cfrac{\sqrt{\alpha_t}x_t}{1-\alpha_t} + \cfrac{\sqrt{\bar\alpha_{t-1}}x_0}{1-\bar\alpha_{t-1}} \right)(1-\alpha_t)(1-\bar\alpha_{t-1})}{1-\bar\alpha_t}x_{t-1} \right] \right \}\\ &=\exp \left \{-\cfrac{1}{2}\left(\cfrac{1}{\cfrac{(1-\alpha_t)(1-\bar\alpha_{t-1})}{1-\bar\alpha_t}}\right)\left[x_{t-1}^2 - 2\cfrac{\left(\cfrac{\sqrt{\alpha_t}x_t}{1-\alpha_t} + \cfrac{\sqrt{\bar\alpha_{t-1}}x_0}{1-\bar\alpha_{t-1}} \right)(1-\alpha_t)(1-\bar\alpha_{t-1})}{1-\bar\alpha_t}x_{t-1} \right] \right \}\\ &\propto \mathcal{N}\left(x_{t-1;} \underset{\mu_q(x_t,x_0)}{\underbrace{\cfrac{\sqrt{\alpha_t}(1-\bar\alpha_{t-1})x_t+\sqrt{\bar\alpha_{t-1}}(1-\alpha_t)x_0}{1-\bar\alpha_t}}},\underset{\sum_q(t)}{\underbrace{\cfrac{(1-\alpha_t)(1-\bar\alpha_{t-1})}{1-\bar\alpha_t}\mathrm{I}}}\right) \end{align*} q(xt1xt,x0)=q(xtx0)q(xtxt1,x0)q(xt1x0)=N(xt;αˉt x0,(1αˉt)I)N(xt;αt xt1,(1αt)I)N(xt1;αˉt1 x0,(1αˉt1)I)exp{[2(1αt)(xtαt xt1)2+2(1αˉt1)(xt1αˉt1 x0)22(1αˉt)(xtαˉt x0)2]}=exp{21[1αt(xtαt xt1)2+1αˉt1(xt1αˉt1 x0)21αˉt(xtαˉt x0)2]}=exp{21[1αt(2αt xtxt1+αtxt12)+1αˉt1(xt122αˉt1 xt1x0)+C(xt,x0)]}exp{21[1αt2αt xtxt1+1αtαtxt12+1αˉt1xt121αˉt12αˉt1 xt1x0]}=exp{21[(1αtαt+1αˉt11)xt122(1αtαt xt+1αˉt1αˉt1 x0)xt1]}=exp{21[(1αt)(1αˉt1)αt(1αˉt1)+1αtxt122(1αtαt xt+1αˉt1αˉt1 x0)xt1]}=exp{21[(1αt)(1αˉt1)αtαˉt+1αtxt122(1αtαt xt+1αˉt1αˉt1 x0)xt1]}=exp{21[(1αt)(1αˉt1)1αˉtxt122(1αtαt xt+1αˉt1αˉt1 x0)xt1]}=exp 21((1αt)(1αˉt1)1αˉt) xt122(1αt)(1αˉt1)1αˉt(1αtαt xt+1αˉt1αˉt1 x0)xt1 =exp 21((1αt)(1αˉt1)1αˉt) xt1221αˉt(1αtαt xt+1αˉt1αˉt1 x0)(1αt)(1αˉt1)xt1 =exp 21 1αˉt(1αt)(1αˉt1)1 xt1221αˉt(1αtαt xt+1αˉt1αˉt1 x0)(1αt)(1αˉt1)xt1 N xt1;μq(xt,x0) 1αˉtαt (1αˉt1)xt+αˉt1 (1αt)x0,q(t) 1αˉt(1αt)(1αˉt1)I
经过以上的推导,得到以下结论:
q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt1xt,x0)仍然是一个高斯分布,其Mean为:
α t ( 1 − α ˉ t − 1 ) x t + α ˉ t − 1 ( 1 − α t ) x 0 1 − α ˉ t = α t ( 1 − α ˉ t − 1 ) x t + α ˉ t − 1 β t x 0 1 − α ˉ t \cfrac{\sqrt{\alpha_t}(1-\bar\alpha_{t-1})x_t+\sqrt{\bar\alpha_{t-1}}(1-\alpha_t)x_0}{1-\bar\alpha_t}=\cfrac{\sqrt{\alpha_t}(1-\bar\alpha_{t-1})x_t+\sqrt{\bar\alpha_{t-1}}\beta_tx_0}{1-\bar\alpha_t} 1αˉtαt (1αˉt1)xt+αˉt1 (1αt)x0=1αˉtαt (1αˉt1)xt+αˉt1 βtx0
看分子大概意思就是中间步骤 x t − 1 x_{t-1} xt1是由 x 0 x_0 x0 x t x_t xt按某个权重比例进行融合而成。
Variance为:
( 1 − α t ) ( 1 − α ˉ t − 1 ) 1 − α ˉ t I = 1 − α ˉ t − 1 1 − α ˉ t β t I \cfrac{(1-\alpha_t)(1-\bar\alpha_{t-1})}{1-\bar\alpha_t}\mathrm{I}=\cfrac{1-\bar\alpha_{t-1}}{1-\bar\alpha_t}\beta_t\mathrm{I} 1αˉt(1αt)(1αˉt1)I=1αˉt1αˉt1βtI

接下来考虑最小化denoising matching term
E q ( x t ∣ x 0 ) [ D K L ( q ( x t − 1 ∣ x t , x 0 ) ∣ ∣ p θ ( x t − 1 ∣ x t ) ) ] E_{q(x_t|x_0)}\left[D_{KL}({q(x_{t-1}|x_t,x_0)}||p_\theta(x_{t-1}|x_t)) \right] Eq(xtx0)[DKL(q(xt1xt,x0)∣∣pθ(xt1xt))]
就是要最小化上式中两个分布的KL散度,当然这两个分布的均值和方差都已经知道,可以套KL的计算公式:
D K L ( N ( x ; μ x , Σ x ) ∣ ∣ N ( y ; μ y , Σ y ) ) = 1 2 [ log ⁡ ∣ Σ y ∣ ∣ Σ x ∣ − d + t r ( Σ y − 1 Σ x ) + ( μ y − μ x ) T Σ y − 1 ( μ y − μ x ) ] D_{KL}(\mathcal{N}(x;\mu_x,\Sigma_x)||\mathcal{N}(y;\mu_y,\Sigma_y))=\cfrac{1}{2}\left[\log\cfrac{|\Sigma_y|}{|\Sigma_x|}-d+tr(\Sigma_y^{-1}\Sigma_x) +(\mu_y-\mu_x)^T\Sigma_y^{-1}(\mu_y-\mu_x)\right] DKL(N(x;μx,Σx)∣∣N(y;μy,Σy))=21[logΣxΣyd+tr(Σy1Σx)+(μyμx)TΣy1(μyμx)]
但是实际上不用这么复杂,看下图:
在这里插入图片描述
橙色分布是 q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt1xt,x0),上面的推导显示该分布的均值和方差都是固定值;蓝色分布是 p θ ( x t − 1 ∣ x t ) p_\theta(x_{t-1}|x_t) pθ(xt1xt)它的方差是固定的,但是均值是变动的,要想使得两个分布接近,就是要将蓝色分布的均值想橙色均值移动。蓝色分布的均值是通过Denoise模块得来的:
在这里插入图片描述
也就是要训练Denoise模块,使其得到分布的均值与橙色部分的均值越接近越好。
有了思路,下面来把denoising matching term
E q ( x t ∣ x 0 ) [ D K L ( q ( x t − 1 ∣ x t , x 0 ) ∣ ∣ p θ ( x t − 1 ∣ x t ) ) ] E_{q(x_t|x_0)}\left[D_{KL}({q(x_{t-1}|x_t,x_0)}||p_\theta(x_{t-1}|x_t)) \right] Eq(xtx0)[DKL(q(xt1xt,x0)∣∣pθ(xt1xt))]
最小化思路写出来:
1.根据期望中的 q ( x t ∣ x 0 ) q(x_t|x_0) q(xtx0)知道, x 0 x_0 x0是已知的,因此,我们先从训练数据中先采样一张图片:
在这里插入图片描述
2.然后根据 x 0 x_0 x0计算(或者说采样)出 x t x_t xt,过程可根据公式:
x t = α ˉ t x 0 + 1 − α ˉ t ϵ x_t=\sqrt{\bar\alpha_t}x_0+\sqrt{1-\bar\alpha_t}\epsilon xt=αˉt x0+1αˉt ϵ
在这里插入图片描述
3.将 x t x_t xt t t t丢进Denoise模块,期待模块输出的结果与橙色分布均值越接近越好:

在这里插入图片描述
q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt1xt,x0)是橙色分布,是 x t − 1 x_{t-1} xt1的分布,但是可以从其均值公式中可以看到它与 x t − 1 x_{t-1} xt1没有关系,只是 x 0 x_0 x0 x t x_t xt的某种权重的结合结果。
将上式进行化简,把 x 0 x_0 x0替换一下,根据:
x t = α ˉ t x 0 + 1 − α ˉ t ϵ x t − 1 − α ˉ t ϵ = α ˉ t x 0 x t − 1 − α ˉ t ϵ α ˉ t = x 0 x_t=\sqrt{\bar\alpha_t}x_0+\sqrt{1-\bar\alpha_t}\epsilon\\ x_t-\sqrt{1-\bar\alpha_t}\epsilon=\sqrt{\bar\alpha_t}x_0\\ \cfrac{x_t-\sqrt{1-\bar\alpha_t}\epsilon}{\sqrt{\bar\alpha_t}}=x_0 xt=αˉt x0+1αˉt ϵxt1αˉt ϵ=αˉt x0αˉt xt1αˉt ϵ=x0

则有:
α t ( 1 − α ˉ t − 1 ) x t + α ˉ t − 1 β t x 0 1 − α ˉ t = α t ( 1 − α ˉ t − 1 ) x t + α ˉ t − 1 β t x t − 1 − α ˉ t ϵ α ˉ t 1 − α ˉ t = 1 α t ( x t − 1 − α t 1 − 1 − α ˉ t ϵ ) \cfrac{\sqrt{\alpha_t}(1-\bar\alpha_{t-1})x_t+\sqrt{\bar\alpha_{t-1}}\beta_tx_0}{1-\bar\alpha_t}\\ =\cfrac{\sqrt{\alpha_t}(1-\bar\alpha_{t-1})x_t+\sqrt{\bar\alpha_{t-1}}\beta_t\cfrac{x_t-\sqrt{1-\bar\alpha_t}\epsilon}{\sqrt{\bar\alpha_t}}}{1-\bar\alpha_t}\\ =\cfrac{1}{\sqrt{\alpha_t}}\left(x_t-\cfrac{1-\alpha_t}{1-\sqrt{1-\bar\alpha_t}} \epsilon\right) 1αˉtαt (1αˉt1)xt+αˉt1 βtx0=1αˉtαt (1αˉt1)xt+αˉt1 βtαˉt xt1αˉt ϵ=αt 1(xt11αˉt 1αtϵ)
因此,Denoise模型最后要输出的东西如下图所示:
在这里插入图片描述
可以看到,Denoise模型只需要预测 ϵ \epsilon ϵ就可以,其他的 x t x_t xt是已知量, α t \alpha_t αt是超参数1

这个式子也是原文采样算法中的第四步的式子。
在这里插入图片描述
但是第四步中还有一项: σ t z \sigma_tz σtz
这项是一个噪音,如下图所示,经过Denoise模块得到的是一个高斯分布的Mean,加上一个噪音后,相当于加上了一个Variance,也相当于对分布进行了因此采样。
在这里插入图片描述

σ t z \sigma_tz σtz的猜想

为什么要加这项噪音,而不直接使用分布的Mean?以下内容非原论文内容,而是老师自己的解读。
Mean是概率密度分布最大的值,使用概率最大的作为输出会有问题。
同样的现象在GPT里面也有:
在这里插入图片描述
GPT中也是先产生一个概率分布,然后再从分布中进行采样,而不是取几率最大那个,这样做理论上可以带来一些随机性,使得模型在回答同一个问题的时候会给出不同的答案。但又为什么一定要有随机性,而非固定最大概率?
研究者在文章The Curious Case of Neural Text Degeneration中大概给出一些答案。
在这里插入图片描述
在给定上下文的情况下,只取概率最大的文字就会像蓝色文字一样,变成复读机,而加入采样的结果就比较正常(红字)。
同样,该文章还对比了取概率最大(蓝色线)以及人类(橙色线)的概率曲线,可以看到人类写作过程中用词经过GPT来算得到概率并不是选择最大那个。而蓝色线对应的文本又出现了复读机现象。
在这里插入图片描述
语音处理方面也有类似操作,Natural TTS Synthesis by Conditioning WaveNet on Mel Spectrogram Predictions的模型如下:
在这里插入图片描述
该文章在Decoder部分加了抓爆:
The convolutional layers in the network are regularized using dropout [25] with probability 0.5, and LSTM layers are regularized using zoneout [26] with probability 0.1. In order to introduce output variation at inference time, dropout with probability 0.5 is applied only to layers in the pre-net of the autoregressive decoder.
在做类似上面End2End的模型需要在inference的阶段加抓爆,会得到比较好的结果。

对于Diffusion Model来说,它可以看做是一种Autoregressive模型的特例,Autoregressive模型通常是一次到位,而Diffusion Model而是 分解为N次到位,每一小步的Denoise都可以看做是一次Autoregressive,既然Autoregressive中加随机性效果有提升,那么在Denoise过程加随机性效果也会有提升:
在这里插入图片描述
最后基于DDPM的原文代码,进行了是否加随机性的实验,结果如下:
在这里插入图片描述

Diffusion Model for Speech

Diffusion不但在图像上有应用,在语音方面效果也不错。谷歌团队的WaveGrad: Estimating Gradients for Waveform Generation中提出了WaveGrad。

WaveGrad原理和原始的Diffusion 模型很像,只不过noise变成了一维的而已。
在这里插入图片描述
连算法都非常相似:
在这里插入图片描述

Diffusion Model for Text

文字直接用Diffusion Model是不行的,文字本身是Discrete的,难不成你要把文字变成乱码么,当然不行。
在这里插入图片描述
解决方法就是先将文字转换为Latent space中的向量表达,embedding是连续的,加noise没有问题。

斯坦福研究文章:Diffusion-LM Improves Controllable Text Generation

在这里插入图片描述
上海AI实验室团队发表在23年ICLR的DiffuSeq: Sequence to Sequence Text Generation with Diffusion Models也使用了相同的思路。
在这里插入图片描述
还有另外一种思路,既然文本不能直接加高斯分布的noise,可以尝试加其他形式的noise,在谷歌团队发表的DiffusER: Discrete Diffusion via Edit-based Reconstruction文章中,使用MASK标记作为noise:
在这里插入图片描述
模型构架如下:
在这里插入图片描述
它是基于Edit操作的Diffusion模型,具体包括:
INSERT: The insertion operation is used to add new text to a sequence. For example in Figure 1, “uses editing processes” is added by DiffusER at timestep x T − 2 x_{T−2} xT2.
DELETE: The deletion operation erases existing text. In Figure 1, this is shown when “These” gets deleted at timestep x T − 2 → x T − 3 x_{T−2} → x_{T−3} xT2xT3.
REPLACE: The replacement operation works overwriting existing text with new text. This is shown in Figure 1 at step x T → x T − 1 x_T → x_{T−1} xTxT1 where “filter Toronto guilty trough feel” is replaced by “These model
guilty named DiffusER”.
KEEP: The keep operation ensures that a portion of the text remains unchanged into the next iteration. This is illustrated in timestep x T − 2 → x T − 3 x_{T−2} → x_{T−3} xT2xT3 where “model named DiffusER” is kept.

Mask-Predict

Diffusion模型的为什么效果很好?不是因为上面各种公式的推导,根本原因在于它结合各个击破和一次到位两种方式的优势(两种方式的解释可以看06.GPT-4+图像生成)
因为在Diffusion模型未出现之前就有研究将两种方式的优点进行了结合,思路就是将Non-Autoregressive模型改为Autoregressive模型,里面并未使用Diffusion中最大化似然的目标函数,但效果也很不错。
下面是脸书团队的文章成果:Mask-Predict: Parallel Decoding of Conditional Masked Language Models,假设有一个NLP的对话任务,该问句可以有两个答案,采用Non-Autoregressive模型(AutoEncoder,一次到位)可能会得到很差的模型,每个分布采样得到的结果合起来就是不知所云。
在这里插入图片描述
将上面的模型改成Autoregressive模型,把结果不好的结果(几率较低的部分)再次MASK,重新再做一次生成:
在这里插入图片描述
也就是在Decoder方向上做了Autoregressive

不光在NLP领域有这样是思路,在CV领域也有,称为:Masked Visual Token Modeling (MVTM),谷歌团队发表的文章有:
MaskGIT: Masked Generative Image Transformer
Muse: Text-To-Image Generation via Masked Generative Transformers
两篇文章一篇是单纯的图片生成,另外一篇是文字生成图片。
在这里插入图片描述
第一步先训练AutoEncoder,并获得图片的Visual Tokens,然后将Visual Tokens用灰色的Mask token随机盖住,然后训练一个bidirectional tranformer model将其还原为原来的Visual Tokens

在Inference阶段,丢一张全部都是mask的图片进Decoder,得到一个结果,然后将概率较低的部分再次mask,又丢进Decoder,直到图片生成完毕。
在这里插入图片描述
原文给出效果如下:
在这里插入图片描述
这里额外使用AutoEncoder中的Decoder做了图片可视化操作,该Decoder与还原mask的那个Decoder不是一个。
当然还对比了单纯一次一个pixel进行Autoregressive的结果:
在这里插入图片描述
可以看到,上面Non-Autoregressive仅仅使用了比较少的step就完成了图片生成,但是清晰度方面还是下面Autoregressive比较好。


  1. 问:为什么要把 α t \alpha_t αt做为超参数,而不去训练它?
    答:DDPM作者有尝试过训练它,但是效果并没有明显提升;
    α t \alpha_t αt其实是与 β \beta β递增序列有关,如何递增效果最好还未有定论,原文使用的是线性递增的关系,后来也有研究人员尝试使用别的递增关系尝试来提高DDPM的性能。 ↩︎

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第四章:人工智能深度学习教程-激活函数(第一节-激活函数)

简单来说,人工神经元计算其输入的“加权和”并添加偏差,如下图所示的净输入。 从数学上来说, 现在净输入的值可以是从 -inf 到 inf 之间的任何值。神经元并不真正知道如何绑定到值,因此无法决定激发模式。因此激活函数是人工神经网…

【Proteus仿真】【STM32单片机】汽车尾灯控制设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器,使用按键、LED模块等。 主要功能: 系统运行后,系统运行后,系统开始运行,K1键控制左转向灯&#xff…

【PHP函数封装】分分钟帮你实现数据脱敏处理, 支持手机号码、邮箱、身份证号 中文字符串!

🚀 个人主页 极客小俊 ✍🏻 作者简介:web开发者、设计师、技术分享博主 🐋 希望大家多多支持一下, 我们一起进步!😄 🏅 如果文章对你有帮助的话,欢迎评论 💬点赞&#x1…

一篇文章教会你写一个贪吃蛇小游戏(纯C语言)

一篇文章教会你写一个贪吃蛇小游戏 1、游戏展示2、游戏功能3、Win32 API3.1 控制台程序3.2 控制台屏幕上的坐标COORD3.3 GetStdHandle函数3.4 GetConsoleCursorInfo函数3.4.1 CONSOLE_CURSOR_INFO结构体 3.5 SetConsoleCursorInfo函数3.6 SetConsoleCursorPosition函数3.7 GetA…

C++智能指针的使用:shared_ptr、weak_ptr、unique_ptr的使用,使用案例说明。

系列文章目录 本章内容: (1)shared_ptr、weak_ptr、unique_ptr的介绍 (2)单独使用share_ptr造成的内存泄漏 (3)shared_ptr和weak_ptr的配合使用 文章目录 系列文章目录前言一、shared_ptr、wea…

openEuler 系统使用 Docker Compose 容器化部署 Redis Cluster 集群

openEuler 系统使用 Docker Compose 容器化部署 Redis Cluster 集群 Redis 的多种模式Redis-Alone 单机模式Redis 单机模式的优缺点 Redis 高可用集群模式Redis-Master/Slaver 主从模式Redis-Master/Slaver 哨兵模式哨兵模式监控的原理Redis 节点主客观下线标记Redis 节点主客观…

如何避免手动修改文件名,批量重命名文件的方法

在我们的日常生活和工作中,经常需要处理大量的文件,其中一些文件可能需要进行重命名。如果只是少数几个文件,我们可以手动重命名,但是当面对成百上千的文件时,手动重命名就变得非常繁琐和低效。那么,有没有…

低代码技术这么香,如何把它的开发特点发挥到极致?

前言 什么是低代码技术? 低代码是一种可视化软件开发方法,通过最少的编码更快地交付应用程序。图形用户界面和拖放功能使开发过程的各个方面自动化,消除了对传统计算机编程方法的依赖。 文章目录 前言低代码平台怎么选?用友Yonbu…

C语言中一维指针、二维指针和三维指针

指针可以指向一份普通类型的数据,例如 int、double、char 等,也可以指向一份指针类型的数据,例如 int *、double *、char * 等。 如果一个指针指向的是另外一个指针,我们就称它为二级指针,或者指向指针的指针。 假设…

github遇到想要强制拉取远程仓库内容

进行项目的时候,遇到了我的远程仓库 Sync fork 更新以后,这时候我的本地就和远程不同步,如果使用 git pull 的时候,如果出现 conficts 过多的情况怎么办,如果我们想要直接把远程仓库拉下来应该怎么办? git…

srs webrtc推拉流环境搭建

官方代码https://github.com/ossrs/srs 拉取代码: git clone https://github.com/ossrs/srs.gitcd ./configure make ./objs/srs -c conf/rtc.confconf/rtc.conf中,当推拉流浏览器在本地时,如果srs也在本地,那么可以使用官网默认…

​怎么测试websocket接口

在部分业务中,我们需要使用长连接,我们可以使用http长连接或者websocket,开发结束后难免会遇到测试问题,这里推荐2个,一个是postman,一个是网站 postman 测试网站 测这边推荐测试网站,支持ws/w…

Python开源项目CodeFormer——人脸重建(Face Restoration),模糊清晰、划痕修复及黑白上色的实践

无论是自己、家人或是朋友、客户的照片,免不了有些是黑白的、被污损的、模糊的,总想着修复一下。作为一个程序员 或者 程序员的家属,当然都有责任满足他们的需求、实现他们的想法。除了这个,学习了本文的成果,或许你还…

如何记录血压的波动情况

import pandas as pd from plotnine import * import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [Microsoft YaHei] 记录时间(time)、收缩压(SBP)、舒张压(DBP): df pd.DataFrame({ time: [2023-11-01 08:30, 2023-11-02 21:00, 2023-11-0…

C++之旅(学习笔记)第6章 基本操作

C之旅(学习笔记)第6章 基本操作 6.1 基本操作 class X{ public:X(Sometype); // "普通的构造函数": 创建一个对象X(); // 默认构造函数X(const X&); // 拷贝构造函数X(X&&); // 移动构造函数X& operator(const …

规划文献阅读——Obstacle Avoidance, Path Planning and Control for Autonomous Vehicles

摘要 自动驾驶汽车避障需要三个主要层面,即感知、路径规划和制导控制。在本文中,考虑到这三个层次之间的联系,提出了一个全局架构。在环境感知层面,采用基于证据占用网格的方法进行动态障碍物检测。因此,考虑物体的姿…

鸿蒙原生应用开发-DevEco Studio远程模拟器的使用

使用单设备模拟器运行应用/服务 Remote Emulator支持Phone、Wearable、Tablet、TV等设备类型,但不同区域(开发者帐号注册地)支持的设备类型可能不同,请以实际可申请的设备类型为准。 Remote Emulator中的单设备模拟器&#xff08…

Sprint Boot 学习路线 3

嵌入式服务器 Spring Boot 的嵌入式服务器功能是一项方便而强大的功能,它允许你在应用程序中直接运行 Web 服务器,无需将其部署到单独的独立 Web 服务器中。这使得开发、测试和部署 Web 应用程序变得容易,而且它还是轻量级的、易于启动和停止…

linuxC语言缓冲区及小程序的实现

文章目录 1.文件缓冲区1.1介绍1.2缓冲文件系统1.3冲刷函数fflush1.4认识linux下的缓冲区 2.linux小程序的实现2.1 回车\r和换行\n2.2倒计时程序2.3进度条小程序sleep/usleep代码运行结果 1.文件缓冲区 1.1介绍 为缓和 CPU 与 I/O 设备之间速度不匹配,文件缓冲区用以…

【Maven教程】(十):使用 Hudson 进行持续集成—— 从Hudson的安装到任务创建 ~

Maven 使用 Hudson 进行持续集成 1️⃣ 持续集成的作用、过程和优势2️⃣ Hudson 简介与安装3️⃣ 准备 Subversion 仓库4️⃣ Hudson 的基本系统设置5️⃣ 创建 Hudson 任务5.1 Hudson 任务的基本配置5.2 Hudson 任务的源码仓库配置5.3 Hudson 任务的构建触发配置5.4 Hudson …
最新文章