扩散模型的数学理解

前置知识:

  1. 生成模型的分类和核心

生成模型的基本任务就是生成样本,它们的分类如下(参考博主小米粥):

构建生成模型的核心步骤包括以下两点,上图众多生成模型的区别就是对这两个核心步骤处理的方式不同:

  1. 如何设计好的建模方式

  • 不同的生成模型各自有所考虑,例如玻尔兹曼机使用基于能量的模型构建了,完全可见置信网络对进行了链式解析等等,而扩散模型创造性地通过扩散过程构建了一个精巧的建模方式

  1. 如何根据样本从而训练估计模型中的参数 θ ?

  • 显式生成模型使用的训练准则为极大似然法,这里具体分为两类:第一类是似然函数方便处理,因此直接对似然函数本身直接进行优化的精确推断方法(例如流模型,自回归模型);第二类是似然函数难以处理,比如无明确解析式,因此采取对似然函数的近似值进行优化的近似推断方法(例如VAE和玻尔兹曼机)。扩散模型使用的训练方法同样为极大似然法,所以也属于显式生成模型,并且属于第二类,对似然函数采用类似于VAE的近似推断进行处理

  • 隐式生成模型(GAN等)首先使用两类样本学习到了的距离,然后再以减少距离为目标训练生成模型。

注意:生成模型中,指的是对生成过程的建模,也就是网络预测到的随机变量X的概率分布,指的是我们通过计算得到的随机变量X的概率分布,模型目标就是使尽量靠近

  1. 几个基础数学概念

  • 高斯分布的数学性质:

乘法:,则

加法:,则

加一个数,只会加到期望上;乘以个数,对于期望而言是直接乘这个数,对于方差而言是乘以这个数的平方。

  • 带下标的数学期望符号:

首先回顾对数学期望的数学定义(概率论与数理统计基础知识):

口语化定义可以是:随机变量X的每个值(xi)乘以对应概率(p(xi))的总和。

但需要说明的是:当X是离散随机变量的情况,我们求和时用简单的累加∑来求,好比有x1,x2,他们的概率分别是1/2,则期望为:1/2*x1+1/2*x2;当随机变量X是连续随机变量时,这时求和使用积分来求,好比x的概率密度函数为p(x),则期望为:

但总的来讲,求数学期望,就是求随机变量X在其分布函数F(X)下的和。在上述的两种情况中,离散情况下的概率p{1/2,1/2} 连续情况下的概率密度函数p(x) 都可以看作是随机变量X的分布函数F(X)。所以“求随机变量X的数学期望”,全称应该是“求随机变量X在分布F(X)下的数学期望”,它的数学描述是:。只是平时当默认X的分布函数已知时,我们在书写时为了简单起见,常常会省略掉,将“随机变量X的数学期望”只写为

所以当碰到带下标的数学期望符号时,比如,它的含义是“求随机变量X在分布q下的数学期望”。

比如下式中其实就是,这里要求且p(x)>0,也就是说p(x)满足作为概率密度函数的要求。

  • 概率公式中的逗号、分号、竖线:

分号 在概率公式中的作用是:隔开随机变量X和参数θ分号前是随机变量,分号后是参数。比如P(y=1|x; θ)的意思就是“在参数为θ,已知x的条件下,y=1的概率”。其实就是P(y=1|x):“已知x的情况下,y=1的概率是多少”,只不过这个概率分布里面的参数是θ。一般求概率的时候是不写参数的,因为参数是确定的,比如投硬币正面朝上概率的参数p=0.5。

分号的优先级最大,竖线的优先级高于逗号。一个函数公式中,分号前表示的是这个式子用来预测分布的随机变量,分号后面表示所需的相关参数。比如P(X; θ)表示X的分布,并且X的分布与参数θ相关。P(A|B,C)表示在B,C的条件下,发生A的概率。

  1. 回顾信息熵、交叉熵、KL散度之间的关系

要明白这几者间的关系,需要先了解“信息量”这一概念

1)信息量

