- 模型训练
- 样本生成
参考:https://zhuanlan.zhihu.com/p/614498231
模型训练
我们可以直接基于原始数据 \(X_0\) 来对任意 \(t\) 步的 \(X_t\) 进行采样,那么在实际训练过程中,我们不必将所有的时间片都拿来训练。而采取直接采样到时刻 \(t\)
然后得到该时刻的 \(X_t\) 并使用神经网络预测添加的噪声即可,因为扩散模型的 \(T\) 是一个非常大的值,使用这种方式将大幅提升训练速度。它的训练过程为:
从分布为 \(q(x_0)\) 的数据集随机采样一个样本 \(x_0 ~ q(x_0)\)
从 \(1\) 到 \(T\) 中随机采样一个值 \(t\) ,用于表示添加噪声的水平;
随机采样一个二维高斯噪音 \(\epsilon\) ,然后使用上面介绍的“Nice Property”对 \(X_0\) 施加 \(t\) 级别的噪声;
训练神经网络根据加噪之后的 \(X_t\) 预测作用到 \(X_0\) 之上的噪声。
样本生成
扩散模型的生成过程是一个反向去噪的过程,它的伪代码见算法2。具体的讲,我们从 \(T\) 时刻开始,首先随机采样一个高斯噪声。
使用神经网络预测的噪声逐渐对其去噪,直到 \(0\) 时刻停止。
从 \(X_t\) 到 \(X_{t-1}\) 的计算公式
是一个二维标准高斯分布
算法过程:
DDPM作为一个扩散模型的基石算法,它有着很多早期算法的共同问题:
采样速度慢:DDPM的去噪是从时刻T到时刻1的一个完整的马尔可夫链的计算,尤其是DDPM还需要一个比较大的T才能保证比较好的效果,这就导致了DDPM的采样过程注定是非常慢的;
生成效果差:DDPM的效果并不能说是非常好,尤其是对于高分辨率图像的生成。这一方面是因为它的计算速度限制了它扩展到更大的模型;另一方面它的设计还有一些问题,例如逐像素的计算损失并使用相同权值而忽略图像中的主体并不是非常好的策略。
内容不可控:我们可以看出,DDPM生成的内容完全还是取决于它的训练集。它并没有引入一些先验条件,因此并不能通过控制图像中的细节来生成我们制定的内容。