Diffusion-LM Improves Controllable Text Generation
原文链接:Diffusion-LM Improves Controllable Text Generation
他人博客:
这可能会是我最像技术博客的一篇博客。
是一些下周组会要讲解的内容,但是自己其实对此也知之甚少,讲解前乃至到今天已经很紧张了,写一篇博客来明确一下自己的脉络。(顺便偷偷吐槽,扩散模型是非常数学的模型,但是自己的数学又很不行,感觉是在最紧张的时候给自己挖了一个最深的坑)
如果想说起Diffusion Model,我们要从所有的生成模型说起。
生成模型
目标
生成模型的目标是,给定训练数据,希望能获得与训练数据相同或者类似的新数据样本。举个栗子的话就是,在训练集当中给出一些🐎的照片,我们希望模型能够学习🐎的样子,从而产生看起来很像🐎的图像。(当然是不包含在训练集当中的)
从生成模型的目标当中我们可以很容易发现,我们要得到的是一个概率模型,因为每次生成模型要给出不同的🐎的图像,而不能每次都产生同一个图像。我们将产生的一系列图像(当然也不仅仅限于图像,文本等各个方面生成模型都有很广泛的应用)的概率分布记作
常见的生成模型还是有很多的:GAN,VAE,Flow-based models(流模型,用的很少以至于都没听说过),Diffusion model.(扩散模型)
隐变量
对于许多许多不同的模态(图像,文本,音频等等),我们可以将可以观察到的真实的数据分布视为由相关的看不见的隐变量表示或生成,一般记作
看的博客/教程中举了一个例子,蝴蝶的颜色是由更细微的鳞片所标识出来的,我们希望能够通过颜色来反向推出鳞片的状态,这里鳞片大概就是
的意思。
VAE(Auto-encoding Variational Bayes)
讲到diffusion model,也就是扩散模型,我们很难不提到各种生成模型,而生成模型的老祖宗貌似就是AE模型,我们从老祖宗的儿子VAE开始说起。
Intuition
我们首先给定变量
我们假设
可以看到,我们想追求的目标是根据
还没写完,先写后面一点点的(因为发现换了个方式推导好像和VAE关系又小了那么一点点)
Diffusion Model
我们前面已经提到,Diffusion Model是一个生成模型,其目的是产生与训练数据类似的真实分布。对于扩散模型,其分为扩散过程和还原过程。
Model Process
模型的整体流程大概如上所示,正常的diffusion过程以及反向的reverse过程。
在训练过程当中,从数据集当中拿出真实的图片,在去噪的过程当中衡量去噪后的图片和原图的差距。
这里可以使用机器学习当中的
在重建过程当中,从高斯分布当中采样很多的噪声图,通过已经训练好的training phase的reverse阶段,来得到真实的图像显示。
Diffusion Phase
如前文所说明的,扩散过程是向原图像当中逐步添加高斯噪声的过程,我们可以将整个流程表现如下图所示:
单步扩散
我们所关注的是每一步逐渐添加高斯噪声的过程,给出每一步添加高斯噪声的公式:
在添加高斯噪声的过程当中,每次向其中添加的高斯噪声的比例不同,由上式可得其由
而且,对于整个的扩散步数
因此这里,在diffusion的过程当中,我们
多步扩散
我们在上节当中给出了每一步添加噪声的公式(1):
有了一步扩散的公式,我们自然会想到,如果我们可以求得从
下面的内容包含大量的数学公式。
我们首先做一步换元,用
我们随后将式(4)代入式(3)可得:
观察式(5),我们可以知道,
由于高斯分布的可加性,我们可以很容易得到,后两项的和其也是均值为0的高斯分布:
观察从式(3)到式(6)的过程,我们由此可以递归地写出
至此,我们得到了从
Reverse Phase
在diffusion的过程当中,我们可以得到从
在式(8)引领下,我们可以给出这样的训练过程:
我们在这里首先由采样的噪声
从直觉上来讲,或者说显而易见的是,我们这样的训练过程得到的是一步reverse到
因此在这里,从后到前的,我们希望由第
ps:这里给自己标注一点,以防止自己晕了,这里UNet所预测出的
根据上面的ps,我们发现,其实
而对于
而转换到这里,这些分布都是我们已知的,接下来的内容仍然包含很多数学推导。
ps:我们知道一个元素本身就等同于知道他的分布,因为他们都是从一个高斯分布当中采样得到的(当然,根据重参数化技巧,可以转换为从一个标准高斯分布当中采样)
ps:这里对于后三个式子,我个人认为写的不是很符合标准,但是大致的意思表示:左边的分布就是右边的高斯分布,两边的均值和方差完全相同(我只是对
而我们此时想将这些高斯分布组合在一起,首先给出高斯分布的表达式(正态分布):
因此式(10)正比于下式,由于我们所求的是
我们将
对于式(11)的
因此,我们对照正态分布的公式,可以写出这个分布的均值和方差如下所示:
而在此之中,我们同样写出
然后,我们对
对于式(12)(13),我们所期望的结果是获得仅仅和
算到这里,我们需要回顾一下初心,我们想求得的是
而根据重采样技术,我们想要求得的
而在其中,我们有:
经过比较冗杂的推导,我们得到了形如(15)这样的最终目标。最终我们来表示一下reverse的完整过程。
然后我们给出Diffusion Model当中原论文的算法部分,并且可以把它和我们的公式当中的每一项一一对应起来:
Diffusion Language Model
(先暂时归纳到这里,这个部分正在写)
(上面那个括号写于起码半个月前,没想到懒狗如我到现在具体数学课上太无聊才能继续写论文的内容)
首先要说明的是,时至今日,我仍然看不太懂这个论文的代码。
从连续域到离散域
如我们前文所讲的Diffusion Model,我们能够看到,通俗来讲,我们的扩散模型实际上是在一个向量当中逐步添加高斯噪声,最终得到一个趋于完全高斯噪声的向量。而在解码过程当中,我们则是尝试对一个高斯噪声逐步进行去噪,最终产生我们想要的向量(当然这里,无论他是什么样的形式,一个图像或是一个文本)。而这些过程实际上是针对连续域而言:我们可以很自然的将图像视作一个向量,但是其实文本的内容是离散的。
因此我们想要将Diffusion Model应用于文本生成领域,我们需要能够联系起离散域和连续域的工具。文中给出的方法是定义Embedding和Rounding方法,来实现从离散域到连续域和从连续域到离散域之间的转换。
End to End Training
为了将连续扩散模型应用于离散文本,我们定义了一个嵌入函数
在这里,作者貌似尝试使用预训练的Embedding或者随机的高斯分布Embedding,但是发现没有重新End2End训练出来效果要好。
因此,在将扩散模型应用在离散文本当中时,我们添加了一个正向的马尔可夫变换和一个反向的rounding方法。其中正向的Embedding被定义为
Reducing Rounding Error
我们前文给出了Embedding和Rounding方法,其中,对于Rounding过程,我们想要的是将向量
首先给出的方法的原理是这样的,由于我们在目标函数当中对于
到
来迫使我们的模型直接去预测
重新制定目标函数确实有利于模型的训练,但是论文也给出了一个“clamping trick”。在标准的解码过程中,我们实际上是从
总得来说,文本的内容就是在每个反向重建的过程当中应用clamping(夹紧)技巧,使得我们的向量逼近于某一个词向量。根据我们的直觉,其实在
Contollable Text Generation
作者受到前文的贝叶斯公式的启发,其应用了类似贝叶斯公式的方法。作者设计了一个即插即用的方法来完成可控的文本生成,对于解码过程当中的每一步,我们将文本生成当中“可控”的部分看作
我们可以得到梯度下降的公式如下所示:
而对于以上等式右边的两个加数,前者由Diffusion-LM参数化,后者由神经网络分类器参数化,因此两者都是可微的。
类似于图像生成当中的工作,我们在扩散隐变量上训练分类器,并且在隐空间当中应用梯度更新的技巧,从而来引导控制生成。
为了提升文本的质量以及加快解码速度(确实还是慢的不行),我们引入了关键的修改:流畅性正则化以及多重梯度步骤。
Fluency Regularization
虽然了解甚少,但是看起来,它是将梯度下降的目标函数更新为
文中还提到这似乎是一种流行的文本生成技术。
Multiple Gradient Steps
为了提升控制质量,作者为每个扩散步骤使用多个梯度步骤,并且减少了扩散的总步骤。
Minimum Bayes Risk Decoding
应用了一个最小贝叶斯风险解码的trick,通过一个动态函数(其实是BLEU),希望解码出的句子尽可能地相似。(虽然不懂,但是好像懂了)