1.写在前面
扩散模型是一类重要的深度生成模型.它的基本思想不是一步生成一个复杂样本,而是先定义一个固定的前向随机过程,把真实样本逐步扰动为近似高斯噪声;再学习一个反向过程,从噪声一步步恢复数据.这样,原本困难的高维生成问题就被分解为一系列局部的去噪问题,因此训练常常更稳定,也更便于引入条件控制.
给定观测变量 𝒙0,扩散模型引入中间变量 𝒙1, 𝒙2, ⋯ , 𝒙𝑇 .其中, 𝒙𝑡 表示第 𝑡个噪声水平下的中间状态, 𝒙𝑇 接近一个简单先验分布(通常取标准高斯分布).于是,扩散模型的联合分布可写为
其中 𝒙1∶𝑇 都可以视为隐变量,相应的边际分布
就是模型对真实数据分布 𝑝𝑟(𝒙) 的近似.
其实扩散模型对于一些图像生成工作来说,从物理层面看,还是在拟合真实数据的分布情况,后续的一些工作优化了扩散模型的训练逻辑,使得模型训练更加符合工业应用
扩散模型一般由两个部分,
扩散模型的核心由两部分构成:一部分是人为设定的前向扩散过程,把样本𝒙0 逐步加上高斯噪声,得到随机变量序列 𝒙1, 𝒙2, ⋯ , 𝒙𝑇 ..另一部分是由神经网络学习的反向去噪过程,使其能够从 𝒙𝑇 开始,一步步恢复出 𝒙𝑇 −1, 𝒙𝑇 −2, ⋯ , 𝒙0.下图展示了扩散模型的基本流程
2.前向扩散过程
在最常见的离散时间扩散模型中,前向过程被定义为一个马尔可夫链,
其中每一步的条件分布定义为
这个高斯分布等价于采样
这里代表的含义是,给定步的样本
,得到了
步加噪后的样本
的分布,就是从
到 \
的加噪转移。其中的
代表噪声调度,不同的t时,
的取值是被固定好的,常见的调度有余弦调度,线性调度。
这里存在一个需要解释的数学知识:"为什么噪声调度的公式里,和噪声前的系数都是根号的形式?"
首先,模型的设计目标是在每一步 t,信号贡献的总方差占比 + 噪声贡献的总方差占比 =1。 噪声部分每个维度方差固定给到
,那留给信号部分每个维度的方差就应该是
。
其次,对于一维标量随机变量,方差是一个数字,对于D维度的向量,其方差叫做协方差矩阵,I就是一个单位阵,对于方差有性质\
,这里的
,
和
,
,
一一对应。
3.训练
扩散模型的训练其实就是模型的反向扩散过程,下面解释一下训练目标,很经典的思路:实现对真实数据分布的拟合----最大化对数似然的变分下界,给定样本x0,有
实际训练选择最小化负的变分下界,根据信息论固定公式展开可得其中最后一项与参数𝜃无关.因此,除去常数项后,ℒVLB主要依赖模型给出的反 向分布𝑝𝜃(𝒙𝑡−1|𝒙𝑡)与真实后验𝑞(𝒙𝑡−1|𝒙𝑡,𝒙0)之间的差异,由于由于前向链是线性高斯模型,真实后验分布存在解析解
,其中有
由于𝑞(𝒙𝑡−1|𝒙𝑡,𝒙0)和𝑝𝜃(𝒙𝑡−1|𝒙𝑡)都是高斯分布,在方差固定或按预设形 式处理时,中间每一项KL散度都可以化简为带权均方误差形式.训练目标可写为