Diffusion Model合集 part3

扩散模型原理介绍3

  • 八,Diffusion Probabilistic Model的算法代码

而我们可以有多种建模目标
L t − 1 = E q [ 1 2 σ t 2 ∣ ∣ μ t ∼ ( x t , x 0 ) − μ θ ( x t , t ) ∣ ∣ 2 ] + C L_{t-1}=\mathbb{E}_{q}\left[\frac{1}{2\sigma_{t}^{2}}||\overset{\sim}{\mu_{t}}(\mathbf{x}_{t},\mathbf{x}_{0})-\mu_{\theta}(\mathbf{x}_{t},t)||^{2}\right]+C Lt1=Eq[2σt21∣∣μt(xt,x0)μθ(xt,t)2]+C
【1】直观的做法是让 D θ D_{\theta} Dθ 网络的输出等于前向过程中的后验分布均值 μ t ∼ ( x t , x 0 ) \overset{\sim}{\mu_{t}}(x_{t},x_{0}) μt(xt,x0),这种建模方法俗称预测后验分布的期望值;

【2】根据 μ t ∼ ( x t , x 0 ) \overset{\sim}{\mu_{t}}(x_{t},{\color{red}x_{0}}) μt(xt,x0)的表达式,它里面的 x 0 {\color{red}x_{0}} x0对于 D θ D_{\theta} Dθ网络是未知的,因此第二种做法是让 D θ D_{\theta} Dθ网络的输出等于 x 0 x_{0} x0,这种做法即直接预测原始数据。
有人问:既然可以通过 D θ D_{\theta} Dθ网络直接预测 x 0 x_{0} x0了,那是不是采样过程就直接计算 D θ ( x T , T ) D_{\theta}(x_{T}, T) Dθ(xT,T)的输出即可认为是生成了样本了呢?
答案是:直接一步到位,质量会比较差,还是需要通过马尔科夫高斯条件迭代而获得最终高质量的生成样本;
μ t ∼ ( x t , x 0 ) = α t ( 1 − α ˉ t − 1 ) 1 − α ˉ t x t + β t α ˉ t − 1 1 − α ˉ t x 0 \mathrm{\overset{\sim}{\mu_{t}}(x_{t},{\color{red}x_{0}})}=\frac{\sqrt{\alpha_{t}}(1-\bar\alpha_{t-1})}{1-\bar\alpha_{t}}{\color{blue}x_{t}}+\frac{\beta_{t}\sqrt{\bar\alpha_{t-1}}}{1-\bar\alpha_{t}}{\color{red}x_{0}} μt(xt,x0)=1αˉtαt (1αˉt1)xt+1αˉtβtαˉt1 x0

  • x t , t → μ θ x_{t}, t \rightarrow\mu_{\theta} xt,tμθ中得到 x 0 x_{0} x0
  • 将上面得到的 x 0 x_{0} x0,和已知的 x t x_{t} xt输入到 μ t ∼ ( x t , x 0 ) \mathrm{\overset{\sim}{\mu_{t}}(x_{t},{\color{red}x_{0}})} μt(xt,x0)中,则前向过程中的后验分布均值 μ t ∼ \mathrm{\overset{\sim}{\mu_{t}}} μt就知道了
  • 所以就可以根据对应的 q ( x t − 1 ∣ x t , x 0 ∼ N ( μ t ∼ , β t ∼ I ) q(x_{t-1}|x_{t},x_{0}\sim N(\mathrm{\overset{\sim}{\mu_{t}}},\mathrm{\overset{\sim}{\beta_{t}}I}) q(xt1xt,x0N(μt,βtI)高斯分布重采样,得到 x t − 1 x_{t-1} xt1,即 t − 1 t-1 t1时刻的样本;同理,迭代最后生成 x 0 x_{0} x0

【3】当我们把 μ ∼ ( x t , x 0 ) \overset{\sim}{\mu}(x_{t},x_{0}) μ(xt,x0)中的 x 0 x_{0} x0 x t x_{t} xt去表示的时候, μ ∼ ( x t , x 0 ) \overset{\sim}{\mu}(x_{t},x_{0}) μ(xt,x0)就变成了如下只包含 x t x_{t} xt和随机变量 ϵ \epsilon ϵ的式子,记为 μ ∼ ( x t , ϵ ) \overset{\sim}{\mu}(x_{t},\epsilon) μ(xt,ϵ)。其中 x t x_{t} xt对于D网络是已知的,而 ϵ \epsilon ϵ是未知的,因此这个时候,我们可以选择建模目标是让 D θ D_{\theta} Dθ网络的输出等于 ϵ \epsilon ϵ了(得到 ϵ \epsilon ϵ后,再带入 μ ∼ ( x t , ϵ ) \overset{\sim}{\mu}(x_{t},\epsilon) μ(xt,ϵ),就可以用重采样技巧推出 x t − 1 x_{t-1} xt1, ⋯ \cdots 不断迭代 ⋯ \cdots 就可以求出 x 0 x_{0} x0),这种建模方法俗称随机变量(噪音)法。

总结:上面【1】【2】【3】殊途同归,都是为了预测 q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_{t},x_{0}) q(xt1xt,x0)的均值 μ ∼ \overset{\sim}{\mu} μ

L t − 1 − C = E x 0 , ϵ [ 1 2 σ t 2 ∥ μ ∼ t ( x t ( x 0 , ϵ ) , 1 α ˉ t ( x t ( x 0 , ϵ ) − 1 − α ˉ t . ϵ ) ) − μ θ ( x t ( x 0 , ϵ ) , t ) ∥ 2 ] = E x 0 , ϵ [ 1 2 σ t 2 ∥ 1 α t ( x t ( x 0 , ϵ ) − β t 1 − α ˉ t . ϵ ) ⏟ μ ∼ t − μ θ ( x t ( x 0 , ϵ ) , t ) ⏟ μ θ ∥ 2 ] ⑥ \begin{aligned} L_{t-1}- C&=\mathbb{E}_{\mathbf{x}_{0},\epsilon}\left[\frac{1}{2\sigma_{t}^{2}}\Vert\overset{\sim}{\mu}_{t}\left(\mathbf{x}_{t}(\mathbf{x}_{0},\epsilon),\frac{1}{\sqrt{\bar\alpha_{t}}}(\mathbf{x}_{t}(\mathbf{x}_{0},\epsilon)-\sqrt{1-\bar\alpha_{t}}.\epsilon)\right)-\mu_{\theta}(\mathbf{x}_{t}(\mathbf{x}_{0},\epsilon),t) \Vert^{2}\right]\\ \\ &=\mathbb{E}_{\mathbf{x}_{0},\epsilon}\left[\frac{1}{2\sigma_{t}^{2}}\Vert\underbrace{\frac{1}{\sqrt{\alpha_{t}}}\left(\mathbf{x}_{t}(\mathbf{x}_{0},\epsilon)-\frac{\beta_{t}}{\sqrt{1-\bar\alpha_{t}}}.\epsilon\right)}_{\overset{\sim}{\mu}_{t}}-\underbrace{\mu_{\theta}(\mathbf{x}_{t}(\mathbf{x}_{0},\epsilon),t)}_{\mu_{\theta}} \Vert^{2}\right]\quad\quad\quad⑥\\ \end{aligned} Lt1C=Ex0,ϵ[2σt21μt(xt(x0,ϵ),αˉt 1(xt(x0,ϵ)1αˉt .ϵ))μθ(xt(x0,ϵ),t)2]=Ex0,ϵ 2σt21μt αt 1(xt(x0,ϵ)1αˉt βt.ϵ)μθ μθ(xt(x0,ϵ),t)2

在DDPM论文中,作者选择了方案【3】,即让 D θ D_{\theta} Dθ网络的输出等于 ϵ \epsilon ϵ, 预测噪音法。于是,新的逆向条件分布的均值可以表示成(下式中的 ϵ θ \epsilon_{\theta} ϵθ相当于我们定义的广义的 D θ D_{\theta} Dθ网络的具体目标形式):
μ θ ( x t , t ) = μ t ∼ ( x t , 1 α ˉ t ( x t − 1 − α ˉ t . ϵ θ ( x t ) ) ) = 1 α t ( x t − β t 1 − α ˉ t . ϵ θ ( x t , t ) ) ⑦ \mu_{\theta}(\mathbf{x}_{t},t)=\overset{\sim}{\mu_{t}}\left(\mathbf{x}_{t},\frac{1}{\sqrt{\bar\alpha_{t}}}(\mathbf{x}_{t}-\sqrt{1-\bar\alpha_{t}}.\epsilon_{\theta}(\mathbf{x}_{t}))\right)=\frac{1}{\sqrt{\alpha_{t}}}\left(\mathbf{x}_{t}-\frac{\beta_{t}}{\sqrt{1-\bar\alpha_{t}}}.\epsilon_{\theta}(\mathbf{x}_{t},t)\right)\quad\quad⑦ μθ(xt,t)=μt(xt,αˉt 1(xt1αˉt .ϵθ(xt)))=αt 1(xt1αˉt βt.ϵθ(xt,t))

在DDPM论文中预测的就是 ϵ \epsilon ϵ, 所以就是让上式⑥中的 μ ∼ t \overset{\sim}{\mu}_{t} μt 尽可能地接近于 μ θ \mu_{\theta} μθ ,所以才有了上式⑦

又因为在前面我们已知:
μ t ∼ ( x t , x 0 ) = α t ( 1 − α ˉ t − 1 ) 1 − α ˉ t x t + β t α ˉ t − 1 1 − α ˉ t x 0 \mathrm{\overset{\sim}{\mu_{t}}(x_{t},x_{0})}=\frac{\sqrt{\alpha_{t}}(1-\bar\alpha_{t-1})}{1-\bar\alpha_{t}}x_{t}+\frac{\beta_{t}\sqrt{\bar\alpha_{t-1}}}{1-\bar\alpha_{t}}x_{0} μt(xt,x0)=1αˉtαt (1αˉt1)xt+1αˉtβtαˉt1 x0
x t = α ˉ t x 0 + 1 − α ˉ t z t x_{t}=\sqrt{\bar\alpha_{t}}x_{0}+\sqrt{1-\bar\alpha_{t}}z_{t} xt=αˉt x0+1αˉt zt,我们可以知道: x 0 = 1 α ˉ t ( x t − 1 − α ˉ t z t ) x_{0}=\frac{1}{\sqrt{\bar\alpha_{t}}}(x_{t}-\sqrt{1-\bar\alpha_{t}}z_{t}) x0=αˉt 1(xt1αˉt zt)
所以: μ t ∼ ( x t , x 0 ) → μ t ∼ ( x t , 1 α ˉ t ( x t − 1 − α ˉ t . ϵ θ ( x t ) ) ) \mathrm{\overset{\sim}{\mu_{t}}(x_{t},x_{0})}\rightarrow\overset{\sim}{\mu_{t}}\left(\mathbf{x}_{t},\frac{1}{\sqrt{\bar\alpha_{t}}}(\mathbf{x}_{t}-\sqrt{1-\bar\alpha_{t}}.\epsilon_{\theta}(\mathbf{x}_{t}))\right) μt(xt,x0)μt(xt,αˉt 1(xt1αˉt .ϵθ(xt)))
说明 z t z_{t} zt就是噪声,即下面的 ϵ θ ( x t ) \epsilon_{\theta}(\mathbf{x}_{t}) ϵθ(xt),至于为什么写成 ϵ θ ( x t ) \epsilon_{\theta}(\mathbf{x}_{t}) ϵθ(xt),而不是 ϵ \epsilon ϵ
因为这里我们定义 ϵ θ ( x t ) \epsilon_{\theta}(\mathbf{x}_{t}) ϵθ(xt)是一个函数近似,可以根据输入 x t \mathbf{x}_{t} xt来预测出 ϵ \epsilon ϵ
因为 x t \mathbf{x}_{t} xt不含参数,所以它可以看作常量,我们就把参数转移到随机量 ϵ \epsilon ϵ

  • x t ( x 0 , ϵ ) \mathbf{x}_{t}(\mathbf{x}_{0},\epsilon) xt(x0,ϵ)就说明了 x t \mathbf{x}_{t} xt ϵ \epsilon ϵ是有一定关系的,现在我们把 x t \mathbf{x}_{t} xt看作常量,那就可以求出来 ϵ \epsilon ϵ了,所以我们就定义了一个函数 ϵ θ ( x t ) \epsilon_{\theta}(\mathbf{x}_{t}) ϵθ(xt),可以根据输入 x t \mathbf{x}_{t} xt来预测出 ϵ \epsilon ϵ

前面说到逆扩散过程中有 p θ ( x t − 1 ∣ x t ) = N ( x t − 1 ; μ θ ( x t , t ) , Σ θ ( x t , t ) ) p_{\theta}(\mathbf{x}_{t-1}|\mathbf{x}_{t})=\mathcal{N}(\mathbf{x}_{t-1};\mu_{\theta}(\mathbf{x}_{t},t),\Sigma_{\theta}(\mathbf{x}_{t},t)) pθ(xt1xt)=N(xt1;μθ(xt,t),Σθ(xt,t)),实际上在论文中作者设置 Σ θ ( x t , t ) = σ t I \Sigma_{\theta}(\mathbf{x}_{t},t)=\sigma_{t}\mathbf{I} Σθ(xt,t)=σtI,所以有: p θ ( x t − 1 ∣ x t ) = N ( x t − 1 ; μ θ ( x t , t ) , σ t I ) p_{\theta}(\mathbf{x}_{t-1}|\mathbf{x}_{t})=\mathcal{N}(\mathbf{x}_{t-1};\mu_{\theta}(\mathbf{x}_{t},t),\sigma_{t}\mathbf{I}) pθ(xt1xt)=N(xt1;μθ(xt,t),σtI),利用参数重整化( z ∼ N ( 0 , I ) \mathbf{z}\sim N(0,I) zN(0,I)),得到: x t − 1 = σ t . z + μ θ \mathbf{x}_{t-1}=\sigma_{t}.\mathbf{z}+\mu_{\theta} xt1=σt.z+μθ, 带入式子⑦即得:
x t − 1 = 1 α t ( x t − β t 1 − α ˉ t . ϵ θ ( x t , t ) ) + σ t . z \mathbf{x}_{t-1}=\frac{1}{\sqrt{\alpha_{t}}}(\mathbf{x}_{t}-\frac{\beta_{t}}{\sqrt{1-\bar\alpha_{t}}}.\epsilon_{\theta}(\mathbf{x}_{t},t))+\sigma_{t}.\mathbf{z} xt1=αt 1(xt1αˉt βt.ϵθ(xt,t))+σt.z

于是 L t − 1 L_{t-1} Lt1可以化简成如下表达式:
E x 0 , ϵ [ β t 2 2 σ t 2 α t ( 1 − α ˉ t ) ∥ ϵ − ϵ θ ( α ˉ t x 0 + 1 − α ˉ t ϵ , t ) ∥ 2 ] \mathbb{E}_{\mathbf{x}_{0},\epsilon}\left[\frac{\beta_{t}^{2}}{2\sigma_{t}^{2}\alpha_{t}(1-\bar\alpha_{t})}\left\|\epsilon-\epsilon_{\theta}(\sqrt{\bar\alpha_{t}}\mathbf{x}_{0}+\sqrt{1-\bar\alpha_{t}}\epsilon,t)\right\|^{2}\right] Ex0,ϵ[2σt2αt(1αˉt)βt2 ϵϵθ(αˉt x0+1αˉt ϵ,t) 2]

上式化简的过程中, x t \mathbf{x}_{t} xt x t ( x 0 , ϵ ) \mathbf{x}_{t}(\mathbf{x}_{0},\epsilon) xt(x0,ϵ)是一样的,可以互相消掉。

DDPM作者又发现,干脆将系数丢掉,训练更加稳定,质量更好,于是有了下面的 L s i m p l e L_{simple} Lsimple:
L s i m p l e ( θ ) = E x 0 , ϵ [ ∥ ϵ − ϵ θ ( α ˉ t x 0 + 1 − α ˉ t ϵ , t ) ∥ 2 ] L_{simple}(\theta)=\mathbb{E}_{\mathbf{x}_{0},\epsilon}\left[\left\|\epsilon-\epsilon_{\theta}(\sqrt{\bar\alpha_{t}}\mathbf{x}_{0}+\sqrt{1-\bar\alpha_{t}}\epsilon,t)\right\|^{2}\right] Lsimple(θ)=Ex0,ϵ[ ϵϵθ(αˉt x0+1αˉt ϵ,t) 2]

八,Diffusion Probabilistic Model的算法代码

Diffusion Model合集 part3_第1张图片

  • Training
    t ∈ ( 0 , T ) t\in(0,T) t(0,T), T T T是可以在前面求出为多少合适的,且 t t t 是一个embedding
    训练的过程 ≈ \approx 优化 − log ⁡ p θ ( x 0 ) -\log p_{\theta}(x_{0}) logpθ(x0)
  • Sampling
    迭代的次数越多,生成的概率分布越准确
    后续的改进:优化迭代次数(减少耗时)

你可能感兴趣的:(机器学习,人工智能)