信息奠基人香农(Shannon)认为“信息是用来消除随机不确定性的东西”,也就是说衡量信息量的大小就是看这个信息消除不确定性的程度信息量的大小与信息发生的概率成反比概率越大,信息量越小。概率越小,信息量越大。

在信息理论中,我们用以下式子来量化一个事件X的信息量 I(X)

其中p(x)是事件x发生的概率。当 log 底数为e时,信息量的单位为nat(奈特),当 log 底数为2时,信息量的单位为bit(比特)。

2)信息熵(information entropy,entropy

“信息熵”也被称为“熵”,表示所有信息量的期望

3)相对熵(KL散度,Kullback-Leibler divergence)

K-L散度又被称为相对熵(relative entropy),是对两个概率分布间差异的非对称性度量。

对于同一个随机变量X的两个单独的概率分布p(x)和q(x),用KL散度衡量它们差异的定义如下:

一般在机器学习中,p(x)是随机变量的真实分布,q(x)表示模型的预测分布。

注意:K-L散度不是对称的,它并非描述两个分布之间的距离,因为

4)交叉熵(Cross entropy)

将KL散度公式拆开:

第一项“-H(p(x))”表示“-信息熵”,第二项我们就称之为交叉熵。因此,交叉熵的公式为:

这里有重要的几点:

  • 交叉熵与熵的区别就是“对数的内部不同”,熵的log内部还是本身,交叉熵的log内部则是另外一个概率分布,这也就是“交叉熵”名字的由来。

  • KL散度 = 交叉熵 - 信息熵“,或者说:“交叉熵=KL散度 + 信息熵

  • 在机器学习训练时,由于输入数据与标签常常已经确定,那么真实概率分布p(x)其实是已经确定的,是一个常量。比如在分类任务中,真实概率分布p(x)就是标签的分布,我们用这个分布去监督预测的分布q(x)(这里说的分布并不严谨,都是用若干个样本去近似)。正常来讲,我们用KL散度的值表示真实概率分布p ( x )与预测概率分布q ( x ) 之间的差异,值越小表示预测的结果越好。但这时KL散度其实就是交叉熵减一个常量(信息熵),因此直接最小化交叉熵就相当于最小化KL散度,计算还更方便。所以在分类问题中,常常使用交叉熵损失函数来计算loss就行了。

  • 总结,交叉熵也能衡量同一个随机变量中的两个不同概率分布的差异程度,值越小,模型预测效果就越好。因此,在交叉熵之前,常需要将预测结果通过softmax函数转换为概率分布的形式,再通过交叉熵计算损失。

推荐阅读:交叉熵损失函数原理详解

  1. 梯度的概念&导数与微分基础的回顾

首先回顾极限、连续、导数、偏导、微分、偏微分、全微分这些基础概念。

高阶和低阶是相对而言的:一般都是说A是B的高阶或低阶无穷小量。令,如果L=0,则称当x→x0时,f(x)为g(x)的高阶无穷小量,或称g(x)为f(x)的低阶无穷小量。

极限存在的条件:x0的去心邻域有定义,左极限=右极限。

连续的条件:左极限=有极限=函数值。连续了之后再判断可导。

导数:一个函数在某一点的导数描述了这个函数在这一点附近的变化率。导数的本质是通过极限的概念对函数进行局部的线性逼近定义:设有定义域和取值都在实数域中的函数 y=f(x)。若f(x)在点的某个邻域内有定义,则当自变量x在 处取得增量Δx(点 +Δx 仍在该邻域内)时,相应地y 取得增量 Δy=f(+Δx)−f();如果 Δy / Δx 当 Δx→0 时的极限存在,则称函数 y=f(x) 在点 处可导,并称这个极限为函数 y=f(x)在点处的导数,记为f'():

方向导数指的是多元函数在某一个方向上的导数,偏导数为坐标轴方向上的方向导数。其他方向的方向导数都可以看作是偏导数的合成。

