扩散模型初探

扩散模型的推导

主要是根据以下网址学习diffusion的数学形式:网址

首先使用q表示前向扩散过程,使用p表示逆向过程。

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

βt较小的时候,逆向过程也可以认为是一个高斯分布:

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

img

前向添加噪声的过程是一个马尔科夫链,t时刻添加噪声的图像只和t1时刻有关。
αt=1βt,α¯t=i=1tαi:

在前向过程中添加高斯噪声:

xt=αtxt1+1αtϵt1=αtαt1xt2+1αtαt1ϵ¯t2==α¯tx0+1α¯tϵq(xt|x0)=N(xt;α¯tx0,(1α¯t)I)

我们需要根据前向过程求得逆向过程的分布情况,即求得如下的分布情况(我们已经根据一些前置知识知道它是正态分布,所以只用求取如下的参数):

q(xt1|xt,x0)=N(xt1;μ(xt,x0)~,β~tI)

根据贝叶斯公式:

q(xt1|xt,x0)=q(xt|xt1,x0)q(xt1|x0)q(xt|x0)exp(12((xtαtxt1)2βt+(xt1α¯t1x0)21α¯t1(xtα¯tx0)21α¯t))=exp(12(xt22αtxtxt1+αtxt12βt+xt122α¯t1x0xt1+α¯t1x021α¯t1(xtα¯tx0)21α¯t))=exp(12((αtβt+11α¯t1)xt12(2αtβtxt+2αt11α¯t1x0)xt1+C(xt,x0))

根据正太分布的公式:

f(x)=1σ2πe12(xμσ)2=1σ2πexp(12(x22μx+μ2σ2))

从而可以求解出β~tμ~(xt,x0)

β~t=1/(αtβt+11α¯t1)=1/(αtα¯t+βtβt(1α¯t1))=1α¯t11α¯tβtμ~t(xt,x0)=(αtβtxt+α¯t11α¯t1x0)/(αtβt+11α¯t1)=(αtβtxt+α¯t11α¯t1x0)1α¯t11α¯tβt=αt(1α¯t1)1α¯txt+α¯t1βt1α¯tx0

根据上述\boldx0,\boldxt关系,将μ~(xt,x0)表示:

μ~t=αt(1α¯t1)1α¯txt+α¯t1βt1α¯t1α¯t(xt1α¯tϵt)=1αt(xt1αt1α¯tϵt)

扩散模型现在需要的就是通过一个网络来预测μ~(xt,x0),如果我们得到了很好的μ~(xt,x0)参数,那么我们可以能够得到逆向采样过程的分布,通过不断地进行采样,就可以生成逆向采样过程的图像了。
我们需要设计网络来预测,那么我们就需要设计loss函数来进行优化。

首先,我们需要生成地图像分布要和真实图像一致,采用最大似然估计,这个地方的推理和VAE是一致的。

logpθ(x0)logpθ(x0)+DKL(q(x1:T|x0)pθ(x1:T|x0))=logpθ(x0)+Ex1:Tq(x1:T|x0)[logq(x1:T|x0)pθ(x0:T)/pθ(x0)]=logpθ(x0)+Eq[logq(x1:T|x0)pθ(x0:T)+logpθ(x0)]=Eq[logq(x1:T|x0)pθ(x0:T)]

那么我们就将对于图像的分布规约到了对于逆向过程去估计前向过程的分布。这一步就是VAE的LVLB

LVLB=Eq(x0:T)[logq(x1:T|x0)pθ(x0:T)]Eq(x0)logpθ(x0)

但是上述虽然规约到了逆向过程,但是仍然不是方便计算的表达式,我们需要进一步的归约到可以算的KL散度中:

LVLB=Eq(x0:T)[logq(x1:T|x0)pθ(x0:T)]=Eq[logt=1Tq(xt|xt1)pθ(xT)t=1Tpθ(xt1|xt)]=Eq[logpθ(xT)+t=1Tlogq(xt|xt1)pθ(xt1|xt)]=Eq[logpθ(xT)+t=2Tlogq(xt|xt1)pθ(xt1|xt)+logq(x1|x0)pθ(x0|x1)]=Eq[logpθ(xT)+t=2Tlog(q(xt1|xt,x0)pθ(xt1|xt)q(xt|x0)q(xt1|x0))+logq(x1|x0)pθ(x0|x1)]=Eq[logpθ(xT)+t=2Tlogq(xt1|xt,x0)pθ(xt1|xt)+t=2Tlogq(xt|x0)q(xt1|x0)+logq(x1|x0)pθ(x0|x1)]=Eq[logpθ(xT)+t=2Tlogq(xt1|xt,x0)pθ(xt1|xt)+logq(xT|x0)q(x1|x0)+logq(x1|x0)pθ(x0|x1)]=Eq[logq(xT|x0)pθ(xT)+t=2Tlogq(xt1|xt,x0)pθ(xt1|xt)logpθ(x0|x1)]=Eq[DKL(q(xT|x0)pθ(xT))LT+t=2TDKL(q(xt1|xt,x0)pθ(xt1|xt))Lt1logpθ(x0|x1)L0]

只有中间一项是在训练过程中是变量,因此在优化过程中考虑中间一项即可,即优化这两个分布的KL散度。
我们设逆向分布为:

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

具有两个参数μθ(xt,t),Σθ(xt,t).
我们需要预测这两个变量来拟合分布。在论文中采用固定的Σθ(xt,t)才能取得比较好的结果。
在对μθ(xt,t)进行预测的时候仍然具有两种方法。

  • 一种是直接预测μθ(xt,t),

  • 另一种是根据之前推导出的相关公式:$$\begin{aligned}
    \boldsymbol{\mu}_\theta(\mathbf{x}_t,t)& =\color{red}{\frac1{\sqrt{\alpha_t}}\left(\mathrm{x}t-\frac{1-\alpha_t}{\sqrt{1-\bar{\alpha}t}}\boldsymbol{\epsilon}\theta(\mathrm{x}t,t)\right)} \
    \mathrm{Thus~}\mathbf{x}
    & =\mathcal{N}(\mathbf{x}
    ;\frac1{\sqrt{\alpha_t}}\Big(\mathbf{x}_t-\frac{1-\alpha_t}{\sqrt{1-\bar{\alpha}t}}\boldsymbol{\epsilon}\theta(\mathbf{x}t,t)\Big),\boldsymbol{\Sigma}\theta(\mathbf{x}_t,t))
    \end{aligned}$$
    可以直接预测ϵθ(xt,t),然后根据上述公式计算μθ(xt,t)

如果对ϵt进行预测,可以得到下述的更新函数:

Lt=Ex0,ϵ[12Σθ(xt,t)22μ~t(xt,x0)μθ(xt,t)2]=Ex0,ϵ[12Σθ221αt(xt1αt1α¯tϵt)1αt(xt1αt1α¯tϵθ(xt,t))2]=Ex0,ϵ[(1αt)22αt(1α¯t)Σθ22ϵtϵθ(xt,t)2]=Ex0,ϵ[(1αt)22αt(1α¯t)Σθ22ϵtϵθ(α¯tx0+1α¯tϵt,t)2]

如果忽略掉前面关于t的权重项,可以得到(忽略之后的实验效果更好):

Ltsimple=Et[1,T],x0,ϵt[ϵtϵθ(xt,t)2]=Et[1,T],x0,ϵt[ϵtϵθ(α¯tx0+1α¯tϵt,t)2]

img

posted @   chenfengshijie  阅读(71)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
点击右上角即可分享
微信分享提示