前一篇介绍了 diffusion model 的设计灵感和主要的思想。这篇沿用了之前的想法,用一个马尔科夫链来构成一个生成模型,训练是是把原始分布逐步扩散到一个噪声分布,然后学习其逆扩散的过程。不同的是此处把模型的逆扩散过程更加形象地看成是去噪过程(DDPM),并优化了训练目标,使得训练和生成过程更加清晰简洁,后面很多论文都是基于这篇论文优化发展的。
模型生成可以看成是去噪过程
扩散过程
(1) 每一步的新数据都是由上这次的扩散核作用在上一次数据上产生的,(2)扩散核,也就是扩散过程的规则,(3)最终的联合分布。
方向传播
在扩散率 β 很小的情况下,可以把正向扩散和反向传播的每一步都可以看成是同一种形式(比如高斯扩散)。而这个反向传播中高斯扩散的均值和方差便可以作为参数进行训练。
扩散过程是一个马尔科夫高斯扩散,每个时刻的分布只和前一个分布和扩散核有关:
正向扩散过程
设 αt = 1 - βt,则:
x/x-1
将以上两个式子联立,带入,可以得到:
xt
两个独立同分布的高斯分布相加之后有以下公式:
高斯合并特性
最终可以简化并推导可得:
简化结果
q(xt|xt-1) 为扩散的过程,则 q(xt-1|xt) 为理想的逆扩散过程,利用贝叶斯可求解,而且当 β 足够小时候,逆扩散扩展可以看成和扩散过程一样的高斯扩散形式:
逆扩散
标准正态分布的展开为:
标准高斯分布
对比上面两式子可得:
方差和均值
根据 2.1 的扩散特性可消掉 x0,得
消掉x0
最终得到 q(xt|xt-1) 的表达形式(其中的噪声则是正向扩散时添加的噪声):
q的最终表达式
此模型采用了最大化对数似然(交叉熵)来进行优化训练:
优化目标
经过一些骚作后转化成:
优化目标转化
L0
逆扩散和生成
其中的 p(xt-1|xt) 中的方差 σ 可以取 2.2 (2)中 β,也可以取值波浪β,结果差别不大,根据两个高斯分布的KL散度公式可得
Lt-1
根据 2.2 的 (1)得
Lt-1 - C
所以最小化 Lt-1 则是让 μθ 来预测
用 u 来预测 Lt-1
所以
uθ
其中的Eθ 便是用神经网络来根据xt 预测出来的噪声,则取样结果为(z是标准正态分布,加上 σz 是为了把方差转变成 σ):
xt-1
然后模型最终的优化目标可以简化成:
最终的优化目标
但在训练中发现,去掉其中的系数能简化训练:
简化后的优化目标
算法流程
不断取样本x0~q(x0)和一个随机正态分布的噪声E,利用1~T 步中由神经网络输出的噪声和E计算误差来训练,直到网络收敛。神经网络的输入则是扩散过程中每一步扩散得到的 xt。
训练中计算的 1~T 步中扩散的 方差 p(xt-1|xt) 中的方差 σ^2 ,然后先生成一个随机高斯噪声,再逐步利用训练得到的噪声E和方差,使用第4 步的式子来计算。在 x1->x0时,z 则取值为0。
这篇文章把模型的逆扩散过程更加形象地看成是去噪过程(DDPM),并优化了训练目标,使得训练和生成过程更加清晰简洁,使得模型能生成质量更高的图像。由于在图像数据上出色的inductive biases, diffusion model 后续的在生成模型的发展上大放异彩,甚至超越了 GANs.
本文分享自 GiantPandaCV 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!