Skip to content

离散扩散模型

离散变量的概率分布

Cat(x,p)表示离散随机变量x服从以向量p为概率参数的类别分布,即离散随机变量x取某个类别值的概率和p有关,例如:

有离散随机变量x,x[1,2,3,4]四个类别,取某个类别的概率是p=[0.25,0.25,0.25,0.25],这里p是均匀分布,也就是x取类别1、2、3、4的概率都是0.25

注意到,随机变量x只能取有限个离散值(类别索引),不能取连续值,且p的概率和为1,每个类别的概率是互斥的。

离散扩散

离散情况下,对于有K个类别的类别的标量离散随机变量xt,xt1[1,K],前向转移概率可以表示成矩阵[Qt]i,j=q(xt=j|xt1=i), 其中矩阵中的每一个元素Qi,j代表从状态 i到状态j的概率。

Qt=[x0,0x0,1x0,Kx1,0x1,1x1,KxK,0xK,1xK,K]

例如,矩阵的第一行表示xt1=0类别0时,xt属于各类别的概率[x0,0,x0,1,,x0,K],这时所有概率值相加必须为1

用条件概率q(xt|xt1)表示xt1已知的情况下,xt的概率分布:

q(xt|xt1)=Cat(xt;p=xt1Qt)

此时的xt1是独热编码向量[0,0,1,,0],第i个类别索引是1,其余为0,那么p的取值就是转移矩阵的第i行:

p=[0,0,1,,0]×[x0,0x0,1x0,Kx1,0x1,1x1,KxK,0xK,1xK,K]=[xi,0,xi,1,,xi,K]

这样q(xt|xt1)就描述了此时的xt所属的类别概率。

一步加噪

和连续扩散一样,在前向加噪过程中需要根据选择加噪的时间步t,从初始值x0一步得到加噪后样本q(xt|x0),因为离散扩散的前向过程满足马尔可夫性,即xt仅依赖上一步的xt1,与更早的状态无关,即:

q(xt|x0)=i=1tq(xi|xi1)=q(xt|xt1)q(xt1|xt2)q(x1|x0)

如果用转移矩阵的形式表示,则q(x1|x0)为:

q(x1|x0)=Cat(x1;p1=x0Q1)

条件概率$q(x_2 | x_1) $可以转换为:

q(x2|x1)=Cat(x2;p2=x1Q2)=Cat(x2;p2=x0Q1Q2)

推广到第xt步:

q(xt|x0)=Cat(xt;p=x0Qt),Qt=Q1Q2Qt

公式描述了原始样本x0t个累计概率转移矩阵相乘,得到加噪样本xt,它将作为输入模型的数据,需要模型根据含噪样本预测噪声/xt1的分布。

反向去噪

根据贝叶斯定理,可以得到已知当前含噪样本xt和初始样本x0时,前一步样本xt1的概率分布:

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

离散扩散的前向过程满足马尔可夫性:xt仅依赖上一步的xt1,与更早的x0无关,即:q(xt|xt1,x0)=q(xt|xt1),这式公式可以变成:

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

把前面得出的公式代入分子分母中得到,分母项:q(xt|x0)=Cat(xt;p=x0Qt);分子第二项:q(xt1|x0)=Cat(xt1;p=x0Qt1)

但是在分子第一项中q(xt|xt1)xt1是未知项,xt是已知项,这里不能用单步转移公式代换。不过,此式描述t1t的转移概率,也就是xt1到已知状态xt的概率分布,QtT的第k行等价于Qt的第k列,也就是q(xt|xt1)=xtQtT

最终把三个式子带入分子分母,得到:

q(xt1|xt,x0)=Cat(xt1;p=xtQtTx0Qt1x0QtxtT)