885 字
4 分钟
扩散模型学习

扩散模型总结#

结构#

  • 一个固定的前面加噪过程
  • 一个用来学习怎么去噪的Unet

加噪过程#

固定是理解加噪的核心!

加噪是一个固定的过程,给定一张图片,加噪一次和加噪100次,得到的结果是一样的(在参数固定的情况下)。

如何获取噪声?#

首先引入分布的概念,我们假设真实图片的分布为q(x0)q(\mathbf{x}_0)x0x_0是一张从q(x0)q(\mathbf{x}_0)采样得到的一张真实图片。

可以将分布理解成一个班级,有50个人,采样出来的x0x_0就是一个同学

加噪过程是一步步进行的,把每一步记为tt,总共需要加噪TT次。

我们通过Gaussian distribution来得到噪声,此处需要知道高斯分布由两个参数决定分别是,mean(均值)和variance(方差),记为μ\muσ2\sigma^2。 一个图片在第tt步加噪来源于一个均值为μt=1βtx0\mu_t=\sqrt{1-\beta_t}\mathbf{x_0},方差为σt2=βt\sigma_t^2=\beta_t的高斯分布, 可以等价表示为: 每次从一个标准正太分布中采样一个ϵ\epsilon,即ϵN(0,I)\epsilon \sim \mathcal {N}(0, I)

第t步的加噪图像Xt\mathbf{X}_t#

加噪第t步的图像表示为 xt=1βtxt1+βtϵ\mathbf{x}_t=\sqrt{1-\beta_t}\mathbf{x}_{t-1}+\sqrt{\beta_t}\epsilon

注意,此处的βt\beta_t不是常亮,会随着t的变化而变化,但是遵循(β1<β2<β3<<βT<1\beta_1<\beta_2<\beta_3<\cdots<\beta_T<1), 可以是线性,二项式,cos等等方式。

最终的加噪图像XT\mathbf{X_T}应该是纯噪声(pure noise)。

去噪过程#

去噪过程就是把上面的加噪结果XT\mathbf{X_T}, 一步步的变回原来的图片x0\mathbf{x_0}

学习这个去噪过程有什么作用呢? 在得到一个新的加噪图片后,可以通过去噪生成全新的图片,让网络拥有了自己生成的能力。

我们记这个去噪过程为p(xt1xt)p(x_{t-1}|x_t),但是这个分布是无法直接计算得到的,因此我们选用一个神经网络去拟合这个过程。也就是pθ(xt1xt)p_{\theta}(x_{t-1}|x_t),其中θ\theta代表神经网络的参数

如何拟合去噪过程?#

在这里我们假设去噪过程也是满足高斯分布的,也就是说神经网络需要学习的是前面提到的两个参数μt\mu_tσt2\sigma_t^2。(DDPM固定了方差,只学习均值,在后续的论文有改进)

定义目标函数#

为了驱使神经网络在去噪过程中学习到均值,作者将加噪过程qq与去噪过程pθp_\theta 视为一个VAE(variational auto-encoder), 此处如果不知道VAE可以略过,只需要知道最后的Loss函数如何计算。(因为后续还涉及到KL散度,ELBO证据下限等一系列概率论知识,好奇的可以挨个探索。)

这部分我暂时没看懂

经过一系列条件后,可以得到一个”nice property”

q(xtx0)=N(xt;αtˉ,(1αtˉ)I)q(\mathbf{x_t}|\mathbf{x_0})=\mathcal{N}(\mathbf{x_t};\sqrt{\bar{\alpha_t}},(1-\bar{\alpha_t})\mathbf{I})

其中,αt=1βt\alpha_{t}=1-\beta_tαtˉ=s=1tαs\bar{\alpha_t}=\prod_{s=1}^t\alpha_s。 这个性质意味着

  1. 可以从高斯分布中采样噪声,然后通过合适的缩放,使得x0\mathbf{x_0}直接变为xt\mathbf{x_t},其中αtˉ\bar{\alpha_t}可以由已知的βt\beta_t计算得到。
  2. 可以将预测均值的网络转换成预测噪声的网络。

最终的目标函数定义如下: ϵϵθ(xt,t)2=ϵϵθ(αˉtx0+(1αˉt)ϵ,t)2\|\epsilon-\epsilon_\theta(\mathbf{x}_t,t)\|^2=\|\epsilon-\epsilon_\theta(\sqrt{\bar{\alpha}_t}\mathbf{x}_0+\sqrt{(1-\bar{\alpha}_t)}\epsilon,t)\|^2

总结#

  1. 从真实世界中存在的数据分布q(x0)q(\mathbf{x_0})随机采样了图片x0\mathbf{x_0}

  2. 从1到T\mathbf{T}之间均匀的采样出噪声t

  3. 从高斯分布中采样出噪声ϵN(0,I)\epsilon \sim \mathcal{N}(0, I),并用噪声污染采样到的图片x0\mathbf{x_0},得到xt=αˉtx0+(1αˉt)ϵ\mathbf{x_t}=\sqrt{\bar{\alpha}_t}\mathbf{x}_0+\sqrt{(1-\bar{\alpha}_t)}\epsilon

  4. 神经网络基于被污染的图片xt\mathbf{x_t},预测出噪声ϵθ(xt,t)\epsilon_\theta(\mathbf{x}_t,t)

扩散模型学习
https://qingyuna.github.io/posts/扩散模型总结/
作者
Qingyuna
发布于
2024-04-22
许可协议
CC BY-NC-SA 4.0