生成式模型的潜力---分数模型

如今的生成式模型可以从一个噪声生成非常逼真的照片!

如下:都是通过最近的生成式模型生成出来的,并不是真实世界中的人脸!!但与真正的照片相差无几!

 另一个生成式模型的例子应用在自然语言处理上!!现在的自然语言处理领域中,很多模型为了取得最佳的效果,必须基于一个预训练好的语言模型!!这些语言模型本身同样也能生成非常好的语言文字样本!如一个网站,在这个网站中可以提供一句话的前景,会使用基于transformer的语言生成式模型来补充缺失单词

生成式模型怎么工作的?

一般的生成式模型都是从一个数据集中来训练出来的!!

这个数据集中有很多的数据样本!!!

这些数据样本都是从某个未知数据分布中独立同分布的采样出来的!!!

生成式模型就是一群概率分布的集合!!这个集合可以通过θ来确认某一个特殊的数据分布!!!

给定训练集,希望从这个数据分布的集合中找出一个最佳的数据分布!!!最佳的数据分布就是最佳的生成式模型!!

最佳的生成式模型所对应的分布,必须同我们的数据分布之间距离越近越好!!

在给定最佳的分布模型之后,可以从中继续不断的采样,来获得源源不断的新样本!!

在刚才的例子中,知道所谓的生成式模型本质上就是一个概率分布的表示!!!因而,通过不同种的表示概率分布的方式打上不同的类别,其中第一个类别就是Implicit models(隐式的生成式模型)!!!

Implicit models如何表示数据分布?

它的方法是我们从这个数据分布中采样的过程!如生成对抗式网络,GAN,就是典型的隐式生成式模型!!

首先获得一个噪声,然后将噪声输入生成器中,这个生成器是一个确定性的神经网络,可以把噪声映射到样本上(这里假设样本是一张照片!!)

从噪声生成样本的过程就是从数据分布中采样的过程!!所有从这个生成器中生成的样本,本身组成一个分布,通过表示生成样本的过程,我们就隐式的表示这个分布函数!!

隐式的生成式模型的优点:

  • 通常隐式的生成式模型不会对我们的生成器有什么结构上的限制!!所以可以选取非常有表示能力的神经网络来作为我们的生成器!!第二,其给出样本的质量通常比较优秀!!!

隐式的生成式模型的缺点:

   训练一个生成式模型比较困难,因为要用到对抗训练,对抗训练比较难以调整,同时不是很稳定!!

同时对于隐式生成式模型而言,没法计算它的似然函数,导致没法使用比较principled(根据规矩,有原则)的方法来比较不同隐式生成式模型的好坏!!

Explicit models如何表示数据分布?

显式生成式模型表示数据分布的方法是我们直接去表示这个分布所对应的概率密度函数,或概率函数本身!!!显式生成式模型非常常见!!!如:贝叶斯网络,马尔科夫随机场(MRF),自回归模型,规划流模型!!

显式的生成式模型的优点:

可以很方便的计算似然函数!!可以用似然函数训练我们的显式模型!同时使用似然函数的大小比较不同生成式模型的好坏

显式的生成式模型的缺点:

我们模型本身必须是可以归一化([0-1])的,同时很快的计算似然函数,用似然函数计算,比较似然函数好坏!!模型本身也必须有结构上的限制,来保证我们可以很快的计算似然函数!!这个限制本身也制约了模型的表示能力!!

全新的生成式模型

score(积分函数)

本文讲述一个全新的生成式模型,基于全新的对分布的表示方法!!个表示方法是基于对概率分布函数的导数求梯度!!

假设概率密度函数是p(x),我们的生成式模型并不表示p(x),与之相反,我们要表示log p(x)的导数,这个log p(x)的导数,有个名词叫做score(积分函数)!!

如下展示了概率密度函数和积分函数!!!例子是两个高斯加起来的分布

下图颜色表示概率密度函数,颜色越深表示概率密度函数的值

箭头来表示积分函数,因为积分函数本身是一个梯度,一个向量场!!可以从下图看出来我们的积分函数本质上是一个梯度,它们指向密度函数增长最快的方向!!

给定概率密度函数之后,用求导的方式很快得到积分函数所对应的向量场!!同理可得,给定积分函数的向量场,我们也能通过求积分的形式得到概率密度本身!!从这个角度来看,概率密度函数和积分函数本质上是同一个概率分布的不同的两种表示方式!!当我们的概率分布是可微的情况下,这两个是等价的!!