微分的定义如下:设函数 y=f(x)在点 的某邻域上有定义,若对于任意 ,都成立 ,其中A是只与点有关的常数(线性逼近函数的斜率),如果(也被称为误差函数)是较 Δx 高阶的无穷小(即),则称函数在该点可微。其中 AΔx 叫做线性主部(主要部分,因为误差很小),记 dy=AΔx ,称为y 的微分。(核心思想是:对于一个函数,如果锚定一个点 ,在其比较小的邻域内,可以用一次(线性)函数逼近这个函数)

函数可微的内涵:事实上,用线性函数来逼近f(x),即可以对任何函数成立,因为有误差函数保证其精确性。但是如果误差函数太大,这样的逼近是没有意义的。因此,我们限制误差函数只能为一个高阶无穷小量,这就保证了在点附近用线性函数逼近原函数的有效性,或者说这才是有意义的逼近。由此可见,“误差函数为高阶无穷小量”是逼近的精髓,如若不然,逼近的意义不大。因此取微分的内涵就是用线性函数逼近函数,是一种具体的操作

导数是函数f(x)上增量Δy(全增量)与自变量增量Δx(也称,自变量的微分dx)比值的极限。函数的微分dy是用于逼近的线性函数(切线)上的线性增量。函数y=f(x)的微分又可记作(dy=AΔx,A是斜率,即f(x)的导数),从而有。即,函数的微分dy与自变量的微分dx之商等于该函数的导数,因此,导数也叫作“微商”。

偏导数写作(或),(或)分别称作函数f(x, y)对x, y的偏导。

偏微分写作, 分别叫做函数f(x, y)对x, y的偏微分。

全微分写作:函数f在点P(x, y)处的全增量为,其中o(ρ)为高阶无穷小的误差函数,意义就是用自变量增量Δx和Δy的线性函数来逼近函数的全增量Δz。其中称作函数f在点(x,y)处的全微分,记作 (或)。

一元函数中,可导和可微是等价的。多元函数中,可微比可导强得多。如果一个二元函数在某一点的偏导数存在,并不一定表示函数可微,因为偏导数仅仅刻画了坐标轴方向的变化状态,而没有给出其他方向的变化状态的任何信息。如果一个二元函数在某个点可微,那么这个二元函数在这个点的各个方向的导数均存在。如果一个二元函数在某个点的各个方向的导数均存在,但这个二元函数在这个点也不一定可微。

偏导函数连续→可微;但可微 推不出 偏导连续。
可微→函数连续;可微→函数可偏导;(因为函数连续,才能可偏导,继而才能可微)如下面这张图,函数在棱线处虽然连续,但是并不是在任意方向上都可导,自然也就不可微分。

了解完上面的基础概念之后,再来看梯度。

函数f(x, y)在点(x, y)处对每一个变量的偏导数构成的向量,称为梯度,用符号表示梯度的方向就是函数在某点处的方向导数取得最大值的方向,即,函数在该点处沿着梯度的方向变化最快,变化率为梯度的模。如果向量x有n个元,即(这里的x1, x2相当于y, z等多个自变量),则梯度算子的定义为:

表示函数f(x)相对于变量x的梯度:

如果x表示一个单独的自变量,其实就是表示求f(x)对x的偏导。

函数f(x, y)在(a, b)点的梯度为:,其中为函数在(a, b)位置上分别在x轴、y轴方向上的偏导数。注意,梯度是一个向量。如果函数f(x, y)在定义域中的每一个点都是可微的(每一点的偏导数都存在),那么梯度便是一个向量值函数,即它把任意一个点(a, b)映射到一个向量。因此可以说,梯度决定了一个向量场。

如果函数f(x, y)可微,那么梯度函数的定义域将是函数f(x, y) 的全域,也就是说在函数f(x, y)的每一点处,我们都可以根据梯度的方向对其进行优化,使其下降至局部最优。这也是为什么机器学习问题中常常需要函数是可微的,这一点是非常重要的,因为可微了之后就可以通过偏导求出梯度,就可以用梯度下降法优化。梯度下降法中,梯度确定了方向(反方向),学习率确定了下降步幅的大小,直到下降到梯度的模趋向于0。

梯度下降的挑战:

  • 局部最小值

  • 鞍点

参考:https://www.cnblogs.com/wghou09/p/12002660.htmlhttps://www.cnblogs.com/shine-lee/p/11715033.html

  1. 重参数化技巧

目的:使采样过程可微。

原因:采样过程不可导。如果我们要从某个分布中随机采样(高斯分布)一个样本,这个过程是无法反传梯度的。通过重参数化技巧,可以解耦网络计算和采样操作,从而可以对整个模型进行优化。

做法:将采样操作从网络的计算图中抽离出来,使得采样操作在网络的计算图之外。

例如VAE中的隐变量,我们要从这个分布中采样,但是这个采样操作是不可导的,进而导致整个模型无法BP。

将z的分布重写为一个含有噪声ε的分布:。本质上是对ε进行平移缩放得到z。这样随机性在计算图中就完成了以下的转移:

这样,从ε到z就只涉及到了线性操作,采样操作在NN计算图之外,而ε对于NN来说只是一个常数而已。我们可以继续使用神经网络来预测μ和σ,并且不会在z处对μ和σ的梯度仍然可导。

  1. Fubini定理

参考维基百科,用一个公式描述:

前二者是在两个测度空间上的逐次积分,但积分次序不同;第三个是在乘积空间上关于乘积测度的积分。这三者相等。特别的,如果 f(x, y)=h(x)g(y),则:

  1. Jensen不等式

Jensen不等式是和凸函数的定义是息息相关的。因此在介绍Jensen不等式之前,先介绍凸函数(convex function)。

凸函数的定义是:对于一个定义域是凸集的函数f,当满足以下条件时它是一个凸函数:

凸函数的图像可以如下所示,凸函数的几何意义在于,定义域中任意两点连线组成的线段都在这两点的函数曲线(面)上方

Jensen不等式的定义是:若对于任意点集 ,若 ,使用数学归纳法,可以证明凸函数 f (x) 满足:

上面这个公式就是Jensen不等式。

  1. 变分下界(VLB,Variation Lower Bound)

变分下界就是变分推断中的证据下界(Evidence Lower Bound),详细定义参考之前文章《统计学习方法》(李航)——学习笔记中14.3 部分。

  1. 能量模型(Energy-Based Models,EBMs):

能量模型(Energy-based model)是一种以自监督方式执行的生成式模型。除此之外,生成式模型还包括自回归模型流模型变分自编码器生成对抗网络扩散模型等。

EBMs最早来源于玻尔兹曼机(Boltzmann Machines)。玻尔兹曼机基于能量的方式对概率进行建模,主要的目的就是为了方便对概率进行建模:对于一个给定的数据集,如果不知道其潜在的分布形式,那是非常难学习的,似然函数都写不出来。比如如果知道是高斯分布或者多项分布,那可以用最大化似然函数来学出需要学习的对应参数,但是如果分布的可能形式都不知道,这个方法就行不通。而统计力学的结论表明,任何概率分布都可以转变成基于能量的模型,所以利用基于能量的模型的这个形式,是一种学习概率分布的通法。

在一个复杂系统里你要表示一个变量 x∈X 的概率 P(x),用玻尔兹曼(吉布斯)分布的形式如下:

基于以上方式(框架)对概率进行建模的方法,就叫做能量模型。E(x)表示状态x的能量,Z叫做配分函数,用于归一化。可以看出,能量E(x)越小,对应状态的概率P(x)越大。在EBMs的框架内,不同的方法的区别就是,能量函数E(x)(Energy Function)的不同。如果能量函数被表示为似然函数,那么求最大似然就相当于求最小能量。以下是EBMs的几种方法:

  • 玻尔兹曼机(Boltzmann Machines,BMs)的能量函数为:,其中x是表示单元状态,U表示参数矩阵,b表示偏差项,这里面包含的假设是单元状态单元之间的相互关系都是线性的。

