(前提:数学原理很多)
第一件事,前向过程:不断往输入数据中加噪声,变成纯噪声
每一步加入的噪声是不一样的,希望加噪的过程不断越来越多,理解为噪声的权重越来越大。
任意时刻的xt的分布计算,肯定和xt-1时刻关系最密集,在xt-1时刻加上噪声得到xt,随着时刻的增加,噪声的影响逐步增大,:
但在实际计算中,逐步递归太麻烦,考虑由x0直接推导得到xt:
红色的式子就是前向的扩散过程。
第二件事,逆向过程:逐步去噪
考虑由xt开始逆向去噪,由前向过程可知,目前已知的是xt,直接求x0太难,先求xt-1。
由于前向过程中可以由xt-1求得xt的分布,根据贝叶斯公式,可推得由xt求xt-1:
但是式子中xt-1的分布不知道,得有前向过程中的x0推导,因此在式子中都加上x0,对公式里的各项进行展开:
知道了右边各项的分布以后,可以求得左边的分布,这里注意,标准正态分布可以等价于指数分布:
把标准正态分布展开后,乘法相当于相加,除法相当于相减:
继续对这个分布进行化简:
我们得到了均值和方差,这样通过xt求xt-1的分布也是已知的了,其中还存在一个问题,均值中的zt是什么?
zt就是要估计的每个时刻的噪声
zt直接求解求不出来,训练一个神经网络模型去预测在XT时刻下的噪声zt是什么,该怎么训练模型呢?
模型的损失怎么训练呢?损失是真实值与预测值的差,模型训练得到的预测值,真实值怎么得到呢?
很简单,在前向过程中,我们进行了加噪,加的噪声肯定是已知的,这个就相当于是真实值,然后预测值由模型预测得到。