生成式AI之DDPM

 扩散过程是一个逐渐在数据上加噪的马尔科夫链,直到最终变成一个完全的噪声。而扩散模型就是一个使用变分推断训练的参数化马尔科夫链。如上图所示。学习的是一个reverse process。

 

前提条件:

1. 马尔可夫性质:当前的状态只与之前一个时刻的状态有关;

2. 前向和反向状态服从高斯分布,而且变化比较小(利于数学分析);

 

 扩散模型的前向过程就是不断在数据上加噪的过程,可以使用如下形式表示,其中:

q(x1:T|x0):=t=1Tq(xt|xt1)       q(xt|xt1):=N(xt;1βtxt1,βtI)

 这里为了后续计算方便,将条件概率的均值和方差设置成1βtxt1βt。其中,0<β1<β2<...<βt1<βt<1

 

扩散模型的反向过程,可以使用如下的概率形式表示,将其定义为可学习的马尔科夫链,该过程的起始点为p(xT)=N(xT;0,I)

pθ(x0:T):=p(xT)t=1Tpθ(xt1|xt)       pθ(xt1|xt):=N(xt1;μθ(xt,t),θ(xt,t))

所以扩散模型就是通过学习,来估计;μθ(xt,t)θ(xt,t))的过程。

  

DDPM的前向加噪过程如下:

每次加噪过程如下:

q(xt|xt1)=N(xt;1βtxt1,βtI)

xt=1βtxt1+βtεt1     0<β1<β2<...<βt1<βt<1

 引入新变量αt=1βt

因此上面加噪的过程可以写成:

 xt=αtxt1+1αtεt1

xt1=αt1xt2+1αt1εt2

合并上面两式,得:

 xt=αtαt1xt2+αt(1αt1)εt2+1αtεt1

 xt=αtαt1xt2+1αtαt1εt

以此类推,得到:

xt=αtαt1...α2α1x0+1αtαt1...α2α1εt=αt¯x0+1αt¯εt

其中,αt¯=αtαt1...α2α1

 因此,实际的前向过程中,t时刻的图片是直接使用上面的关系一次加噪完成的。

重采样

一个高斯分布不可导,可以将其转换成标准高斯分布的格式:

y=σε+μN(μ,σ2) 

所以,这里xt满足高斯分布,且

xtN(1βtxt1,βt)

 

 

DDPM的反向生成过程如下:

由上描述的扩散过程p(xT)pθ(xT1|xT)...pθ(xt1|xt)...pθ(x0|x1

其中,定义pθ(xt1|xt)为高斯过程,即:

 pθ(xt1|xt):=N(xt1;μθ(xt,t),θ(xt,t))

 

实际上,在训练的时候,反向过程的x0已知,因此反向过程也是一个确定的过程。

贝叶斯公式q(xt1|xt)=q(xt|xt1)q(xt1)q(xt)

在推理的时候q(xt1)q(xt)未知,但是在训练的时候,q(xt1|x0)q(xt|x0)已知,因此:

q(xt1|xt,x0)=q(xt|xt1,x0)q(xt1|x0)q(xt|x0)

因为每个分布都是高斯分布,即:

q(xt|xt1)=N(xt;1βtxt1,βtI)

q(xt|x0)=N(xt;αt¯x0,(1αt¯)I)

q(xt1|x0)=N(xt1;αt1¯x0,(1αt1¯)I)

推理得到:

 

 

因此DDPM的前向和反向过程如下:

前向扩散:q(xt|xt1)=N(xt;1βtxt1,βtI)

反向生成:q(xt1|xt,x0)=N(xt;1αt(xt1αt1αt¯εt),βt1αt1¯1αt¯I)

这里只需要通过模型预测εt即可。

这里预测的高斯噪声εt只是均值μ里面的一部分,所以在生成的时候,还需要加噪一个额外的高斯噪声, 这样才能使得q(xt1|xt)符合高斯噪声。

 

DDPM训练优化目标

和所有的生成式模型一样,DDPM就是求模型的最大对数似然。

 因为扩散过程的如下:

Pθ(x0)=x1:xTp(xT)pθ(xT1|xT)...pθ(xt1|xt)...pθ(x0|x1)dx1:xT

因此,由Jensen不等式f(E[X])E[f(X)],可得:

logPθ(x0)=logpθ(x0:T)dx1:T=logpθ(x0:T)q(x1:T|x0)q(x1:T|x0)dx1:Tq(x1:T|x0)logpθ(x0:T)q(x1:T|x0)dx1:T=Eq(x1:T|x0)[logpθ(x0:T)q(x1:T|x0)]=Eq(x1:T|x0)[logp(xT)+t1logpθ(xt1|xt)q(xt|xt1)]

因此扩散模型就是最大化logPθ(x0),即损失函数为最小化负对数似然,即:

Eq(x1:T|x0)[logpθ(x0:T)q(x1:T|x0)]

经过如下推导:

 其中的三个分量分别为LTLt1,L_{0},如下所示。

 

对于LT而言,其含义为前向加噪的终点和模型推理的时候的起点高斯噪声尽可能接近。即xt=αt¯x0+1αt¯εε尽可能接近。因为在超参数设置的时候,αt¯在t=T时趋近于0。因此不需要考虑LT

对于L0而言,其含义为x1x0尽可能接近,这一项也可以通过设置超参数实现,因此这一项也不考虑。

所以,只考虑Lt1,即:

 最终就是训练一个去噪模型。

最终的算法:

 DDPM代码在DDPM生成人脸代码一节。

posted @   指间的执着  阅读(40)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
点击右上角即可分享
微信分享提示