如果在BMs中假如隐变量,那么模型的表达能力将会大大增强,可以逼近非常复杂的概率分布。模型结果如下。能量函数为:。对于玻尔兹曼机而言,训练任一连接两个单元的权重参数,只需用到对应的这两个单元的数据,而与其他单元的数据无关。即玻尔兹曼机的训练规则是局部的(local)。

  • 受限波尔兹曼机(Restricted Boltzmann Machines,RBMs):RBMs是在隐变量BMs的基础上进一步施加约束,具体是在RBM中不存在可见单元与可见单元的链接,也不存在隐含单元与隐含单元的链接,整个RBM网络结构是一个如下所示的两层神经网络,上面是隐藏层(hidden layer),下面是可见层(visible layer)。隐藏层和可见层之间是全连接的,这点和DNN类似, 隐藏层神经元之间是独立的,可见层神经元之间也是独立的。连接权重可以用矩阵W表示。和DNN的区别是,RBM不区分前向和反向,可见层的状态可以作用于隐藏层,而隐藏层的状态也可以作用于可见层。

RBM的联合概率分布为:,能量函数为:,其中a和b是偏置系数。学习RBM的任务是求出模型参数的值,通常用对比散度(Contrastive Divergence,CD)算法来求解。

  • 深度玻尔兹曼机(Deep Boltzmann Machines,DBMs):即深层的RBM,就是在RBM中加入更多的隐藏层,如下。

能量函数通常写作 ,用于衡量x,y 的 compatibility,也可以理解为x,y 是否匹配,匹配度越高能量越小。

训练EBM的初衷就是找一个合适的能量函数(Energy Function),使得其能够对输入的X 输出最匹配的 Y 。给定参数 W ,我们将这一类能量函数写作:

参考:https://zhuanlan.zhihu.com/p/34201655https://www.cnblogs.com/pinard/p/6530523.html综述:基于能量的模型

  1. 分数函数(Score Function,SF):

最大似然估计(MLE)中的似然函数为:L(θ)=p(x; θ)。一个随便变量为x的概率密度函数为p(x),则其似然函数也可以看作是p(x)。当似然函数L(θ)关于参数θ可导时,常常通过求导方法来获得似然函数L(θ)极大值对应的参数值θ。为了求导方便,常常对似然函数取对数,即对数似然函数为:L'(θ)=log p(x; θ),这个函数L'(θ)与似然函数L(θ)在同一点达到最大。

对似然函数L'(θ)求关于θ的一阶导数,就是Score function,记为:。因此极大似然估计,就是求,因为这时的θ,可以使L'(θ)达到最大,同等于使似然函数L(θ)达到最大。

SF 之所以在机器学习中非常有用,是因为具有非常好的性质:

  • 与 MLE 有着密不可分的关系;

  • SF 的期望等于 0;

Score Function 的应用:变分推断和强化学习

TODO: 一篇很好的串讲:Score-based Generative Models总结

参考:Score Function Trick及其在机器学习中的应用

  1. 雅可比矩阵

向量值函数:(有n个自变量,m个因变量)

多个变量(x1, ..., xn)的向量值函数f(x)(分量函数为f1, ..., fm)的雅可比矩阵是其梯度矩阵的转置,即雅可比矩阵是其所有一阶偏导数的矩阵,如下:

可以看出,雅可比矩阵是一个m×n矩阵,描述了向量空间中的运动——变换,因此雅可比矩阵看作是将点(x1, ..., xn)转化到点(y1, ..., ym),或者说是从一个n维的欧式空间转换到m维的欧氏空间的变换

当m=1时,函数的雅可比矩阵就是梯度矩阵。

  1. 采样到底是什么?

知道了一个变量的分布,要生成一批样本服从这个分布,这个过程就叫采样。采样本质上是对随机现象的模拟,根据给定的概率分布,来模拟产生一个对应的随机事件。采样可以让人们对随机事件及其产生过程有更直观的认识。

例子:吉布斯采样是MCMC的一个特例,吉布斯采样的牛逼之处在于只需要知道条件概率的分布,便可以通过采样得到联合概率分布的样本。

采样的作用:

  • 采样也是一种信息降维,可以起到简化问题的作用。

  • 采样也可以用于生成。例如VAE,它是在 AE 的基础上对隐变量z施加限制,使得z符合一个标准正态分布,这样就可以对隐变量进行采样,生成的结果可以是类似于输入样本,但是不完全一样的数据。

  • 很多模型由于结构复杂、含有隐变量等原因,导致对应的求解公式比较复杂,没有显式解析解,难以进行精确求解或推理。在这种情况下,可以利用采样方法进行随机模拟,从而对这些复杂模型进行近似求解或推理。这一般会转化为某些函数在特定分布下的积分或期望,或者是求某些随机变量或参数在给定数据下的后验分布。例如,在隐狄利克雷模型和深度玻尔兹曼机的求解过程中,由于含有隐变量,直接计算比较困难,此时可以用吉布斯采样对隐变量的分布进行采样。如果对于贝叶斯模型,还可以将隐变量和参数变量放在一起,对它们的联合分布进行采样。注意,不同于一些确定性法近似求解方法(如变分贝叶斯方法、期望传播等),基于采样的随机模拟方法是数值型的近似求解方法。参考:采样的作用

  1. 朗之万动力学:TODO


正文

写在前面

为了方便阐述,首先做一些数学约定:以 表示不同时间步中的样本,以表示不同时间步对应的随机变量,以表示随机变量的概率分布,以正态概率函数表示在分布时的样本概率值。

此外,扩散模型要做的事可以用一句话描述:样本的真实分布q(X)太复杂,直接预测太难,所以扩散模型将真实分布q(X)拆分为“若干个条件(噪声)分布+标准高斯分布N(0,1)”,将问题简化为预测这一系列"相对简单的"的条件分布

所以扩散模型的核心是:“真实分布q(X)”=“若干个条件(噪声)分布”+“标准高斯分布N(0,1)”,这一点与VAE的动机相同,都是通过转变需要预测的分布,来简化问题。

另一点与VAE相同的是,为了方便生成,扩散模型需要从这些条件分布中采样比较方便,因此我们将这些拆分出来的条件分布与VAE一样约束为高斯分布。只约束为高斯分布可能还是不方便采样,因此我们对每一个“拆分出的条件分布”使用重参数化技巧,转化为在标准高斯分布N(0,1)采样,这样不仅方便采样,还消除了采样过程中不梯度传播的问题。因此在生成时,只需要先在标准高斯分布N(0,1)采一个样,然后再从这些“拆分出的条件分布”中使用重参数化技巧不断采样一个值加上去,整个过程结束后,得出的值就相当于从原始真实分布q(X)中采样出的值。

从以上或许也可以感受到:

  • 对于生成模型而言(GAN、VAE、Diffusion),在生成时,输入的采样值的分布一般都设计为标准正态分布N(0,1),因为这样方便采样,只需要torch.randn就可以实现。如果想获取一个其他高斯分布的采样值,只需要给“重参数化模块”输入均值和方差就好了,而均值、方差一般是通过网络进行预测。

  • 对于未知分布一般都约定为高斯分布,这样做的动机一般有以下几个:1)高斯分布性质好。在给定一二阶矩时, 正态分布的熵最大,即给定的先验信息最少,最随机;2)从中采样实现起来容易。3)根据混合高斯模型的思想,任何分布都可以看作是若干个高斯分布的叠加。

正向(扩散)过程

1)宏观加噪规则

前向扩散过程,相当于在每一time step都往上一个图像的状态加入一个高斯噪声,这样随着step的增加,原始样本x0(概率分布为)会逐渐丢失它的判别特征,当T→+∞时,就会变成完全的高斯噪声()。当然,这个加噪过程并不是任意的,扩散模型定义加噪过程服从以下规则

其中,,并且.。在GLIDE的code中,方差 βt 随着t增大是递增的,且是由0.0001 到0.02线性插值。

