少于 1 分钟阅读

ref: https://diffusion.csail.mit.edu/2026/docs/lecture_notes.pdf 非常有启发,读了好几遍每次都有新收获。

Generative model把从一个简单的initial distribution里采样出来的样本转换到目标分布里去。或者说,它学习一种变换,将噪声逐步恢复为数据。这个过程依赖于 the simulation of ordinary or stochastic differential equations(ODEs/SDEs). 所谓微分方程,其实都是一阶,也就是说,只是速度关于位置的函数——我们不去直接学习“数据在哪”,而是学习,“应该如何对噪声数据进行修改,使之长得更像数据本身”。

在这一条路径上有三个主要的方法,呈现递进关系:

  • Normalized Flow
  • Diffusion Model
  • Flow Matching

理解这一系列工作的思路,有三种视角,下面的分析中我们总是会尝试从三种视角分别解释背后的insight:

  • 概率分布的数学推导
  • 热力学
  • ODE/SDE

数据可以被表示为一个 $d$ 维向量,进而理解为 $d$ 维空间中的一个点 $z$。一组数据就是一片这样的点云 $\mathcal{D}={z_0,\dots,z_N}$。 深度学习的核心假设是,一组有意义的目标数据,其点云在高维空间中的分布不是随机、分散的,而是集中在一些特定的区域,特定的形状上(”流形“)。高维空间中,哪些地方数据”密集“,哪些地方数据”稀疏“,可以被描述为一个概率分布 $p(z):z\sim p,z\in\mathcal{D}$。也可以这样说,我们从高维空间中随便取出一个点 $\hat{z}$,$p(\hat{z})$越接近1, 就说明这个点越有可能来自于目标数据分布,也就是说,它和目标分布中的数据越”像“。 自然,我们的目标就是搞清楚这个 $p(z)$是什么,然后从这个给分布里面去采样 $\hat{z}\sim p(\cdot)$, 来得到”和目标数据集$\mathcal{D}$尽可能相像“的新数据$\hat{z}$。

怎么从数据中学习这个分布呢?

我们介绍的这三种方法的思路是:我们不去直接学习”数据在哪“,而是学习”如何把噪声变成数据“。

鸟说:这很神奇,因为向量场定义在整个空间上,而数据本身却是低维的,学习这个高维的向量场,去隐含低位数据的信息,居然比学习低维的数据分布本身更容易,这是为什么呢?是因为这个向量场本身提供了什么”刚性的正则化功能“,使得学习变得更容易了吗? 这让我想起 SDF(signed distance field). 一个物体的边界,是三维空间中一个2维表面,可是SDF不去直接学习这个表面在哪,而是去学习这个3D空间上的一个向量场,每个点的向量,都指向离它最近的表面点。从而我们不仅能够利用表面上那些点的信息,还能让整个空间中所有的点都为我们提供关于”表面在哪“的信息。

我们随便拿一个 $z_0$,它可能长得和目标数据一点也不像。但是我们一点点修改,改了 $T$次之后,我们希望它变得很像目标。 $z_0\sim\mathcal{N}(0,I)\rightarrow z_1\rightarrow\dots \rightarrow z_t\rightarrow\dots\rightarrow z_T\sim p(x)$ 所以现在我们要学的东西变成了”当我们在第t步拿到数据 $z_t$,怎么改一下,它会更靠近$p$“。即,学习一个向量场 $u:\mathbb{R}^d\times[0,1]\rightarrow\mathbb{R}^d,(z,t)\mapsto u_t(z)$

更新时间: