扩散模型DDPM
1.什么是DDPM
DDPM是Denoising(去噪) Diffusion Probabilistic Mode的缩写
我们首先定义一个前向传播过程,给定一张原始的图x0 我们通过加噪T次 每一次往图片中加入一些噪点 经过T此之后 可以得到一张噪声 我们设想 是否有一个反向传播的过程 能够从噪声恢复到原图 如下
Denoising指的就是反向传播一个逐步去噪的过程
Diffusion指的是每张图片逐步进行去噪过程 不是一步到位直接去噪成原图的
Probabilistic Models指的是其中涉及一些数学的概率相关的原理推导
2.加噪
前向:
加噪就是在xt-1的图片中加入一个0-1的高斯分布噪声可以得到以一个xt时间步的图片
每一个过程都是 加一个01分布的高斯噪声
反向:
实际上就是训练出一个神经网路 可以预测出一个噪声 然后xt减去这个噪声 得到xt-1
这个过程就是一个去噪过程
高斯噪声
高斯噪声(GaussianNoise)是一种概率密度函数服从高斯分布(正态分布)的噪声。这种噪声在时域和频域上都具有连续谱的特点,即其功率谱密度在所有频率上都是均匀分布的,因此也被称为白噪声。
高斯噪声的幅度分布符合高斯分布,这意味着噪声的幅度值在某个均值附近波动,并且极端值出现的概率较小。这种噪声在自然界中广泛存在,如大气噪声、电子设备的热噪声等。
在数字图像处理中,高斯噪声是一种常见的噪声类型。它可能由于传感器故障、传输错误或环境因素等原因而产生。高斯噪声会使图像变得模糊,降低图像质量,影响图像的后续处理和分析。
3.前向传播过程
这里定义了个系数 来表达噪声图片的生成
生成的噪声图片也满足高斯分布
这个表示z是从一个μ()均值和
²(方差)中采样出来的一个分布
这个表示在这个分布减去μ再除以
² 就可以得到一个0-1正态分布
将上面式子的右边表示为
用来描述z分布的特征
对应到上面图片中的式子 根号下at就是μ 根号下1-at就是
我们可以用这样的一个概率分布式子来表示xt-1到xt这样一个过程
这个过程服从高斯分布
前向传播的式子进行整理迭代
最终可以得到这样一个结果
通过这个式子我们可以得出从x0可以一步直接加噪到我们任何一个想到达的t时间步xt
加噪不用一步一步加
3.反向传播过程
那么问题的核心就是如何得到的逆过程
,这个过程无法直接求出来,所以我们使用神经网络去拟合这一分布。我们使用一个具有参数的神经网络去计算
。假设反向的条件概率分布也是高斯分布,且高斯分布实际上只有两个参数:均值和方差,那么神经网络需要计算的实际上是
根据概率论的相关计算:
方差是固定的,网络只学习均值。而之后的改进模型中,方差也可由网络学习得到。
5.整体的训练过程
1.训练
采样一幅真实图像x0
选取想要的t 一步加噪生成xt
训练网络的均值与真实网络的均值进行对比 计算损失
更新参数 反复迭代
2.生成
从标准高斯分布N(0,1)中采样以恶搞噪声向量z,这个噪声向量将用于生成在时间步t处的噪声图像
对t等于T到1排序:使用训练的网络的参数进行去噪
最终的x0就是生成的图片
总之,我们定义这么一个过程:给一张图片逐步加噪声直到变成纯粹的噪声,然后对噪声进行去噪得到真实的图片。所谓的扩散模型就是让神经网络学习这个去除噪声的方法。
所谓的加噪声,就是基于稍微干净的图片计算一个(多维)高斯分布(每个像素点都有一个高斯分布,且均值就是这个像素点的值,方差是预先定义的 ),然后从这个多维分布中抽样一个数据出来,这个数据就是加噪之后的结果。显然,如果方差非常非常小,那么每个抽样得到的像素点就和原本的像素点的值非常接近,也就是加了一个非常非常小的噪声。如果方差比较大,那么抽样结果就会和原本的结果差距较大。
去噪声也是同理,我们基于稍微噪声的图片 计算一个条件分布,我们希望从这个分布中抽样得到的是相比于 更加接近真实图片的稍微干净的图片。我们假设这样的条件分布是存在的,并且也是个高斯分布,那么我们只需要知道均值和方差就可以了。问题是这个均值和方差是无法直接计算的,所以用神经网络去学习近似这样一个高斯分布。