上面这个式子表示,在给定样本t-1时刻的样本的条件下,t时刻样本的分布为高斯分布,并且均值是,方差是

条件高斯分布的均值只与前一个状态有关,而与其他的状态无关,也就是说随机过程是一个马尔可夫过程。当t趋于无穷时,趋于0,趋于1,此时的均值趋于0,方差趋于I。也就是说,在这样一个加噪规则下,当扩散的时间布足够多时,随机过程将进入稳态

2)微观加噪措施

在这样一个加噪规则下,实现了我们初步的设想,即增加足够多的噪声后,可以使得最后的结果服从标准正态分布。那具体应该怎么加噪呢?

为了更好的阐述,这里做一个定义:

在每一步的加噪过程中,我们并非直接在上添加噪声来获取。而是根据重参数化技巧,首先从标准正态分布采样出高斯噪声,然后根据高斯分布的加法性质,使用以下公式对标准正态分布进行变换,得到服从分布的样本

也就是说,我们没有直接在上加一个噪声来获取,而是使用进行缩放以获取新分布的均值,然后使用重参数化叠加一个高斯噪声来获取,实现了分布从的转变。

因此,也满足以下关系:

也是一个标准正态分布

两式联立有:

其中,同样也是一个标准正态分布。上述推导同样用到了高斯分布的加法性质。将上述过程不断重复,就可以得到的关系:

同样是一个标准正态分布。因此,当给定初始样本 时,扩散过程中的随机变量 的概率分布为:

即:在给定的情况下,扩散模型正向加噪每一步产生的分布都是一个高斯分布,并且随着步数变多,该分布逐渐趋近于标准高斯分布。

几个辅助理解的关键问题:

1)为什么要构造如此复杂的前向扩散过程?

  • 上述这样的扩散过程蕴含重要的可逆性质:如果满足高斯分布且当 足够小时, 仍然符合(近似)高斯分布。这在文献[4]中被证明。这一性质将被用于逆向过程中,产生Ground Truth ,作为逆向过程的label。

2)为什么会选择作为均值?

逆向(生成)过程

在逆向过程中,我们的目标是从标准正态分布得到。如果逐步的添加真实的逆转分布,则可以实现我们的目标。因此在逆向过程中我们网络的目标就是,逐步地预测中间逆向分布,并使预测到的逆向分布尽可能与真实逆向分布一致。整个逆向过程可以建模如下:

也就是说逆向过程的label就是。但,其实我们没法得知它的值,所以目前仍然没办法去训练,那该怎么办?这时就需要伟大的贝叶斯定理出场了。

从正向过程的讲解中,我们得到在给定的情况下,任意都是已知的。并且的公式我们在最初就已经定义。所以当往加入条件时,使用贝叶斯定理对其进行转换,就可以将转换为三个已知解析式的概率分布。如下所示:

并且,根据正向过程中最后的第一个问题可以得知,仍是服从高斯分布的,也就是说可以表示如下:

将(7-1)中的各个概率密度的解析式代入后,并整合化简至(7-3),则可以得到的高斯分布解析式。并且,因为高斯概率密度函数的指数部分应该如下:

所以可以得到的均值如下:

由于可以由表示,所以可以将其转换为使用表示

再带入中,得到均值的表达式:

到目前为止,我们已经得到的均值表达式,式中参数()可以看作是一个用于降噪的噪声。所以我们预测时,目的就是预测如下的均值,而预测均值,也就是用于降噪的预测高斯噪声

对于的方差,DDPM直接使用固定的方差,没有训练,且认为的结果近似。在GLIDE中则是根据网络进行预测

训练过程

有了逆向过程的label,可以开始训练了。训练总要有个目标的,那对扩散模型而言,训练目标是什么?

扩散模型要做的是生成,而生成模型的总目标是使生成的分布尽量贴近样本分布,因此优化目标就是:最小化的交叉熵,即最大化模型预测分布的对数似然:

