论文:https://arxiv.org/pdf/2006.11239
项目:https://github.com/hojonathanho/diffusion
Denoising Diffusion Probabilistic Models (DDPM) 是一种生成模型,它通过一系列逐步添加噪声的过程将数据点映射到一个简单的先验分布(如高斯分布),然后反过来学习从这个简单分布中生成原始数据。换句话说,DDPM 的核心思想是通过前向扩散过程逐渐破坏数据,并通过反向去噪过程重建数据。以下是 DDPM 的详细介绍:
1 DDPM工作原理
1.1 前向扩散过程 (Forward Process)
在前向扩散过程中,DDPM 会逐渐向原始数据 x0 添加噪声高斯噪声,直到最终达到一个接近纯噪声的状态 xT。具体来说,这个过程可以形式化为一个马尔可夫链,其中每个时间步 t 都有一个条件概率分布:
- 公式右边N,表示 xt 服从均值为、协方差矩阵为 的高斯分布。
- 是一个预定义的方差调度表(variance schedule),决定了每一步添加噪声的比例。
- 是单位矩阵,确保噪声是各向同性的(即在各个维度上的方差相同)。
以上公式是DDPM论文内的公式,可以换成易懂点的公式如下。
其中 βt值用来控制噪声的程度,ϵt是随机生成的噪声矩阵,其符合高斯分布(0,βtI)
1.2 反向去噪过程 (Reverse Process)
这是一个生成数据的过程,从纯高斯噪声x_t开始,逐步去噪以恢复原始数据。逆扩散过程同样是一个马尔可夫链,它试图逆转扩散过程中添加的噪声步骤。每一步的逆扩散可以用以下公式表示:
其中是关键(其他都是超参数),它由神经网络根据输入的含噪数据x_t和时间步t学习得到的预测噪声矩阵,这个神经网络经过学习,能够估计在给定时间步长下,从含噪数据中去除多少噪声才能更加接近原始数据。
,这些系数都是预先设定的超参数。
起到一个缩放的作用,对预测噪声进行加权,使得根据当前时间步长和前面时间步长积累的噪声情况,合理的从xt中减去一部分噪声,从而更加接近上一个时间步长x_t-1的数据。
2 训练
定义模型:通常使用u-net网络架构作为基础模型,它具有编解码结构,能够获取不同层次的特征;
前向扩散过程:从原始数据x0开始,在每个时间步长t通过前面的公式向数据添加高斯噪声,得到含噪数据xt;
计算损失函数:在每个时间步长t,将含噪数据xt输入模型,让模型预测该时间步添加的噪声,然后计算预测噪声和实际噪声的均方误差损失,即
3 测试
采样初始噪声:从标准高斯分布中随机采样得到离散噪声xt,作为逆向扩散过程的起始点;
逆向去噪:在每个时间步t,从T逐步减少到1,将当前噪声数据xt输入训练好的模型,得到预测噪声,再根据逆向公式去除噪声,步骤逼近原始数据。
生成结果:经过多次迭代,当t=0时,得到x0即为生成的数据。
源码解读待续。。。