type
status
date
slug
summary
tags
category
icon
password
Score-based generative model s are a different formulation of diffusion models, and might even be considered the broader family that diffusion models belong to.
- 变分上界的扩散模型(基于似然,likehood-based)
- 基于分数的扩散模型 score based
1. Score
要从一个分布中采样,你所需要的只是它的概率密度函数 (PDF, Probabilistic Density Function)。因此,如果我们能得到数据集的底层 PDF,我们就可以从中采样并生成新的数据点。我们将数据集的 PDF 称为
这个函数是未知的,我们希望用一个我们称之为 pθ(x) 的函数来近似它:
一种很好的参数化方法如下:
这样做的原因是,负指数 −fθ (x) 可以确保所有输出值都是非负的,fθ(x) 可以通过学习来输出 x 周围的概率密度有多大。而可学习的常数 Zθ用于归一化,以确保整个 PDF 的积分值为 1。例如,正态分布的 PDF 是:
但试图直接训练这个模型会让我们遇到一个问题。计算 Zθ 需要我们在 x 的整个空间上进行积分,而 x 的维度可能非常高,导致计算上难以处理。
要继续使用这种方法,就需要对模型施加限制或对 Zθ 进行近似。但我们可以应用一个技巧,我们称之为分数 (Score)。
分数指的是概率密度函数关于 x 的对数梯度,推导如下:
现在我们看到,第一个对数与指数相互抵消,而第二项变为 0,因为它不依赖于 x:
归一化常数被消除了,而它曾给模型带来了许多限制。为了与论文的符号保持一致,我们将其定义为:
2. Score Matching 分数匹配
Loss Function
现在,分数匹配指的是用模型预测的分数 sθ(x) 来近似原始分布的分数s(x)。这基本上意味着我们试图最小化原始分数和预测分数之间的差异:
与基于似然的模型类似,我们可以通过最小化模型分布和数据分布之间的费雪散度 (Fisher Divergence) 来训练基于分数的模型。直观上,费雪散度比较的是真实数据分数和模型分数之间的平方 l2 距离。
分数函数 ∇xlogp(x) 本身也很有意义。它告诉你为了增加一个数据点的概率,你需要将它朝哪个方向移动。基本上,真实的分数函数可以告诉你,在数据空间中的任意一点,应该朝哪个方向移动才能更接近真实数据点。

所以现在我们只需要最小化这个目标函数
Eq. (4)
,就可以采样新的数据点了。但不幸的是,这里有个陷阱。我们最大的问题是我们不知道 ∇xlogp(x),就像我们不知道 p(x) 一样,我们也无法获得它的梯度。然而,我们可以应用一些数学技巧来解决这个问题:- 将一个变量在 p(x) 分布下的期望 g(x) 展开为积分形式:
- 应用代数恒等式:
- 应用分部积分法:
- 当 x 趋向于无穷大时,概率密度通常衰减到 0,所以:
So:
我们的目标是最小化 , 现在我们来看一下推导结果中的第一项
- 我们可以看到,第一项不包含需要学习的 sθ(x)。因此,在优化过程中我们可以忽略它,因为它实际上相当于一个常数。常数不会改变优化的结果!
现在我们可以将优化目标重写为第二项和第三项的和,并使用前面提到的期望值公式将积分转换回期望的形式:
经过这些变换,未知的 p(x) 部分最终从我们的优化目标中消失了,我们得到了一个不需要原始分数的等价目标函数。
Looking at the second term of . We wanted to be at data points ⇒ get a maximum ⇒ ⇒ ⇒Score .Remember that the score refers to the direction we have to go to increase likelihood for data points. And if the scores are it means we’re at a data point.
See that we want the gradient of the score model at data points to be , where it means the value of get a local maximum. And the first terms tries to make the predicted scores of the score model to be at data points.
然而,最小化
Eq. (5)
存在两个问题:- 数据空间覆盖率低:在训练过程中,我们从真实世界的数据开始,主要看到的是来自数据空间中概率很高区域的数据点。因此,我们的模型在学习这些区域的分数函数时会表现得很好。然而,在生成过程的采样阶段,问题就出现了。当我们从一个随机位置开始时,如果这个点远离模型熟悉的区域,模型可能不知道数据密度指向哪个方向。
- 训练成本高昂:由于第二项的存在,该目标的计算成本非常高。这需要计算雅可比矩阵(Jacobian Matrix),它需要为每个输入变量进行一次单独的反向传播。

Training data points

Randomly Sampling

3. Noise Perturbation 噪声扰动
为了解决数据空间覆盖率低的问题,我们将对数据加噪:
具体来说,我们取一个数据点 x,然后加上一个来自正态分布的噪声 ϵ(均值为零,标准差为 σ)。这样做的结果是,我们可以覆盖更多的数据空间,如下图所示:

我们只需对所有数据点添加少量高斯噪声即可。我们将新的分布表示为pσ(x)
因此,如果我们用加噪后的数据来训练之前讨论的分数匹配算法,当从数据稀疏的区域开始采样时,问题就解决了。因为我们在训练中已经通过加噪让模型见过了这些区域,所以预测的分数很可能是合理的。
我们添加多少噪声取决于一个变量,我们将其表示为 . 我们也可以将其添加到我们的训练目标中
σ 是我们选择的一个超参数。当 σ 太大时,扰动后的分布与原始分布差异很大;而当 σ 太小时,我们覆盖的空间也相应变小。所以这里存在一个权衡。

4. Denoising Score Matching 去噪分数匹配
现在,计算成本高昂的问题仍然存在。幸运的是,有人研究了分数匹配,并尝试从去噪自编码器(denoising auto-encoders)中引入一些概念。他从带有噪声扰动数据的原始目标出发:

经过相当长的推导,得到了一个看起来几乎完全一样的新目标函数:
你会发现唯一的区别基本上是我们不再使用 ,但是却用了 , 这将产生巨大的差异,因为我们可以直接评估 的分数。
- 边缘概率分布
- 莱布尼茨积分法则
- 在特定条件下,微分算子可以移到积分内部。
- 对数法则的重新表述
- 线性代数
综合这些,我们得出了下面的推导。
所以现在这就是我们完整的目标函数,理论上我们可以尝试最小化它——即利用其参数$\theta$来优化得分模型。但有趣的是,第一项和最后一项并不包含分数模型,因此它们在目标函数中只是一个常数,所以我们可以忽略它们。

We are now left with just , scaled by a factor , which we can also write by plugging in the scaled negative . So, the new objective can be derive to :

通过这个目标函数,我们可以发现 —— 我们的模型接收带噪声的输入,并尝试预测负的 . 而这种预测,即噪声的负值,恰好指向我们的数据流形方向,这一点,正是分数匹配。


到目前为止,我们只讨论了训练,也就是学习数据的分布。接下来,我们将探讨如何生成数据 —— 即采样。

5. 采样
核心思想是,我们从数据空间中的一个随机点开始,模型会预测出最有可能朝着真实数据移动的方向,如下方的白色箭头所示:


但如果我们只做一次这样的操作,预测结果很可能不会太理想 —— 因为仅仅沿着线性方向移动很容易超出数据范围。这就是为什么多次重复预测、每次预测后只移动一小段距离会好得多。其公式非常简单,意思是在每一步中,我们取当前的 ,减去噪声预测值与 的乘积, 其中 是一个非常小的数:
在实际的扩散模型中,这可能会以不同的方式表现出来,但仍然会非常明显:
好的,让我们简要总结一下:我们找到了一个与之前不同的目标函数,它解决了两个问题:
- 计算成本低得多,而且具有很强的直观意义。
- 引入去噪得分匹配
- 对数据空间的覆盖范围大得多
- 添加由某个值缩放的高斯噪声,我们的模型学习预测该噪声
6. 多种噪声扰动
需要提醒的是,我们仍然面临这样一种权衡:添加噪声能覆盖更多的数据空间,但也会改变我们的数据分布。
此外,如果我们选择的 值非常小,那么在计算 时, 的标准差显然会非常小,因此其值也只会很小。当我们的模型需要根据 来预测 时,这会变得极其困难,因为 几乎不包含任何噪声。
总而言之, 值越小,计算难度越大; 值越大,数据分布的改变就越多。因此,在单一 值的情况下,我们的训练效果不会太好,且方差会很大。

我们如何解决这个问题呢?非常简单,甚至完全不需要复杂的数学运算。我们只需在不同的噪声水平上训练模型。在实际操作中,我们让\(\sigma\)在一个预先设定的范围内变化,比如在 0.01 到 25 之间。这样,模型就能接触到数据空间中的各种数据点,而且我们还可以让模型以噪声水平为条件,这只是额外的免费信息,有助于模型完成预测得分的任务。我们的加噪公式略有调整,现在是这样的:
- 唯一的变化是\(\sigma\)的下标,这表明它不再是一个固定的单一值,而是一系列不同的值。
然后在采样过程中,我们可以从一个随机点和最高噪声水平开始。接着,在缓慢向我们的数据分布靠近的同时,也降低噪声水平。

我们使用多少个噪声水平呢?第一篇论文使用了 1000 个噪声水平(《通过估计数据分布的梯度进行生成建模》)。在一篇后续论文中,他们指出,当将噪声水平的数量增加到无穷大时,噪声扰动就会变成一个随机过程。