既然有了显式模型,有了对于概率密度函数的模型,为什么还要考虑积分函数呢?积分函数相比概率密度的显式模型的优势在哪?

答:首先考虑概率密度函数模型,因为概率密度函数永远是归一化的,也就是说曲线下方的积分值永远为1,不管怎么选取概率密度函数,模型的结构或参数都无法改变这一点。这一归一化的要求,也制约了概率密度函数模型所能够采取的结构的灵活性

  与之相比,积分函数本身是概率密度函数的对数的导数,它没有归一化的要求。积分函数模型不受归一化的制约,可以选取比较灵活的模型结构来表示积分函数

如,考虑energy-based model(EBM)能量模型,能量模型是一种比较经典的显式模型。首先有一个比较自由的神经网络和模型结构,来表示一个能量函数fθ(x),能量函数可正可负,可惜我们得到一个永远为正的概率密度函数需要先做它的指数,然后对它做归一化,这个归一化函数称为Zθ.。这个归一化常数Zθ.很难计算的,尤其是当x是一个比较高维的数据,如图片,这种通常有几十万像素点和维度的情况下,算归一化常数是非常困难的!也就是说能量模型能够使用自由灵活的模型结构来表示一大类不同的概率分布,可是它不是很容易的去计算似然函数,因为我们并不知道如何去计算归一化常数

相比之下,如果我们做能量函数的积分函数,很容易发现积分函数本身是不依赖于这个归一化常数的,也就是说知道了这个能量函数,我们很快的算出积分函数本身。这也表示 ,对于积分函数模型而言,它并不受限于需要有一个可以计算的归一化常数

score model(积分函数模型)

给定一个数据集,我们很容易的去估计这个数据集背后的概率密度函数。那么,对于积分函数而言,对于向量场,给定一个数据集,我们是否也可以估计它呢?

:从数学上来讲,我们有{x1,x2,...,xN}这些都是从一个未知的数据分布中独立同分布的采样出来的!然后根据这些独立同分布的样本,我们的目标是要去估计数据分布所对应的积分函数向量场

 为了实现这个目标,我们训练一个score model(积分函数模型),本质上是一个可训练的向量制函数!!θ是这个向量制函数模型的参数!!我们的目标是sθ与数据分布的对数的梯度,也就是数据分布积分函数的向量场之间的距离尽可能接近!!

为了实现这个目标,我们需要一个损失函数来判断两个向量场之间的距离,这里采用的损失函数叫做fisher divergence,它本质上是比较数据分布积分函数和积分函数模型之间的欧式距离的平方!然后在数据分布的样本上取平均的结果!!但是,fisher divergence损失函数本身不能直接计算,因为它依赖于未知的数据分布所对应的积分函数()!!!

score matching

为了解决这个问题有很多种方法,其中比较著名的方法叫做score matching!!它是通过分步积分的方法!!

