Austin J., Johnson D. D., Ho J., Tarlow D. and van den Berg R. Structured denoising diffusion models in discrete state-spaces. In Advances in Neural Information Processing Systems (NIPS), 2021.
概
DPM 在离散空间上的探讨.
符号说明
- forward process: q(x1:T|x0)=∏Tt=1q(xt|xt−1),x0∼q(x0);
- reverse process: pθ(x0:T)=p(xT)∏Tt=1pθ(xt−1|xt).
- 这里向量 x 都表示行向量.
Motivation
-
DDPM 已经在图像生成领域取得了巨大成功, 它分为上述的前向和后向过程, 并通过如下损失进行优化:
Lvb=Eq(x0)[DKL[q(xT|x0∥p(xT))]LT+∑Tt=2Eq(xt|x0)[DKL[q(xt−1|xt,x0)∥pθ(xt−1|xt)]]Lt−1−Eq(x1|x0)[logpθ(x0|x1)].](1)
-
之前的扩散模型主要研究连续空间的情形 (故而通常采用比较好采样的高斯分布), 那么如何把 DPM 推广到离散空间中呢.
-
首先, 合适的前向扩散过程需要满足:
- q(xt|x0) 对任意的时间戳 t 的采样都是容易的;
- q(xt−1|xt,x0) 最好是有容易求解的显示表达, 这样有利于求解 Lt−1.
基于转移概率矩阵的 D3PM
-
假设离散空间中有 K 个元素, 记为 1,2,…,K, 则对于任意的时间戳 t 的状态 xt 都可以取遍这些元素. 我们知道, DPM 通常假设前向以及反向过程都是满足马氏性的, 而马氏性通常可以用转移概率矩阵 Q 来描述.
-
令 Qt∈RK×K, [Qt]ij=q(xt=j|xt−1=i), 则
q(xt=j|xt−1=i)=[0,0,⋯,0i−1,1,0,⋯,0]Qt[0,0,⋯,0j−1,1,0,⋯,0]T.
-
不妨假设 xt∈R1×K 为一 one-hot 向量 (注意和之前的定义区分), 即 [0,0,⋯,0j−1,1,0,⋯,0], 则,
q(xt|xt−1)=xt−1QtxTt∼Cat(xt;p=xt−1Qt).
-
进而注意到
q(xt|x0)=∑x1:t−1∏tk=1q(xk|xk=1)=∑x1:t−1∏tk=1xk−1QkxTk=∑x1:t−1x0Q1xT1⋯xk−1QkxTk⋯xt−1QtxTt=x0Q1(∑x1xT1x1)⋯(∑xk−1xTk−1xk−1)Qk(∑xkxTkxk)⋯(∑xt−1xTt−1xt−1)QtxTt=x0Q1IQ2⋯IQkI⋯IQtxTt=x0Q1Q2⋯Qk⋯Qt¯QtxTt=x0¯QtxTt∼Cat(xt;p=x0¯Qt).
-
以及
q(xt−1|xt,x0)=q(xt|xt−1,x0)q(xt−1|x0)q(xt|x0)=q(xt|xt−1)q(xt−1|x0)q(xt|x0)=xt−1QtxTt⋅x0¯Qt−1xTt−1x0¯QtxTt=(xtQTtxTt−1)⋅(x0¯Qt−1xTt−1)x0¯QtxTt=(xtQTt)⊙(x0¯Qt−1)(xTt−1)x0¯QtxTt←(?)∼Cat(xt−1;p=(xtQTt)⊙(x0¯Qt−1)x0¯QtxTt).
需要注意的是, (?) 处成立完全是因为 xt 是 one-hot 的向量, 否则一般情况下是不成立的.
-
现在, 我们以及搭建好了基于转移概率矩阵的一个整体框架, 下面我们就需要讨论如何设计 Qt 使得 ¯Qt 是易求得. 此外, Qt 的行和应当为 1, 且 ¯Qt,t→+∞ 应当是收敛的.
转移概率矩阵的设计
接下来, 我们具体介绍几种设计.
-
构造:
[Qt]ij={1−K−1Kβt if j=i,1Kβt if j≠i.
-
用人话说就是, 知道了上一个状态 xt−1, xt 仍为 xt−1 的概率为 1−K−1Kβt, 否则它等概率地成为其它状态.
-
矩阵表示为
Qt=(1−βt)I+βt1T1/K.
-
容易发现:
¯Qt=QtQt−1⋯Q1=t∏k=1(1−βk)I+(1−t∏k=1(1−βk))1T1/K.
Diffusion with an absorbing state
-
构造
[Qt]ij=⎧⎪⎨⎪⎩1 if j=i=m1−βt if j=i≠m,βt if j=m,i≠m.
这里 m 是一个特殊的吸收态, 比如语言模型里的 [mask].
-
用人话说就是,
- 如果 xt−1 已经是 m 了, 那么 xt 必为 m;
- 如果 xt−1 不为 m, 则 xt 以 βt 的概率成为 m, 否则仍为 xt−1.
-
矩阵表示为
Qt=(1−βt)I+βt1Tem,
这里 em 表示第 m 个元素为 1, 其余均为 0 的行向量.
-
显然, 这不是一个 double stochastic 的转移矩阵.
-
容易发现:
¯Qt=QtQt−1⋯Q1=t∏k=1(1−βk)I+(1−t∏k=1(1−βk))1Tem.
注: 作者还介绍了如何把高斯离散化, 以及利用 embedding 的相似度来刻画转移矩阵的方法, 这里不作介绍了.
注: 作者对于 noise schedule 的一些见解非常有趣, 但是说实话, 我只能看懂一半, 写在这里就不懂装懂了.
代码
[official]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix