#! https://zhuanlan.zhihu.com/p/534045394

#! https://www.zhihu.com/question/536012286/answer/2533586758

9013-能量视角下的降噪扩散概率模型 DDPM Denoising Diffusion Probabilistic Model

CATSMILE-9013

前言

  • 目标: 聊一聊DDPM的有趣之处

  • 背景与动机:

  • 结论:

  • 备注:

    • Song2021的neuralODE比较有意思,有点像绝对零度的反向扩散. 不过既然反向扩散都不给温度了,那正向扩散是不是也不用加温度呢?答案是不行,反向扩散之所以可以零温,是因为从祖先采样的角度是可解的.

    • Song2021的eq7关于score-matching非常不显然…但是appendix居然也没解释.初看起来是用了一次Jensen不等式找了一个上界. 翻了半天发现是从Vicent2011里面引出的Denoising Score matching objective,而且利用的是DSM和ESM的在一阶导上严格相等,看来fisher divergence也是有很多良好的性质.Vincent2011对于SM是一个挺好的ref. 这个eq7可以说是DSM的基石了,巧妙地把一个难以估测的梯度上的FD替换成另一个FD的期望,而且对于任意的条件分布都成立,真是惊掉下巴的结果!

  • 关键词:

  • 展望方向:

  • 相关篇目

  • CHANGLOG:

和生成模型的对比

http://cs231n.stanford.edu/slides/2017/cs231n_2017_lecture13.pdf

DDPM一开始应该算是implicit density的模型,后续scoreODE的范式下可以认为density是可以估算的. 从建模方法论上,属于KL-Variational变分模型和Energy-based Model能量模型的交叉点.

如果放在能量模型的视角下和GAN对比,DDPM和ScoreSDE的里程碑意义可能在于成功地展示了梯度对齐方法(score matching)是有工程竞争力的建模方法,接下来可能有很多EBM会选择用一阶导对齐,或者Song提到的fisher divergence,替代KL divergence作为EBM里基本的损失函数,意味着EBM将迎来GAN之后的又一个新范式。

EBM的痛点一直在于配分函数无法估算,造成连梯度都没法估算,GAN通过变分采样迂回完成了unnormalized EBM的梯度估算,具有了minimax形式。RBM用contrasted divergence估算了kl的梯度,或者后续的对比学习,也是ebm里面尝试避免配分函数计算的一些技巧。

但是Score Matching这个流派,直接绕过了配分函数的估算这个问题,说咱不扯那些没用的,我对全空间上的指数积分没兴趣,我只对对数密度函数的形状感兴趣。随你怎么平移我的能量,我的一阶导总是不受影响的吧?好的,那我就直接用L2损失拟合一阶导就完事了。地图在手,还怕找不到极值吗?也就是说,解决一个困难问题的最好办法,就是换一个问题(学术日常doge),让原来的问题(配分函数)不再是问题(一阶导消去了配分函数)。玩笑归玩笑,这也是一个通用的思路,就是把表面问题的根源找到,从更深层次上改变问题的细化方法,从而解决在表面上看似无解的问题。

于是在SM视角下,配分函数求不出,压根不再是个问题。而且由于梯度的信息量远大于能量函数这个标量,可以预见SM很有可能取代KL成为复杂EBM的通用拟合目标。

如果说Ho2020还是从KL上界的角度去构造ELBO,Song2021则是直接指出这就是score matching的一种特殊形式。虽然DSM本身早在2011年就提出了,但是很多技术上的细节都是最近这几篇工作解决的。SM的好处多多,具体大家可以去看Song2021消化看看,有问题评论区见。

GAN对能量函数的处理

Bengio2019把GAN理解成了一个用能量函数对数据建模的近似方法,用非归一化的能量 计算梯度的时候,有经典的正负相分解

\[\begin{split}\begin{align} q_m(x) &= {\exp U_m(x) \over \int_x \exp U_m(x) }\\ \log q_m(x) &= U_m(x) - \log \int_x \exp U_m(x) \\ L_1(m) &= -D_{KL}(p_{data}(x)||q_m(x))\\ &= c + E_{p_{data}(x)}[\log q_m(x)] \\ \nabla_m L_1(m) &= E_{p_{data}(x)}[\nabla_m U_m(x)-\nabla_m \log\int_x\exp U_m(x)]\\ &= E_{p_{data}(x)}[\nabla_m U_m(x)-\int_x{\exp U_m(x)\over \int_x\exp U_m(x)}\nabla_m U_m(x)] \\ &= E_{p_{data}(x)}[\nabla_m U_m(x)-E_{q_m(x)}[\nabla_m U_m(x)]] \\ &= E_{p_{data}(x)}[\nabla_m U_m(x)]-E_{q_m(x)}[\nabla_m U_m(x)] \\ \end{align}\end{split}\]

