赞
踩
VAE将图片编码成embedding,而Diffusion将图片通过添加噪声的方式,变成一个服从高斯分布的噪声图。
核心部分就这两个算法。也叫DDPM算法。
采样原始图片 x 0 x_0 x0 和噪声 ϵ \epsilon ϵ ,通过比例系数调整得到带噪声的图像,同时将步长 t t t 一起喂给噪声预测器,反过来预测噪声,和target值计算loss。
这里有疑问的是,为什么调和噪声与图片的比例系数要这么设计?
通过噪声预测器 ϵ θ \epsilon_{\theta} ϵθ 预测出噪声,然后计算得到去噪的图片。这里存在的疑问是,为什么最后还要加上一个高斯噪声项 z z z ?
由数据构造方式可知,每次在数据 x t x_t xt 上添加一定比例的高斯噪声即可。这里的比例系数 { β 1 , β 2 , . . . \beta_1 , \beta_2,... β1,β2,...} 是预先定义好的超参数。所以,在这种数据构造的逻辑下,求概率 q ( x t ∣ x 0 ) q(x_t|x_0) q(xt∣x0) 是可行的。
简单的递归推导,可以简化两次不同比例系数的高斯噪声,只采样一次,乘上对应系数即可。这里对应系数的计算是作了近似,并不完全等价。
通式,所以从本质上来说,给定一张干净的图片 x 0 x_0 x0 想要得到 x t x_t xt ,并不需要迭代 t t t 次,只需要利用上述通式进行一次迭代即可。这里还进行了参数重定义,与前文算法中的 α \alpha α 对应上。
继续展开变换,这里只贴出过程,感兴趣可以在arxiv上看看细节。
中间项的KL式与模型参数无关,因为 P ( x T ) P(x_T) P(xT) 是生成噪声图的过程,不受模型控制, q ( x T ∣ x 0 ) q(x_T|x_0) q(xT∣x0) 也是与构造噪声数据的方式有关,所以整个KL项可以不考虑。接下来着重介绍最后一项如何优化。(P.S. 第一项与此类似)
q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt−1∣xt,x0) 看起来是个熟悉的,但是不太好解释的项,我们已知下列三种概率的计算方式,或者说知道它们代表的意义。怎么通过这三个已知项求解 q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt−1∣xt,x0) ?
上图就是对 q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt−1∣xt,x0) 的直观解释,以及如何变形得到它的计算方式。这里解释一下,通俗地讲,在看到了 x 0 x_0 x0 和 x t x_t xt 之后,猜测 x t − 1 x_{t-1} xt−1 的形式。你知道了一个加噪过程的输入和输出,反推其中某次加噪结果。所以这里可计算的不止 x t − 1 x_{t-1} xt−1 ,而是中间任意一个结果均可。
将三个高斯分布的具体形式带入,计算得到 x t − 1 x_{t-1} xt−1 其实也是高斯分布,均值和方差如图。
至此,我们发现KL散度中的两个分布都是高斯分布,虽然这在数学上是有解析解,但我们不需要这么复杂的求解方式。因为 q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt−1∣xt,x0) 是完全固定的一个分布,不受模型参数影响,而我们的噪声预测器输出的高斯噪声又不去考虑方差,所以问题简化成,一个只有均值会变的高斯分布怎么接近一个固定的高斯分布。显然,直接让均值相等就好。
这里省略了变形过程。从结果上看,解释了Sampling过程中前一项怎么来的。
首先,Denoise输出的是一个高斯分布的均值,为什么不直接用这个均值,明明它反映了最大概率密度对应的样本。反而非要加上一个高斯噪声,构成了一次采样过程。注意,这里将表达式中添加的最后一项,看作了从预测的高斯分布中进行采样。
核心思想是,从模型预测的概率分布中总是选取最大概率的,不一定好。在语言模型和语音模型的实践中,都有类似的现象。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。