7. Stochastic Differential Equations 随机微分方程
随机过程描述的是随时间演化的系统,这类系统本质上具有一定的随机性。

我们可以使用随机微分方程(SDE) 来建模随机过程。随机微分方程的一般形式如下:
where
- refers to the change in x, which is describe by the right-hand side of this equation.
- is called the drift coefficient
- is called the diffusion coefficient
- stands for the Wiener Process, which is named after Norbert Wiener, and basically just refers to normally distribution noise
- refers to the infinitely small changes in the noise
- refers to the infinitely small changes in the time.
漂移项是固定的,它主要描述了我们是否以确定性的方式改变 。扩散系数则描述了随机性随时间产生的影响。
例如,在初始阶段,由于 的值较小, 可能不会因随机性发生太大变化。但随着时间推移,当扩散系数增大时,噪声对 的改变可能会显著增强。
通过这种表述方式,在已知漂移项和随机项影响的情况下,我们就有了一种方法来确定数据随时间的变化方式。
让我们来看看我们的扩散过程:
的变化仅受随机项影响,换句话说,我们的过程中没有漂移项,只有扩散系数。
注意:只有特定的加噪过程中没有漂移过程,很多情况下是存在漂移项的,例如 DDPM(去噪扩散概率模型),其扩散过程中就包含漂移项。
如果我们想按需选择尽可能多的 值,可以用一个函数来计算它。我们简单地将这个函数称为, 它的输入是时间步 ,输出是对应的 值。假设 i的取值范围在 0 到 1 之间,0 表示添加的噪声量最少,1 表示噪声水平最高。
最简单的方法是设定最小和最大的 值,然后在这两个值之间进行线性插值。
如此一来,噪声就变为:
我们讨论的上述SDE对应于如何给数据添加噪声,我们称之为前向SDE。与前面1-6章最大的不同是,在本章中我们讨论的是连续情况,而非之前的离散情况。类似于在离散情况下我们使用朗之万动力学进行采样,在这里我们可以找到一个用于采样的SDE,我们称之为反向SDE:
安德森有一整篇论文是关于如何从正向SDE推导出反向SDE的。
8. 扩散模型的联系
现在,我们已经大致了解了正向 SDE 和反向 SDE,我们可以对它们进行一些修改,有很多具体的调整方式,其中一些你可能已经有所了解。
让我们来看一下我们的噪声扰动过程:
- 我们不难发现,分数匹配仅包含扩散系数,而 DDPM 同时具有漂移项和扩散系数。
推导过程如下:我们从离散的前向噪声扰动出发,得到连续的前向 SDE,接着推导出反向 SDE,最后通过对反向 SDE 进行离散化处理,得到 DDPM 采样器。


要对随机微分方程(SDE)进行离散化,可以利用一种名为欧拉 - 马尔可夫方法(Euler-Maruyama Method)的技术。

所有这些“扩散模型”都可以从微分方程的框架中推导出来,并且最终都只是求解一般反向随机微分方程(SDE)的不同方式。
Summary
So, if we have some data, then there is some underlying function that can represent and generate this data, we can call it .
Now we would like to learn this function, such that we are able to generate new data that fits our existing dataset.
We can try to learn and express this as a probability density function , which is non-negative and sums up to .
Learning the requires extremely expensive compute source to solve , to solve this problem, we can apply two mathmatical operators, the logarithm and the gradient: and 0, and we call the reslut Score:
And we can learn as to predict the original scores. The train objective is :
But we realized that we have no acess to original score , and then we tried to solve this. We came up with one objective that is equivalent to this but doesn’t require access to the original scores:
Then we realize that this is very expensive to computr because of this gradient operator, which needs as many backward passes as input dimensions that we have.
And there is another peoblem that we are limiting the score model to a small area of the data space it sees during training. We sovle this by adding noise to the data:
This gives us a trade-off. Given this, a connection to denosign autoencoders was found which allows something really cool:
That’s easy to compute. All of this sloved but still leaves us with the suboptimal tradeoff to what extent we noise our data.
The solution for this was to use a varying range of noise levels during trainning.
ㅤ | Discrete | Continuous |
Forward | ㅤ | Forward SDE |
Reverse | Langevin dynamics | Reverse-time SDE |
- 作者:CrystalPuNK
- 链接:https://crystalpunk.top/article/papers/SDE
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章
【nature】Accurate predictions on small data with a tabular foundation model

【ICLR 2024】A Flexible Generative Model for Heterogeneous Tabular EHR with Missing Modality
【ML】队列数据 Cohort Data

【ML】扩散薛定谔桥&扩散模型

Cross Domain Skeleton-based Action Recognition by Using Parameter-free Similarity Matching
【NIPS2017】Attention Is All You Need