这里有个问题,为什么用交叉熵而不是用KL散度?我们的目的是用去监督生成的,那么自然想到的是应该是用KL散度,但是KL散度展开后,其实是“信息熵”与“的交叉熵”的和,这里我们并不知道分布,但它肯定是某个确定的分布,所以“信息熵”肯定是一个确定但无法计算的常量。所以最小化KL散度,其实就是最小化“的交叉熵”。

由于KL散度的非负性,所以我们可以有以下推导,得出了优化目标的变分下界。我们要做的就是最小化变分下界就行了,这种优化目标转变的思想就是“变分推断”。下面这个推导中,最重要的是理解这一点。

但是,上面得出的这个优化目标是不好计算的,我们可以利用Fubini定理进一步简化它(这一步通过Jensen的推导也可以,但没看懂):

进一步地,对可以继续推导,进行简化:

通过上面的简化后,我们可以将变分下界看作是T个项组成的函数,如下所示:

分析:由于前向 q 没有可学习参数,而 则是纯高斯噪声, 因此可以当做常量忽略。

分析:它可以看作是拉近以下两个分布

求他们的KL散度,化简后如下所示,C是一个与模型参数θ无关的常量:

把【逆向(生成)过程】章节中推导出的带入其中,有以下推导过程:

分析相当于逆向最后一步的熵,DDPM论文指出,从 x1 到 x0 应该是一个离散化过程,因为图像RGB值都是离散化的。因此,DDPM针对构建了一个离散化的分段积分累乘,有点类似基于分类目标的自回归(auto-regressive)学习。说白了,就是这一项不需要去学习。

从以上分析可以看出,优化变分下界其实就是优化中间的这T-1个。在优化每一个时,DDPM发现可能导致训练的不稳定,所以并没有将模型预测的方差考虑到训练和推断中,而是通过untrained 或者 代替。

也就是说,优化变分下界就是最小化每一个中标准正态分布之间的MSE,因此总体简化损失可以写作如下,其中就是就是

有了这样一个目标之后,我们可以开始训练了。在训练时,要想对这样一个损失进行优化,就需要对[1,T]的每一个t值都进行训练对标准正态分布中的每一个采样值ε也都训练,这样才能实现对上式进行优化。但是我们每次训练只能针对固定值计算梯度,所以为了满足上面这两个要求,我们在每一个训练步中对[1,T]和都采样一个值来计算梯度,当训练次数足够多时,训练样本自然就access这两个分布的所有空间,或者说满足了这两个要求。因为的采样空间很大,而且还有T步,相当于有T个标准正态分布空间需要采样训练,所以模型需要很多次训练才能优化上面这个总体损失函数,这也是为什么DDPM需要很长训练时间的原因。

有了训练的方案后,将训练和采样过程的伪代码描述如下(生成模型的sampling过程就是生成过程):

上述采样过程的第4行,的公式之所以是这样,是因为服从一个高斯分布,所以可以看作是:均值+方差*标准正态分布。并且在训练过程中,并没有训练t=0的时刻,原因可以从上述对损失函数的分析得知。在采样过程中,当t=1时z=0,这是为了从x1生成x0时,不添加噪声,而只是离散化。

总体看来,上述整个训练过程的推导,要做的事就是“简化loss到极致”。在简化过程中,蕴含的思想是:“去除与可学习参数θ无关的项,因为优化时它们可以被当作常量看待”。至于为什么要简化,是因为简化后才方便写代码去训练。

加速Diffusion采样和方差的选择(DDIM)

DDIM的核心是将方差定义为了

这样做的本质是:牺牲随机性来换取生成性能。这种操作在GAN中也可以通过对latent code操作实现。

在DDPM和DDIM中,对方差的选择整理如下:

参考:

[1] 由浅入深了解Diffusion Model

[2] What are Diffusion Models?

[3] 理解扩散模型Diffusion (一)

[4] Feller, William. "On the theory of stochastic processes, with particular reference to applications." Proceedings of the [First] Berkeley Symposium on Mathematical Statistics and Probability. University of California Press, 1949.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值