把fisher divergence转换成如下的score matching目标。在score matching 的目标函数之中,是不依赖于数据分布的积分函数的(()!!!并且score matching目标函数本身可以简单用样本上的平均去估计!!

为了计算score matching 的目标函数,我们需要去计算积分函数模型的迹。这对于比较高维的数据或比较深的神经网络来言,都不是很容易计算的(not scalable)

迹的计算难度相当于对数据的维度计算,图片有成百上千万维,太难了,迹算不出来!!

基于积分函数的生成模型Score-based generative modeling

从之前讨论可以知道,给定一个有限的数据集,我们可以通过score matching来训练一个积分函数模型它是一个神经网络,表示了一个向量场。学习完积分函数模型之后,可以通过采样的方法来得到新的样本!!如果可以在向量场中做采样,可以得到源源不断的样本,从而建立一个新型的生成式模型!!

郎之万采样

怎么样可以从向量场中得到我们的样本的?

:首先,假设空间中有无数个随机分布的点,可以通过把这些点沿着向量场方向移动的方式,趋近于概率比较大的地方!!然而这样做并不能产生样本因为所有的随机点最终都会探索到若干个有限的吸引子上(?),为了解决这个问题,有一种非常著名的方法,叫做郎之万采样!!

所谓郎之万采样就是在之前的过程中加上一点点噪声(?)!!!

然而,当噪声的大小是合适的情况下,我们能够保证从积分函数向量场中获得对应的概率分布的样本!!

 利用郎之万采样就可以建立一个新的生成式模型!!用score matching的方式去估计积分函数的一个向量场,然后可以通过跑若干次迭代,从郎之万采样获得新样本!!

但有一些问题!!!!

问题一(最重要的问题):在数据概率密度比较低的区域,去估计积分函数是很困难的!如下,两个高斯的和的例子,左边是概率密度函数中间是对应的真实的积分函数向量场右边是我们训练出来的积分函数模型给出的向量场!!!

比较左边和右边可以看出,当数据密度比较高的时候,估计出来的向量场和真实的向量场差距非常小!!

当数据密度比较低的情况下,估计出来的向量场和真实的向量场差距非常大!!

这个原因是因为score matching的飞车带么真丝,本质上考虑的是真实向量场和估计向量场之间的差!!!然后在数据上做了一个平均!!所以在数据密度比较低的地方,因为几乎没有数据,所以我们的目标函数考虑不到数据密度低的区域的情况!!!

这一点非常不幸的会导致我们的郎之万采样没有办法去很好的搜寻数据密度分布比较低的区域,如果我们的郎之万采样是在数据密度分布比较低区域做初始化的话,那么它们很难达到数据密度比较高的区域!!!

为了解决这个问题我们提出可以通过对我们的数据分布加噪声的方法来解决,加了噪声之后,噪声扰动之后的数据可以很容易填补数据密度概率比较低的区域!!!如下,加噪合适的情况下,我们真实的向量场和估计出来的向量场之间的差距几乎可以忽略不计!!意味着如果我们对数据加噪声,加噪后的数据密度向量场可以给郎之万采样提供有益的方向上的信息!!!

Annealed langevin dynamics(退火郎之万采样)

在实际应用中,我们不止是要加一个层次的噪声,要加若干不同层次的噪声,原因是什么?

:首先,不加任何噪声,如之前的问题,在数据概率密度比较低的位置所估计的积分函数向量场是不准确的,也就是郎之万采样很难在密度比较低的区域搜寻到密度比较高的区域!!!

对于这个问题,可以通过加噪,对数据概率密度比较低的区域做一个填补!!但是为了填补所有的区域,噪声大小必须要非常的大!!!当我们的郎之万采样初始值离数据密度高的区域,距离比较远的情况下,因为噪声比较大,我们学习也能得到很好的方向值;然而,当我们的郎之万采样初始值离数据密度高的区域,距离比较近的情况下,因为噪声比较大,基本上抹去了一些概率密度高区域的细节信息,导致我们不知道究竟应该往哪个方向走!!

所以,在实际应用中,最好的方法是用若干个大小不同的噪声来扰动我们的数据分布!!!从而保证无论我们的郎之万采样,目前与数据密度高区域的距离有多远,我们都能够很好的判断应该往哪个方向去行进!!

在实际中,我们有一系列不同的噪声大小,这些噪声大小从小到大排列,然后用不同噪声等级去扰动数据分布,得到不同被扰动后的数据分布!!

之后,可以训练一个积分函数模型,来同时去估计所有被噪声扰动之后的数据分布所对应的积分函数向量场!!!为了达到这个要求,我们的积分函数模型必须要有一个额外的输入,其就是噪声大小

然后根据这个额外的输入,它会输出对应于这个噪声大小的积分函数向量场!!!

为学习这个条件性积分函数模型,我们需要新的目标函数,这个目标函数是由score matching改变而来的!!

基本的想法很简单,因为我们有不同的噪声等级,所以每个噪声等级都有一个的score matching目标函数!!

只需要把不同等级的score matching目标函数做一个加权平均,就可以得到一个统一的目标函数!!

如果能最小化加权平均的目标函数,对应于最小化不同等级的score matching目标函数的损失函数值!!

然后,对于每一个score matching目标函数值都加上一个正的权值,这个权值都是正的,同样也保证我们,如果我们去最小化整个目标函数,同时最小化整个score matching的目标函数!!

 

 在学习完这个条件性的积分函数模型之后,可以用如下的方式进行采样

首先,考虑噪声最大的情况下,用几步迭代的方式去跑郎之万采样,它的结果会作为初始化来跑下一步大的郎之万采样!!然后在这个过程中,不断的减小噪声的值直到最后,一个非常小的噪声值!!

然后,经过几步郎之万采样之后的样本就作为我们的条件积分函数模型最终的样本!!!

这整个过程,相当于我们把若干个郎之万采样的过程联系到了一起,称之为Annealed langevin dynamics(退火郎之万采样)!!

在场景研究中发现,增加噪声等级的数量,模型的结果通常也会变得更好!!!从观察出发,如果我们能使用无数种噪声对我们的数据进行微扰,结果不是更好吗!!

噪声分布 pt

那么,怎么考虑无数种噪声等级呢?

假设数据分布是两个混合高斯的和!!如果只有三种不同的噪声等级,那么概率密度曲线如下!!!

最大的噪声能够保证把混合高斯全部抹掉,变成普通的高斯!!!

为了方便把虚线变成一维的图,这个一维的图表示的是概率密度函数!!!!其中比较的地方表示,值比较大的概率密度函数!!

如果我们尝试让噪声等级的数量加倍!!这样我么的图就会变得更加密集一些!!

不断这么做,直到有无数中不同的噪声等级!!

这种情况下一维的图变成了二维的图!!无穷多个数据分布如上!!

这个二维的图从数据分布开始,逐渐将数据分布变成噪声分布!!!

数据分布和噪声分布之间有无数中不同的被噪声扰动的数据分布!!

把它们记作ptt不再是整数而是连续的实数!![0,T],可以认为t是某种对时间的表示!!!

随机过程&随机微分方程

为了灵活的运用无数种不同的数据分布,我们需要某种简洁的方式来表示如此之多不同的数据分布!!

:提出可以用随机过程的方式来表示被噪声扰动的无穷多个数据分布,其本质是一个集合,有无穷多种随机变量!!变量就是连续的t.

对于每一个随机变量,其边际分布函数,边际概率密度函数可以记作pt。

如何表示随机过程呢?

答:用随机微分方程来表示随机过程!!本质上是对常微分方程的推广!!!

f(x,t)是常微分方程的内容,是确定性的过程,控制随机过程确定性的性质!!

绿色的项是随机微分方程所独有的!!!dw可以认为是无穷小的白噪声!!!w是布朗运动。这一项控制随机过程,扰动的那部分!!!

用随机过程去扰动数据分布,过程如下:随机过程会连续不断的增加噪声,使得我们的数据分布最后变成高斯噪声!!!!!

怎么表示如上随机过程呢?

dx=σ(t)dw 这个随机微分方程只有噪声扰动项!!只要让σ(t)的大小随着t指数的增加!!这个随机微分方程就会源源不断的给数据增加噪声!!直到把所有的数据都变成一个普通的白噪声为止!!

重点--随机微分方程(SDE)

如果我们能从一个完全随机的高斯噪声出发,去逆转刚才扰动数据的过程!!!那么我们可以慢慢的把噪声消除掉,从而得到质量很高的样本,需要把刚才的过程做一个时间反演!

怎么把刚才的过程做一个时间反向演化呢?

答:每一个随机微分方程都有一个逆向的随机微分方程来表示它的时间反演!!

如下:随机微分方程(左--时间必须按着正向的方式流动)--逆向随机微分方程(右---时间必须按着反向的方式流动)!!但它们所对应的概率密度函数是一样的!!

非常重要的是我们的逆向随机微分方程只依赖于一个项,那就是pt函数的积分,pt所对应的积分函数向量场(score function)

从刚才观点出发,如果我们可以解逆向的微分方程,那么我们可以从噪声出发,不断的消减噪声,从而得到很好的样本,怎么实现这一点呢?

:首先,我们并不知道pt所对应的向量场。为了解决这个问题,我们必须学习积分函数模型,不仅输入是x,也会考虑t(时间)。

为了训练依赖于时间t的积分函数模型,我们训练的目标函数如下:基本是噪声目标函数的推广!!

推广体现在,之前对有限个噪声等级的求和现在我们是对无穷噪声等级求了个期望积分!!t由[0,T]中均匀分布中随机采样出来的!!λt是一个正的函数,来表示对不同的score matching目标函数做一个加权,剩下的就是通常见到的score matching的目标函数。可以通过最小化目标函数的方式来训练我们的依赖于时间的积分函数匹配模型!!!

在得到积分函数匹配模型之后,可以带入到逆向随机微分方程中!!得到估计的逆向微分方程!!

之后,可以用任何的随机微分方程的数值解法来去模拟我们的反向随机过程!!一个简单的随机微分方程的解法:奥瑞了吗掩码方法(ODE),是常微分方程欧拉方法的推广!!

基本的想法:可以把dt无穷小的时间步长代换成有限小的时间步长Δt。同时把dw,无穷小的白噪声替换成高斯噪声!(均值为0,方差为|Δt|)!!!然后可以不断改变时间t,使得时间t越来越小,从T变到0,这样的话,x也会成为我们的随机过程的一个采样!!

概率流常微分方程(ODE)

除了用随机微分方程的数值解法的方式得到样本,我们还可以用另外的解法,这样方法所基于的基本方法是可以把任何一个随机微分方程转化成一个常微分方程,却不改变它在t时刻所以对应的概率密度函数!!把随机微分方程对应的常微分方程称为Probability flow ODE(概率流常微分方程)

对于任何一个随机微分方程(左)--都存在对应的概率流常微分方程(右)

特点在t时刻所以对应的概率密度函数,两者等同!!

概率流常微分方程只需要知道在t时刻所以对应的概率密度函数的积分函数向量场(score function)!!

与之前一样,可以训练一个依赖于时间的积分函数模型来估计积分函数向量场!

常微分方程所对应的结果如下:如何把数据分布转换成噪声,和如何把噪声所对应的先验分布转换成模型数据分布!!

下图中,红色的线表示随机微分方程所对应的随机过程的轨迹!!白色的线表示概率流常微分方程所对应的样本移动轨迹!!

图中很容易看出,常微分方程的轨迹更加的平滑!!随机微分方程的轨迹更加粗糙,并且随机性更大一些!!!常微分方程的轨迹的前向和后向是完全相反,精密对称的,从某种意义上也暗示着概率流随机微分方程其实是某种可逆生成式模型的一个特例!并且,概率流随机微分方程能够把积分匹配模型转换成neural ODE!!

这个同neural ODE的联系其实是由很多很多的优势!!

第一个优势:像neural ODE一样,可以用非常优秀的黑盒常微分方程求解数值,求解概率流常微分方程!!从而能更快的得到样本!!!

第二个优势:neural ODE和可逆概率流生成式模型的联系,可以很容易去计算任何数据点上的似然函数!!‘通过如下公式可以把先验的似然函数和数据上的似然函数之间联系起来!!联系的过程只需要求解一个一维的积分!!!积分可以很容易用数值解法解出来!!!积分只依赖于积分匹配函数模型的!!可以通过估计数值得到迹,是非偏的,所以只要数据足够多可以得到。

条件积分函数模型

可以很容易实现可控的样本生成!!

在之前中始终假设数据分布是x0,通过随机过程的扰动,得到噪声xT。对这个过程求逆,我们就可以从噪声出发从XT获得样本x0。

对于可控样本生成而言,过程如下

假设有一个控制信号y,随机过程将会扰动x0给定y的条件分布,从而得到噪声xT!

希望对这个过程求逆从噪声出发从XT获得x0给定y条件分布的样本!!

逆向过程对应如下,条件逆向随机微分方程

一眼看上去不知如何计算log pt(x|y)导数!但使用贝叶斯法则可以展开成两项!!

第一项对应的是普通的积分函数,与控制信号y没有关系,可以通过学习积分函数模型来近似!!

第二项可以通过学习额外的神经网络来估计,或者使用我们的专业知识直接给出!!

总结

通过估计积分函数向量场可以创造一系列非常灵活的生成式模型。首先,积分函数的向量场本身是很容易从数据中估计出来的!!可以用非常灵活的模型结构!!

与显式的生成式模型不一样的是我们并不要求模型的结构必须是归一化的!!或者说可逆的,有特殊的结构限制使得我们的归一化常数快速的求解!!这些对于我们积分函数来讲都是不必要的!

同时训练积分函数向量场模型非常的稳定,与GAN不同,我们不需要求解博弈问题!!

我们的积分函数生成式模型能够产生非常高质量的样本,可以同GAN相媲美!!

最后,使用概率流常微分方程可以精确的计算模型所对应的似然函数!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值