其中负相来自于配分函数,也就是要求低能区域尽量少,正相要求数据区域尽量低能. 但负相由于 \(q_m(x)\) 的采样过于低效,而无法可靠估算. 于是在摸索过程中,Ian Goodfellow借鉴自我博弈的思想提出了生成器-判别器博弈, 后续又有WGAN改进, 反映在能量函数上就是用采样简单的生成器去近似判别器,也就是能量函数上的样本 \(q_m(x) \approx q_g(x)\),这就引出了第二个负损失函数,和L1是方向相反的,也就产生了 minimax冲突. L2的熵,可以通过InfoGAN中的自编码损失来构造下界,这里不展开了

\[\begin{split}\begin{align} L_2(m) &= -D_{KL}(q_g(x)||q_m(x))\\ &= E_{q_g(x)}[U_m(x) - Z_m] + H(q_g(x)) \end{align}\end{split}\]

让我们定义组合后的损失函数,我们发现L1和L2是L3的两个缩影.至此GAN的minimax博弈就已经定义清楚了,总体上是用了两次KL变分来构造了一个能量模型

\[\begin{split}\begin{align} L_3(m,g) &= E_{p_{data}(x)}[ U_m(x)]-E_{q_g(x)}[U_m(x)] -H(q_g(x)) \\ \nabla_m L_1(m,g) &\approx \nabla_m L_3(m,g)\\ \nabla_g L_2(m,g) &= -\nabla_g L_3(m,g)\\ \end{align}\end{split}\]

梯度对齐范式(Score Matching)对能量函数的处理

通过能量函数的梯度进行约束,SM直接对energy landscape形成了近似. 为了提高 建模灵活性, SM可以直接对梯度本身进行建模.

\[\begin{split}\begin{align} -D_{F}(p(x)||q_m(x)) &= E_{p(x)}[|| \nabla_x \log p(x) - \nabla_ x\log q_m(x) ||^2] \\ \nabla_x \log q_m(x) &\approx s_m(x) \\ -D_{F}(p(x)||s_m(x)) &= E_{p(x)}[|| \nabla_x \log p(x) - s_m(x) ||^2] \\ \end{align} \end{split}\]

神奇的事情在于,由于一阶导数的性质,这个范式对于能量上的配分函数是压根不敏感的. 只对相对概率敏感. 没有了配分函数,也就没有了负相,事情一下子变得简单了很多. Vicent2011 里总结了多种对这个SM目标进行转化的办法,包括ESM,ISM,DSM. 甚至

\[\begin{split}\begin{align} E_{p(x)}[|| \nabla_x \log Z p(x) - s_m(x) ||^2] &=E_{p(x)}[|| \nabla_x (\log Z + \log p(x)) - s_m(x) ||^2] \\ &=E_{p(x)}[|| \nabla_x \log p(x) - s_m(x) ||^2] \ \end{align} \end{split}\]

DDDPM (D3PM): 将DDPM联系到离散相空间的工作

这篇文章最有趣的点,是我找了半天才在legend里面发现他们用的是12层transformer

Johnson2021: 一个基于插入和删除的DDPM

这篇文章考虑了更加符合直觉的离散噪音,包括了插入,删除,变异操作,构造了一个能够自动消除拼写错误的DDPM.其中还借助了PFST(probabilistic finite state transducer)来简化reverse/forward的计算.架构上用了T5模型

Johnson2021: Beyond In-Place Corruption: Insertion and Deletion In Denoising Probabilistic Models. https://arxiv.org/abs/2107.07675

个人评价三

  1. latent表征问题解决之时,DDPM代表的SM就会彻底大火起来

  2. 最大的应用前景在于条件采样,但是不一定是最高效的办法。在高效模型出现之前,并且过参数化和大模型潮流未退去之前,ddpm应该还会流行一段时间。

  3. ddpm不指导网络架构,用cnn,transformer都可以。这个具有两面性,意味着ddpm到处都可以安上试试,但是同时其效果又会受制于网络架构。对于参数量小计算量小的模型,vae gan ar等等还是挺香的。

  4. 模型的出发点还是有一定意思和tricky的地方,严格热平衡后的denoising逆过程等价于简单抽样,但是网络结构又要求逆过程具有空间对称性。这会导致变分结果是既具有抽样特性,又具有空间对称的一个过程。这是机器学习经常出现的一个有意思的现象:最优近似可能并不是最优模型(退化成抽样),在先验参数空间内寻找最优近似才会找到有意思的模型。但是这同时意味着是否控制热平衡等超参数设置问题。

  5. 天生缺latent空间,这是硬伤。热平衡后的高斯分布不能算latent,半热不热的中间态倒有可能,但是也不能直接认为是抽象化的latent。

  6. GLIDE工作表明,DDPM是一种有效的多模态方法

总的来讲,ddpm是个有意思的方法,但是计算量太大,尽管有办法加速但是都会增加复杂度,如ScoreODE。如果目标是一个高效简洁的算法,ddpm可能不是最合适的工具。如果目标是一些有趣的理论和性质,ddpm可以作为学术方向深挖一下。

DDPM解决了什么问题?

DDPM一般认为被用来做高质量的采样/生成.在DDPM出现前,高质量采样SOTA主要被GAN垄断,但是GAN的训练牵扯到minmax博弈,比较玄学.从这个角度来说,DDPM提供了一个可以被 传统数学物理工具进一步研究,同时也可以用神经网络进行大数据近似的的生成框架.

但问题似乎只解决了一半,因为DDPM的框架里(好像)没有给隐变量预留位置,这意味着需要进一步适配,才能做条件采样.而实际应用中大部分都是条件采样(conditional sampling),而不是无条件采样(unconditional sampling)

DDPM的特点是denoisng和score-matching,最近最为出彩的应用应该要数GLIDE做的 条件图像生成. DDPM给人的感觉有一点虚空互博,可以看成是一个特殊的变分近似方法论吧, 和VAE,GAN一样,都是一个框架性质的东西,不过denoising和SM的成分更重一些,而且层级也更多,可以堆更多的参数

DDPM有什么优劣?

  • 优势

    • 生成模型结构明确地通过数据直接定义,限制了架构层的玄学成分比例.

  • 劣势/问题

    • 隐变量定义不明确,(目前)没有明确方法提取数据的编码. DDPM的高斯终末分布严格上 并不能称为一个隐变量latent,因为这个东西跟样本理论上是完全解耦的.信息到哪里去了是个问题,原则上都在score function这个梯度函数里.

    • 因为latent没有地方放,所以做条件采样有一定难度.从构造上,应当把不同latent 的数据做聚合,然后训练不同的DPM score function,不过在这个情境下如何共享参数是个问题.

    • 参数共享的方法是个问题,NCSN的做法比较糙,如果能把不同热噪音下的模型串起来,那就能够更好地限制模型的参数空间.

DDPM的爆火说明了什么?

DDPM给人一个很强的感觉,就是在拟合目标上还有很多做文章的空间.从ImageNet对Conditional Classifier的拟合,到BERT masked language model的自监督Transformer,再到CLIP的多模态联合分布,都在说明,数据和拟合目标,是有很大的创造和改进空间的. DDPM直接说明,从原始数据出发显式地构造一个采样过程,并用神经网络去做变分近似,是完全可行的.这跟KNN,KDE等非参数模型的思想一脉相承,区别在于DPM提出了一个需要被近似的reverse process,让神经网络有了拟合的目标.从这个角度讲,KNN和KDE啥的完全也可以对应一些把数据编码进神经网络的模式.

所以DDPM最为重要的意义之一,是重新强调了对于拟合目标的定义的重要性.而跟GAN的定义相比,DDPM给出的框架是一个简单的近似问题,而不像GAN需要用到minmax博弈更难分析. DDPM把score-matching重新提到了一个显学的地位,而score-matching和梯度法有着天然的联系.

随机微分方程(SDE)是不是很难?

SDE和ODE的区别,其实还是视角不同. 相空间上的SDE随机过程,在概率测度空间就转化为ODE.所以大家大可不必对于SDE的数学抱有恐惧感. Diffusion之所以有它现在的效果,并不是因为使用了SDE的数学工具,而是在于引入了关于虚拟时间(t),也可以认为是温度T的时变动力学,也就是把不同层级的动力学分开进行建模了,这跟simulated annealing是有点类似的,也因此NCSN一开始的采样被称为Annealed Langevin Dynamics. 这种动力学上的分解,在理念上解决的似乎是一个多步骤采样问题,在以前通常是要通过RL的采样框架来解决中间态的样本来源问题,而现在是通过explicit的扩散构造给出了中间态,不得不说肯定是加强了模型的稳定性. 这对于复杂采样给出了一种通用的构造方法,就是把采样看成是分层降噪过程.

不过SDE的应用,意味着做传统随机过程的大军有了一个进入机器学习的切入口了.

DDPM哪里来的?

diffusion model的脉络是融合了denoising模型中发现的score matching思想,在NCSN里解决了一些技术上的问题,后续又给模型找到了一个连续化的SDE形式(认祖归宗)。 但是其核心还是在于一个很容易invert的gaussian (de-)noising distribution。 我个人希望称之为 reverse diffusion model,因为严格意义上逆过程才是采样.

一些思想实验

这个模型最不直观的地方,就是从同一个gaussian里是否会采样出不同的图片。从编码解码角度上来讲,根据ref里diffusion后的条件概率来讲,经过diffusion编码过程的分布,在热平衡后,是完全丢失数据信息的。但是在微观角度上,invert这个分布所得到的后验又是可以求的,尽管其形式远比forward过程复杂因此只能采样近似。所以ddpm跟vae等模型一大差别就在于,完全没有从生成的角度出发对采样进行建模,而是从invert加噪过程的角度自然地定义一个生成模型。用苏剑林最近的表述就是,通过(拆楼)来定义(建楼)。

或者说,生成模型gm建模的原则是拟合从隐变量到数据的条件分布,作为这个过程的一部分常常引入隐变量上的后验的近似来完成模型的拼凑。在ddpm的框架里,生成模型是直接指定为特定编码模型的逆,通过编码模型的性质保证收敛到一个特定分布上。所以实际上ddpm在某种程度上完全是一个无额外参数的模型(non-parametric model),而实际模型中加入的参数是为了对这个npm做变分近似得到加速的效果。换句话说,forward diffusion和reverse diffusion已经完全由数据分布加以定义了,压根不需要更多的参数。但是实际计算起来又是linear in data size的,比knn还要糟糕的复杂度。

另一个问题是ddpm能否自然地学到combinatorical free variable。这个我猜测是可能的,因为已经进入到了unet的卷积先验里。

最后就是速度,原则上来讲这么多高斯噪音是效率很低的,所以把sde向ode转化的方向很有趣。不过我还没找到ode目前大家是怎么写的。ddpm把问题抽象成score matching了以后,完全可以用fisher information或者一阶导数的框架做无噪拟合。反正终末分布都是没数据信息的。这样的好处在于不用把latent分散到每次中间的采样去,搞得数据的表示非常地不compact,对于后续做编码,多模态,都不是很友好。

再多说一句,ddpm和gan不必是对立的,因为高斯L2噪音恰好是gan解决掉的问题之一。观察ddpm和gan解决高斯噪音的办法,会是一个有趣的对比视角。

同时,在逆向过程上,数据处于动力学的终末稳定状态,这和Hopfield Network的记忆原理是类似的

一个直观的视角是:diffusion model隐式建模了数据的层次性。试想在imagenet上做hierarchical clustering。dm相当于可以隐式地直接使用最优hclust的信息,来完成数据的生成。

从噪音中要数据? Data from noise?

Song 2021 有一句”creating data from noise is generative modeling”. 这句话值得思考,因为它并不显然.尽管VAE和GAN都采用了这种思路,但是同一个高斯latent在这些模型里的意义却并不相同.我个人认为DDPM的t=T分布确实是noise, 但是vae和gan里的latent分布并不是noise. 严格意义上 DDPM 确实 creating data from noise了,所以我认为应该说 “creating data from noise is DDPM”. DDPM只是generative modeling的一种模式.在本质上,”creating data from noise” 更多地是 “creating random valid data”, noise的意义只是产生随机性, 而不是结构. GM要做的是捕捉数据中的结构. 所以,”creating data from noise” 和”creating data from nothing”没有本质区别,而我更倾向于”creating data from nothing”这个表述.

其他素材

更新:主要的基础DDPM一般引用Ho2020(DDPM),然后SDE范式引Song2021(scoreSDE),这两篇文章的视角还是很不同的需要注意区分。条件生成的似乎目前还是各有各的说法,glide提出了两个不同的加条件的办法。风头超过GAN很容易理解,毕竟gan依赖的minimax博弈的框架本身都没有研究清楚很难做理论分析,所以偏理论的肯定乐于研究理论框架更简单的ddpm和sm咯。

其实,只要把vae里面的编码器换成高斯加噪,差不多就变成ddpm了,在这个意义上ddpm的拟合目标比vae还要简单,因为编码器已经都固定了不用拟合了。然后ddpm又有个很好的性质,就是可以堆无数层的神经网络。这种对参数的利用能力,应该是大模型比较看重的。但是弊端也很明显,就是压根没有隐变量。我个人觉得这个隐变量也只能在采样的过程中加进去,加到采样过程的参数化里面,搞个多层优化啥的,不过还没想好具体形式。现在直接用高斯采样逆过程,那就真是一个字:“糙”。

参考