Last updated on February 4, 2026 10:25 PM
前言
受 CSDIY 推荐,觉得还不错的课程。25 年的 B 站资源链接:BV1gc8Ez8EFL 。
虽然我看的是 26 年版本的 lecture notes 。
从微分方程的视角讲解了 flow 和 diffusion。
基本概念
需要生成的对象(图片,视频,蛋白质)等都可以使用向量 z ∈ R d z\in\mathbb{R}^{d} z ∈ R d 来表示。
生成即采样 :“生成”一个对象本质上就是在数据分布 p data p_{\text{data}} p data 里面采样。
数据集:z 1 , z 2 , ⋯ , z n ∼ p data z_1,z_2,\cdots,z_n\sim p_{\text{data}} z 1 , z 2 , ⋯ , z n ∼ p data 。
条件生成:sample 的时候带上某种条件,即 z ∼ p data ( ⋅ ∣ y ) z\sim p_{\text{data}}(\cdot | y) z ∼ p data ( ⋅ ∣ y ) ,其中 y y y 为控制条件的变量。
我们的目标就是,通过一个模型,将从已知的初始分布 p init p_{\text{init}} p init 里面采样的 x x x 转换成 p data p_{\text{data}} p data 里的采样。
Flow 和 Diffusion
这一节介绍了 ODE 和 SDE 两个数学工具。
Flow 与 ODE
首先定义 ODE 的解,即 trajectory:
X : [ 0 , 1 ] → R d , t ↦ X t (1) X:[0,1]\to \mathbb{R}^d,\quad t \mapsto X_t\tag{1}
X : [ 0 , 1 ] → R d , t ↦ X t ( 1 )
即将 [ 0 , 1 ] [0,1] [ 0 , 1 ] 中的时间 t t t 映射到 R d \mathbb{R}^d R d 空间中的某个位置。
ODE 是由向量场 定义的:
u : R d × [ 0 , 1 ] → R d , ( x , t ) ↦ u t ( x ) u: \mathbb{R}^d\times [0,1] \to \mathbb{R}^d,\quad (x,t)\mapsto u_t(x)
u : R d × [ 0 , 1 ] → R d , ( x , t ) ↦ u t ( x )
相当于在空间中每个位置的每个时间点都有定义一个类似于速度的东西。ODE 就是希望我们的轨迹是沿着这个向量场走的:
d d t X t = u t ( X t ) X 0 = x 0 \newcommand{\d}{\mathrm{d}}
\begin{aligned}\frac{\d}{\d t}X_t &= u_t(X_t)\\ X_0 &= x_0
\end{aligned}
d t d X t X 0 = u t ( X t ) = x 0
上面的式子是相当于,X t X_t X t 关于时间的导数是由在此位置的向量场给出的;下面的式子则是规定了一个初始条件。
接下来定义 flow:flow 即是把所有初值的解“打包”成一个映射:
ψ : R d × [ 0 , 1 ] → R d , ( x 0 , t ) ↦ ψ t ( x 0 ) d d t ψ t ( x 0 ) = u t ( ψ t ( x 0 ) ) ψ 0 ( x 0 ) = x 0 \psi:\mathbb{R}^d\times[0,1]\to\mathbb{R}^d,\quad (x_0,t)\mapsto \psi_t(x_0)\\
\newcommand{\d}{\mathrm{d}}
\begin{aligned}\frac{\d}{\d t}\psi_t(x_0) &= u_t(\psi_t(x_0))\\ \psi_0(x_0) &= x_0
\end{aligned}
ψ : R d × [ 0 , 1 ] → R d , ( x 0 , t ) ↦ ψ t ( x 0 ) d t d ψ t ( x 0 ) ψ 0 ( x 0 ) = u t ( ψ t ( x 0 ) ) = x 0
这告诉我们,对于初始位置 X 0 = x 0 X_0=x_0 X 0 = x 0 ,一个 ODE 的解 X t X_t X t 可以由流 ψ t ( x 0 ) \psi_t(x_0) ψ t ( x 0 ) 给出。
流的存在性与唯一性定理:若向量场 u u u 连续可微且导数有界,则 ODE 有解且唯一(即 ψ t \psi_t ψ t ),这种情况下 ψ t \psi_t ψ t 是微分同胚。
这个定理的直觉告诉我们刚才给出的流是良定义的,一个初始点对应一条轨迹,且轨迹之间是不会相交的,并且这个轨迹光滑且可逆。
在机器学习中,这个 u u u 的保证几乎一定成立(通常我们用神经网络建模 u u u )。
一般而言,求解 ODE 是没那么简单的,不过可以进行数值上的模拟。最简单的欧拉法:
X t + h = X t + h u t ( X t ) ( t = 0 , h , 2 h , ⋯ , 1 − h ) X_{t+h}=X_t+hu_t(X_t)\quad(t = 0,h,2h,\cdots, 1-h)
X t + h = X t + h u t ( X t ) ( t = 0 , h , 2 h , ⋯ , 1 − h )
有了上面这些工具,我们回忆一下初始目标:把 p init p_{\text{init}} p init 转换成 p data p_{\text{data}} p data 。很自然的想法就是利用 ODE 和 flow,而一个 flow model 如下被定义:
X 0 ∼ p init d d t X t = u t θ ( X t ) X_0\sim p_{\text{init}}\\
\newcommand{\d}{\mathrm{d}}
\frac{\d}{\d t}X_t = u_t^{\theta}(X_t)
X 0 ∼ p init d t d X t = u t θ ( X t )
这个向量场由参数为 θ \theta θ 的神经网络定义(具体架构之后讨论)。我们的目标就是让 X 1 X_1 X 1 服从数据分布:
X 1 ∼ p data ⟺ ψ 1 θ ( X 0 ) ∼ p data X_1\sim p_{\text{data}}\iff \psi_1^{\theta}(X_0) \sim p_{\text{data}}
X 1 ∼ p data ⟺ ψ 1 θ ( X 0 ) ∼ p data
注意:神经网络建模的是向量场而不是 flow 本身 。
Diffusion 与 SDE
简单来说,就是把 ODE 换成 SDE。这里先给出 SDE 的简要概念。莫名 callback 暑假的量化金融专题。?
SDE 相当于把 ODE 的确定轨迹变成了一个随机过程 ( X t ) 0 ≤ t ≤ 1 (X_t)_{0\le t\le 1} ( X t ) 0 ≤ t ≤ 1 。
在给出 SDE 之前先给出 布朗运动 的概念。布朗运动是一个随机过程 ( W t ) 0 ≤ t ≤ 1 (W_t)_{0\le t\le 1} ( W t ) 0 ≤ t ≤ 1 ,其中 W 0 = 0 W_0 = 0 W 0 = 0 ,然后满足两个性质:
Normal Increments:W t − W s ∼ N ( 0 , ( t − s ) I d ) W_t-W_s\sim \mathcal N(0,(t-s)I_d) W t − W s ∼ N ( 0 , ( t − s ) I d )
Independent Increments:对于任意 0 ≤ t 0 < t 1 < ⋯ < t n = 1 0\le t_0<t_1<\cdots<t_n=1 0 ≤ t 0 < t 1 < ⋯ < t n = 1 都有 W t 1 − W t 0 , W t 2 − W t 1 , ⋯ , W t n − W t n − 1 W_{t_1}-W_{t_0}, W_{t_2}-W_{t_1},\cdots, W_{t_n}-W_{t_{n-1}} W t 1 − W t 0 , W t 2 − W t 1 , ⋯ , W t n − W t n − 1 相互独立。
SDE 的想法就是在 ODE 的基础上加上随机的布朗运动。但是布朗运动几乎处处不可导所以不太可能有上面那种利用导数给出的微分方程。我们先利用导数的语言,把 ODE 转写一下:
d d t X t = u t ( X t ) 1 h ( X t + h − X t ) = u t ( X t ) + R t ( h ) X t + h = X t + h u t ( X t ) + h R t ( h ) \newcommand{\d}{\mathrm{d}}
\begin{aligned}\frac{\d}{\d t}X_t &= u_t(X_t)\\ \frac 1h (X_{t+h}-X_t) &= u_t(X_t)+R_t(h)\\
X_{t+h}&= X_t + hu_t(X_t)+hR_t(h)
\end{aligned}
d t d X t h 1 ( X t + h − X t ) X t + h = u t ( X t ) = u t ( X t ) + R t ( h ) = X t + h u t ( X t ) + h R t ( h )
其中 R t ( h ) R_t(h) R t ( h ) 是误差余项满足 lim h → 0 R t ( h ) = 0 \lim_{h\to 0}R_t(h) = 0 lim h → 0 R t ( h ) = 0 。我们把最后那个式子修改成随机的,即在每个微小时间步 h h h 里面加入布朗运动的贡献:
X t + h = X t + h u t ( X t ) + σ t ( W t + h − W t ) + h R t ( h ) X_{t+h}=X_t+hu_t(X_t)+\sigma_t(W_{t+h}-W_t)+hR_t(h)
X t + h = X t + h u t ( X t ) + σ t ( W t + h − W t ) + h R t ( h )
其中 σ t ≥ 0 \sigma_t\ge 0 σ t ≥ 0 为扩散系数 ,R t ( h ) R_t(h) R t ( h ) 为随机误差项 \ref{1} 。上面这个式子就构成一个随机微分方程 ,可以用下面的符号来表示:
d X t = u t ( X t ) d t + σ t d W t X 0 = x 0 \newcommand{\d}{\mathrm{d}}
\begin{aligned}
\d X_t &= u_t(X_t)\d t + \sigma_t \d W_t\\
X_0&= x_0
\end{aligned}
d X t X 0 = u t ( X t ) d t + σ t d W t = x 0
类似地,SDE 的解也有唯一性之类的性质,但此处不会进行说明。
对于 SDE 的模拟,可以使用 Euler-Maruyama 方法,和 ODE 的 Euler 方法很像:
X t + h = X t + h u t + h σ t ϵ t , ϵ t ∼ N ( 0 , I d ) X_{t+h} = X_t+h u_t + \sqrt h \sigma_t\epsilon_t,\quad \epsilon_t\sim \mathcal{N}(0,I_d)
X t + h = X t + h u t + h σ t ϵ t , ϵ t ∼ N ( 0 , I d )
通过 SDE,我们也可以构造一个生成式模型,称为扩散模型 :
X 0 ∼ p init d X t = u t ( X t ) d t + σ t d W t \newcommand{\d}{\mathrm{d}}
\begin{aligned}
X_0&\sim p_{\text{init}} \\
\d X_t &= u_t(X_t)\d t + \sigma_t \d W_t
\end{aligned}
X 0 d X t ∼ p init = u t ( X t ) d t + σ t d W t
其中 σ t : [ 0 , 1 ] → [ 0 , + ∞ ) , t ↦ σ t \sigma_t: [0,1]\to [0,+\infty),t\mapsto \sigma_t σ t : [ 0 , 1 ] → [ 0 , + ∞ ) , t ↦ σ t 是一开始固定的超参。
Flow Matching
上面已经讲了 flow model 的基本概念,但没有说怎么训练这样的一个模型。接下来介绍 flow matching(流匹配) 。
不过现在我们只知道 X 0 ∼ p init X_0\sim p_{\text{init}} X 0 ∼ p init 以及我们希望让 X 1 ∼ p data X_1\sim p_{\text{data}} X 1 ∼ p data ,让模型凭空学出来这个转化还是比较难的。所以 flow matching 的思路就是不直接让模型“凭空学会”如何从噪声到数据,而是先规定中间每个时刻 t t t 的“应该长什么样”(分布路径 p t p_t p t ),再去学习一个向量场让轨迹的分布匹配这条路径。
这一节会反复强调 conditional(条件)和 marginal(边缘)两个概念。提到条件的时候总是相当于在 p init p_{\text{init}} p init 上已经取了一个 z z z 作为条件的情况,而边缘的意思就是相当于对于所有的 p init p_{\text{init}} p init 上的 z z z 。
概率路径
对每个数据点 z ∈ R d z\in\mathbb{R}^d z ∈ R d ,定义一条条件插值路径 p t ( ⋅ ∣ z ) p_t(\cdot| z) p t ( ⋅ ∣ z ) ,满足端点条件:
t = 0 t=0 t = 0 时是噪声分布 p init p_{\text{init}} p init
t = 1 t=1 t = 1 时退化成把概率质量“钉死在 z z z ”上的 Dirac δ z \delta_z δ z
原文定义为:
p 0 ( ⋅ ∣ z ) = p init , p 1 ( ⋅ ∣ z ) = δ z p_0(\cdot| z)=p_{\text{init}},\qquad p_1(\cdot| z)=\delta_z
p 0 ( ⋅ ∣ z ) = p init , p 1 ( ⋅ ∣ z ) = δ z
直觉:这是“把初始噪声逐渐变成一个特定样本 z z z ”的分布轨迹。
条件路径会诱导一条边缘路径 p t ( x ) p_t(x) p t ( x ) :先采样 z ∼ p data z\sim p_{\text{data}} z ∼ p data ,再采样 x ∼ p t ( ⋅ ∣ z ) x\sim p_t(\cdot| z) x ∼ p t ( ⋅ ∣ z ) 。这给出了一个可采样 的 p t p_t p t :
并且由端点条件推出边缘路径确实从噪声插到数据:
p 0 = p init , p 1 = p data p_0=p_{\text{init}},\qquad p_1=p_{\text{data}}
p 0 = p init , p 1 = p data
这告诉我们可以直接采样 x ∼ p t x\sim p_t x ∼ p t ,但是无法显式计算概率密度 p t ( x ) p_t(x) p t ( x ) 。
条件向量场与边缘向量场
说完了我们想要的概率路径,但还没说怎么构造出能让 X t X_t X t 沿着概率路径走的向量场。本节就进行构造。
对于每个数据 z z z ,定义条件向量场 u t target ( ⋅ ∣ z ) u_t^{\text{target}}(\cdot|z) u t target ( ⋅ ∣ z ) :
X 0 ∼ p init , d X t d t = u t target ( X t ∣ z ) ⇒ X t ∼ p t ( ⋅ ∣ z ) \newcommand{\d}{\mathrm{d}}X_0\sim p_{\text{init}},\quad \frac{\d X_t}{\d t}=u_t^{\text{target}}(X_t | z)\quad\Rightarrow\quad X_t\sim p_t(\cdot| z)
X 0 ∼ p init , d t d X t = u t target ( X t ∣ z ) ⇒ X t ∼ p t ( ⋅ ∣ z )
直觉:给定终点 z z z ,这个速度场会把噪声“推向 z z z ”并在每个时刻呈现出我们指定的条件分布。而且好消息是这个条件向量场一般是容易有解析解 的。但是条件向量场没法给我们直接用,他只是把 p init p_{\text{init}} p init 坍缩成 δ z \delta_z δ z 。
但是,利用 marginalization trick ,我们可以把条件向量场给利用起来,构造出边缘向量场 :
定理(Marginalization trick):
令 u t target ( x ∣ z ) u_t^{\text{target}}(x|z) u t target ( x ∣ z ) 为条件向量场,则边缘向量场
u t target ( x ) = ∫ u t target ( x ∣ z ) p t ( x ∣ z ) p data ( z ) p t ( x ) d z u_t^{\text{target}}(x) = \int u_t^{\text{target}} (x|z) \frac{p_t(x|z)p_{\text{data}}(z)}{p_t(x)}\mathrm{d}z
u t target ( x ) = ∫ u t target ( x ∣ z ) p t ( x ) p t ( x ∣ z ) p data ( z ) d z
满足
X 0 ∼ p init , d d t X t = u t target ( X t ) ⇒ X t ∼ p t ( 0 ≤ t ≤ 1 ) \newcommand{\d}{\mathrm{d}}X_0\sim p_{\text{init}},\quad \frac{\d}{\d t}X_t = u_t^{\text{target}}(X_t)\quad \Rightarrow \quad X_t\sim p_t\quad(0\le t\le 1)
X 0 ∼ p init , d t d X t = u t target ( X t ) ⇒ X t ∼ p t ( 0 ≤ t ≤ 1 )
即这样定义的边缘向量场会遵循边缘概率路径。
注意到,u t target ( x ∣ z ) u_t^{\text{target}}(x|z) u t target ( x ∣ z ) 乘上的系数 p t ( x ∣ z ) p data ( z ) p t ( x ) \displaystyle \frac{p_t(x|z)p_{\text{data}}(z)}{p_t(x)} p t ( x ) p t ( x ∣ z ) p data ( z ) 实际上就是给定噪声数据 x x x ,z z z 的后验 p t ( z ∣ x ) p_t(z|x) p t ( z ∣ x ) 。
这告诉我们 X 1 ∼ p data X_1\sim p_{\text{data}} X 1 ∼ p data ,即这个边缘向量场可以将初始分布 p init p_{\text{init}} p init 转变为数据分布 p data p_{\text{data}} p data 。
为什么这个式子成立呢?先给出一个引理(此处不打算证明):
连续性方程
对于向量场 u t target u_t^{\text{target}} u t target 和 X 0 ∼ p init X_0\sim p_{\text{init}} X 0 ∼ p init 。对于 ∀ t ∈ [ 0 , 1 ] \forall t\in [0,1] ∀ t ∈ [ 0 , 1 ] ,X t ∼ p t X_t\sim p_t X t ∼ p t 成立当且仅当
∂ t p t ( x ) = − d i v ( p t u t target ) ( x ) ∀ x ∈ R d , t ∈ [ 0 , 1 ] \partial_t p_t(x) = -\mathrm{div}(p_t u_t^{\text{target}})(x)\qquad\forall x\in\R^d,t\in[0,1]
∂ t p t ( x ) = − d i v ( p t u t target ) ( x ) ∀ x ∈ R d , t ∈ [ 0 , 1 ]
其中散度 d i v \mathrm{div} d i v 定义如下:
d i v ( v t ) ( x ) = ∑ i = 1 d ∂ ∂ x i v t i ( x ) \mathrm{div}(v_t)(x) = \sum_{i=1}^d\frac{\partial}{\partial x_i}v_t^i(x)
d i v ( v t ) ( x ) = i = 1 ∑ d ∂ x i ∂ v t i ( x )
直觉:
左边 ∂ t p t ( x ) \partial_t p_t(x) ∂ t p t ( x ) :某点处概率密度随时间的变化
右边 − d i v ( p t u t ) -\mathrm{div}(p_t u_t) − d i v ( p t u t ) :概率质量“流入/流出”的净效应(div 表示净流出,所以加负号是净流入)
对于边缘向量场的证明:
∂ t p t ( x ) = ( i ) ∂ t ∫ p t ( x ∣ z ) p d a t a ( z ) d z = ∫ ∂ t p t ( x ∣ z ) p d a t a ( z ) d z = ( i i ) ∫ − div ( p t ( ⋅ ∣ z ) u t t a r g e t ( ⋅ ∣ z ) ) ( x ) p d a t a ( z ) d z = ( i i i ) − div ( ∫ p t ( x ∣ z ) u t t a r g e t ( x ∣ z ) p d a t a ( z ) d z ) = ( i v ) − div ( p t ( x ) ∫ u t t a r g e t ( x ∣ z ) p t ( x ∣ z ) p d a t a ( z ) p t ( x ) d z ) ( x ) = ( v ) − div ( p t u t t a r g e t ) ( x ) \newcommand{\d}{\mathrm{d}}\begin{aligned}
\partial_t p_t(x)&\overset{(i)}{=}\partial_t \int p_t(x | z)p_{\mathrm{data}}(z)\d z
\\
&=
\int \partial_t p_t(x | z)p_{\mathrm{data}}(z)\d z
\\
&\overset{(ii)}{=}
\int -\operatorname{div}\!\left(p_t(\cdot | z)u_t^{\mathrm{target}}(\cdot | z)\right)(x)p_{\mathrm{data}}(z)\d z
\\
&\overset{(iii)}{=}
-\operatorname{div}\!\left(\int p_t(x | z)u_t^{\mathrm{target}}(x | z)p_{\mathrm{data}}(z)\d z\right)
\\
&\overset{(iv)}{=}
-\operatorname{div}\!\left(
p_t(x)\int u_t^{\mathrm{target}}(x | z)
\frac{p_t(x | z)p_{\mathrm{data}}(z)}{p_t(x)}\d z
\right)(x)
\\
&\overset{(v)}{=}
-\operatorname{div}\!\left(p_tu_t^{\mathrm{target}}\right)(x)
\end{aligned}
∂ t p t ( x ) = ( i ) ∂ t ∫ p t ( x ∣ z ) p d a t a ( z ) d z = ∫ ∂ t p t ( x ∣ z ) p d a t a ( z ) d z = ( i i ) ∫ − d i v ( p t ( ⋅ ∣ z ) u t t a r g e t ( ⋅ ∣ z ) ) ( x ) p d a t a ( z ) d z = ( i i i ) − d i v ( ∫ p t ( x ∣ z ) u t t a r g e t ( x ∣ z ) p d a t a ( z ) d z ) = ( i v ) − d i v ( p t ( x ) ∫ u t t a r g e t ( x ∣ z ) p t ( x ) p t ( x ∣ z ) p d a t a ( z ) d z ) ( x ) = ( v ) − d i v ( p t u t t a r g e t ) ( x )
( i ) (i) ( i ) 比较显然;( i i ) (ii) ( i i ) 是代入连续性方程;( i i i ) (iii) ( i i i ) 是根据散度的定义式交换了散度和积分的顺序;( i v ) (iv) ( i v ) 是同时乘/除 p t ( x ) p_t(x) p t ( x ) ;( v ) (v) ( v ) 是代入 u t target u_t^{\text{target}} u t target 的定义。
训练方法
现在我们已经知道要用神经网络学习的向量场长什么样了(即我们已经明确了训练目标)。那么现在怎么学习一个这样的向量场呢?首先需要定义误差函数。定义 Unif = Uniform [ 0 , 1 ] \text{Unif} = \text{Uniform}_{[0,1]} Unif = Uniform [ 0 , 1 ] 为 [ 0 , 1 ] [0,1] [ 0 , 1 ] 上的均匀分布,E \mathbb{E} E 为期望。直观上我们希望 u t θ u^\theta_t u t θ 接近 u t target u_t^{\text{target}} u t target 所以可以用一个均方误差,定义 flow matching loss 如下:
L FM ( θ ) = E t ∼ Unif , x ∼ p t [ ∥ u t θ ( x ) − u t target ( x ) ∥ 2 ] = ( i ) E t ∼ Unif , z ∼ p data , x ∼ p t ( ⋅ ∣ z ) [ ∥ u t θ ( x ) − u t target ( x ) ∥ 2 ] \newcommand{\E}{\mathbb{E}}
\begin{aligned}
\mathcal{L}_{\text{FM}}(\theta) &= \E_{t\sim \text{Unif},x\sim p_t}\left[\| u_t^{\theta}(x)-u_t^{\text{target}}(x) \|^2\right]\\
&\overset{(i)}{=} \E_{t\sim\text{Unif},z\sim p_{\text{data}},x\sim p_t(\cdot|z)}\left[\| u_t^{\theta}(x)-u_t^{\text{target}}(x) \|^2\right]
\end{aligned}
L FM ( θ ) = E t ∼ Unif , x ∼ p t [ ∥ u t θ ( x ) − u t target ( x ) ∥ 2 ] = ( i ) E t ∼ Unif , z ∼ p data , x ∼ p t ( ⋅ ∣ z ) [ ∥ u t θ ( x ) − u t target ( x ) ∥ 2 ]
其中 p t ( x ) = ∫ p t ( x ∣ z ) p data ( z ) p_t(x) = \int p_t(x|z)p_{\text{data}}(z) p t ( x ) = ∫ p t ( x ∣ z ) p data ( z ) 是边缘概率路径,( i ) (i) ( i ) 则使用了 sample 的技巧。但是问题在于,我们不知道 u t target u_t^{\text{target}} u t target 怎么算(也算不出来)。所以先定义 conditional flow matching loss 如下:
L CFM ( θ ) = E t ∼ Unif , z ∼ p data , x ∼ p t ( ⋅ ∣ z ) [ ∥ u t θ ( x ) − u t target ( x ∣ z ) ∥ 2 ] \mathcal{L}_{\text{CFM}}(\theta) = \mathbb{E}_{t\sim \text{Unif},z\sim p_{\text{data}},x\sim p_t(\cdot|z)}\left[\| u_t^{\theta}(x)-u_t^{\text{target}}(x|z) \|^2\right]
L CFM ( θ ) = E t ∼ Unif , z ∼ p data , x ∼ p t ( ⋅ ∣ z ) [ ∥ u t θ ( x ) − u t target ( x ∣ z ) ∥ 2 ]
注意到这个 u t target ( x ∣ z ) u_t^{\text{target}}(x|z) u t target ( x ∣ z ) 通常是有解析解的,那么这个 loss 就好算了。但是我们要学的是边缘 向量场 u t target u_t^{\text{target}} u t target 啊?
定理:边缘流损失函数等于条件流损失函数加上与 θ \theta θ 无关的常数 。
L FM ( θ ) = L CFM ( θ ) + C \mathcal{L}_{\text{FM}}(\theta) = \mathcal{L}_{\text{CFM}}(\theta) + C
L FM ( θ ) = L CFM ( θ ) + C
这说明他们的梯度是相同的:
∇ θ L FM ( θ ) = ∇ θ L CFM ( θ ) \nabla_{\theta}\mathcal{L}_{\text{FM}}(\theta) = \nabla_{\theta}\mathcal{L}_{\text{CFM}}(\theta)
∇ θ L FM ( θ ) = ∇ θ L CFM ( θ )
所以利用 SGD 优化 CFM loss 是等价于优化 FM loss 的 !这说明我们只要对着 CFM 优化就可以了。
证明:利用 ∥ a − b ∥ 2 = ∥ a ∥ 2 − 2 a ⊤ b + ∥ b ∥ 2 \|a-b\|^2=\|a\|^2-2a^\top b + \|b\|^2 ∥ a − b ∥ 2 = ∥ a ∥ 2 − 2 a ⊤ b + ∥ b ∥ 2 ,把这两个 loss 拆开。
L FM ( θ ) = E t ∼ Unif , x ∼ p t [ ∥ u t θ ( x ) − u t target ( x ) ∥ 2 ] = E t ∼ Unif , x ∼ p t [ ∥ u t θ ( x ) ∥ 2 − 2 u t θ ( x ) ⊤ u t target ( x ) + ∥ u t target ( x ) ∥ 2 ] = E t ∼ Unif , x ∼ p t [ ∥ u t θ ( x ) ∥ 2 ] − 2 E t ∼ Unif , x ∼ p t [ u t θ ( x ) ⊤ u t target ( x ) ] + E t ∼ Unif , x ∼ p t [ ∥ u t target ( x ) ∥ 2 ] = E t ∼ Unif , z ∼ p init , x ∼ p t ( ⋅ ∣ z ) [ ∥ u t θ ( x ) ∥ 2 ] − 2 E t ∼ Unif , x ∼ p t [ u t θ ( x ) ⊤ u t target ( x ) ] + C 1 \newcommand{\E}{\mathbb{E}}
\begin{aligned}
\mathcal{L}_{\text{FM}}(\theta) &= \E_{t\sim\text{Unif},x\sim p_t}[\|u_t^{\theta}(x)-u_t^{\text{target}}(x) \|^2]\\
&= \E_{t\sim\text{Unif},x\sim p_t}[\|u_t^{\theta}(x)\|^2 - 2u_t^{\theta}(x)^\top u_t^{\text{target}}(x) + \|u_t^{\text{target}}(x) \|^2]\\
&= \E_{t\sim\text{Unif},x\sim p_t}[\|u_t^{\theta}(x)\|^2] - 2\E_{t\sim\text{Unif},x\sim p_t}[u_t^{\theta}(x)^\top u_t^{\text{target}}(x)] + \E_{t\sim\text{Unif},x\sim p_t}[\|u_t^{\text{target}}(x) \|^2]\\
&= \E_{t\sim\text{Unif},z\sim p_{\text{init}},x\sim p_t(\cdot|z)}[\|u_t^{\theta}(x)\|^2] - 2\E_{t\sim\text{Unif},x\sim p_t}[u_t^{\theta}(x)^\top u_t^{\text{target}}(x)] +C_1
\end{aligned}
L FM ( θ ) = E t ∼ Unif , x ∼ p t [ ∥ u t θ ( x ) − u t target ( x ) ∥ 2 ] = E t ∼ Unif , x ∼ p t [ ∥ u t θ ( x ) ∥ 2 − 2 u t θ ( x ) ⊤ u t target ( x ) + ∥ u t target ( x ) ∥ 2 ] = E t ∼ Unif , x ∼ p t [ ∥ u t θ ( x ) ∥ 2 ] − 2 E t ∼ Unif , x ∼ p t [ u t θ ( x ) ⊤ u t target ( x ) ] + E t ∼ Unif , x ∼ p t [ ∥ u t target ( x ) ∥ 2 ] = E t ∼ Unif , z ∼ p init , x ∼ p t ( ⋅ ∣ z ) [ ∥ u t θ ( x ) ∥ 2 ] − 2 E t ∼ Unif , x ∼ p t [ u t θ ( x ) ⊤ u t target ( x ) ] + C 1
令最后和 θ \theta θ 无关的一项为常数 C 1 C_1 C 1 ,然后打开中间这项:
E t ∼ Unif , x ∼ p t [ u t θ ( x ) ⊤ u t target ( x ) ] = ∫ 0 1 ∫ p t ( x ) u t θ ( x ) ⊤ u t target ( x ) d x d t = ∫ 0 1 ∫ p t ( x ) u t θ ( x ) ⊤ [ ∫ u t target ( x ∣ z ) p t ( x ∣ z ) p data ( z ) p t ( x ) d z ] d x d t = ∫ 0 1 ∫ ∫ u t θ ( x ) ⊤ u t target ( x ∣ z ) p t ( x ∣ z ) p data ( z ) d z d x d t = E t ∼ Unif , z ∼ p data , x ∼ p t ( ⋅ ∣ z ) [ u t θ ( x ) ⊤ u t target ( x ∣ z ) ] \newcommand{\E}{\mathbb{E}}\newcommand{\d}{\mathrm{d}}
\begin{aligned}
\E_{t\sim\text{Unif},x\sim p_t}[u_t^{\theta}(x)^\top u_t^{\text{target}}(x)] &= \int_0^1\int p_t(x)u_t^{\theta}(x)^\top u_t^{\text{target}}(x)\d x\d t\\
&= \int_0^1\int p_t(x) u_t^{\theta}(x)^\top \left[\int u_t^{\text{target}} (x|z) \frac{p_t(x|z)p_{\text{data}}(z)}{p_t(x)}\mathrm{d}z\right] \d x\d t\\
&= \int_0^1\int \int u_t^{\theta}(x)^\top u_t^{\text{target}} (x|z) p_t(x|z)p_{\text{data}}(z)\mathrm{d}z \d x\d t\\
&= \E_{t\sim \text{Unif},z\sim p_{\text{data}}, x\sim p_t(\cdot|z)}[u_t^{\theta}(x)^\top u_t^{\text{target}}(x|z)]
\end{aligned}
E t ∼ Unif , x ∼ p t [ u t θ ( x ) ⊤ u t target ( x ) ] = ∫ 0 1 ∫ p t ( x ) u t θ ( x ) ⊤ u t target ( x ) d x d t = ∫ 0 1 ∫ p t ( x ) u t θ ( x ) ⊤ [ ∫ u t target ( x ∣ z ) p t ( x ) p t ( x ∣ z ) p data ( z ) d z ] d x d t = ∫ 0 1 ∫ ∫ u t θ ( x ) ⊤ u t target ( x ∣ z ) p t ( x ∣ z ) p data ( z ) d z d x d t = E t ∼ Unif , z ∼ p data , x ∼ p t ( ⋅ ∣ z ) [ u t θ ( x ) ⊤ u t target ( x ∣ z ) ]
发现我们居然得到了条件向量场相关的项,把这个往回带,然后加一项减一项 ∥ u t target ( x ∣ z ) ∥ 2 \|u_t^{\text{target}}(x|z)\|^2 ∥ u t target ( x ∣ z ) ∥ 2 来配凑:
L FM ( θ ) = E t ∼ Unif , z ∼ p init , x ∼ p t ( ⋅ ∣ z ) [ ∥ u t θ ( x ) ∥ 2 ] − 2 E t ∼ Unif , x ∼ p t [ u t θ ( x ) ⊤ u t target ( x ) ] + C 1 = E t ∼ Unif , z ∼ p init , x ∼ p t ( ⋅ ∣ z ) [ ∥ u t θ ( x ) ∥ 2 − 2 u t θ ( x ) ⊤ u t target ( x ∣ z ) + ∥ u t target ( x ∣ z ) ∥ 2 − ∥ u t target ( x ∣ z ) ∥ 2 ] + C 1 = E t ∼ Unif , z ∼ p data , x ∼ p t ( ⋅ ∣ z ) [ ∥ u t θ ( x ) − u t target ( x ∣ z ) ∥ 2 ] + E t ∼ Unif , z ∼ p data , x ∼ p t ( ⋅ ∣ z ) [ − ∥ u t target ( x ∣ z ) ∥ 2 ] + C 1 = L CFM ( θ ) + C 2 + C 1 \newcommand{\E}{\mathbb{E}}
\begin{aligned}
\mathcal{L}_{\text{FM}}(\theta) &= \E_{t\sim\text{Unif},z\sim p_{\text{init}},x\sim p_t(\cdot|z)}\left[\|u_t^{\theta}(x)\|^2\right] - 2\E_{t\sim\text{Unif},x\sim p_t}\left[u_t^{\theta}(x)^\top u_t^{\text{target}}(x)\right] +C_1\\
&= \E_{t\sim\text{Unif},z\sim p_{\text{init}},x\sim p_t(\cdot|z)}\left[\|u_t^{\theta}(x)\|^2- 2u_t^{\theta}(x)^\top u_t^{\text{target}}(x|z) + \|u_t^{\text{target}}(x|z)\|^2 - \|u_t^{\text{target}}(x|z)\|^2\right]+ C_1\\
&= \mathbb{E}_{t\sim \text{Unif},z\sim p_{\text{data}},x\sim p_t(\cdot|z)}\left[\| u_t^{\theta}(x)-u_t^{\text{target}}(x|z) \|^2\right] + \mathbb{E}_{t\sim \text{Unif},z\sim p_{\text{data}},x\sim p_t(\cdot|z)}\left[-\|u_t^{\text{target}}(x|z)\|^2\right]+C_1\\
&= \mathcal{L}_{\text{CFM}}(\theta)+C_2+C_1
\end{aligned}
L FM ( θ ) = E t ∼ Unif , z ∼ p init , x ∼ p t ( ⋅ ∣ z ) [ ∥ u t θ ( x ) ∥ 2 ] − 2 E t ∼ Unif , x ∼ p t [ u t θ ( x ) ⊤ u t target ( x ) ] + C 1 = E t ∼ Unif , z ∼ p init , x ∼ p t ( ⋅ ∣ z ) [ ∥ u t θ ( x ) ∥ 2 − 2 u t θ ( x ) ⊤ u t target ( x ∣ z ) + ∥ u t target ( x ∣ z ) ∥ 2 − ∥ u t target ( x ∣ z ) ∥ 2 ] + C 1 = E t ∼ Unif , z ∼ p data , x ∼ p t ( ⋅ ∣ z ) [ ∥ u t θ ( x ) − u t target ( x ∣ z ) ∥ 2 ] + E t ∼ Unif , z ∼ p data , x ∼ p t ( ⋅ ∣ z ) [ − ∥ u t target ( x ∣ z ) ∥ 2 ] + C 1 = L CFM ( θ ) + C 2 + C 1
最后一步是因为 E t ∼ Unif , z ∼ p data , x ∼ p t ( ⋅ ∣ z ) [ − ∥ u t target ( x ∣ z ) ∥ 2 ] \mathbb{E}_{t\sim \text{Unif},z\sim p_{\text{data}},x\sim p_t(\cdot|z)}\left[-\|u_t^{\text{target}}(x|z)\|^2\right] E t ∼ Unif , z ∼ p data , x ∼ p t ( ⋅ ∣ z ) [ − ∥ u t target ( x ∣ z ) ∥ 2 ] 也是与 θ \theta θ 无关的常数。所以推导出来发现 FM loss 和 CFM loss 真的只差一个常数。
这个算法有几个关键特性:
Simulation-free :训练的时候从来不真正模拟 ODE,所以节省很多资源;
训练的目标是一个非常简单的回归目标 u t target ( x ∣ z ) u_t^{\text{target}}(x|z) u t target ( x ∣ z ) ;
最后直接使用 Euler 方法就可以进行目标生成(从 p init p_{\text{init}} p init 采样,然后用 Euler 法模拟 ODE,最后得到 p data p_{\text{data}} p data 分布下的样本)。
这就叫做 Flow Matching(流匹配) 。
高斯路径
是 denoising diffusion model 使用的概率路径。令 α t , β t \alpha_t,\beta_t α t , β t 为 noise schedulers :两个连续可微且单调的关于 t t t 的函数,且 α 0 = β 1 = 0 \alpha_0=\beta_1=0 α 0 = β 1 = 0 ,α 1 = β 0 = 1 \alpha_1=\beta_0=1 α 1 = β 0 = 1 。则条件概率路径定义如下:
p t ( ⋅ ∣ z ) = N ( α t z , β t 2 I d ) p_t(\cdot| z) = \mathcal{N}(\alpha_t z, \beta_t^2I_d)
p t ( ⋅ ∣ z ) = N ( α t z , β t 2 I d )
相当于天然满足了 p 0 ( ⋅ ∣ z ) = N ( 0 , I d ) p_0(\cdot|z) = \mathcal{N}(0,I_d) p 0 ( ⋅ ∣ z ) = N ( 0 , I d ) ,p 1 ( ⋅ ∣ z ) = δ z p_1(\cdot|z) = \delta_z p 1 ( ⋅ ∣ z ) = δ z 。并且其使得采样特别简单:
z ∼ p data , ϵ ∼ N ( 0 , I ) ⇒ x = α t z + β t ϵ ∼ p t z\sim p_{\text{data}},\ \epsilon\sim\mathcal{N}(0,I)\quad\Rightarrow\quad x=\alpha_t z+\beta_t\epsilon\sim p_t
z ∼ p data , ϵ ∼ N ( 0 , I ) ⇒ x = α t z + β t ϵ ∼ p t
这一步很关键:训练时我们只需要数据样本 z z z 和噪声 ϵ \epsilon ϵ ,就能构造任意时刻的“中间状态” x x x 。
接下来我们证明高斯路径对应的条件向量场为
u t target ( x ∣ z ) = ( α ˙ t − β ˙ t β t α t ) z + β ˙ t β t x u_t^{\text{target}}(x|z) = \left(\dot{\alpha}_t - \frac{\dot\beta_t}{\beta_t}\alpha_t \right)z + \frac{\dot\beta_t}{\beta_t}x
u t target ( x ∣ z ) = ( α ˙ t − β t β ˙ t α t ) z + β t β ˙ t x
证明:定义条件流模型 ψ t target ( x ∣ z ) = α t z + β t x \psi_t^{\text{target}}(x|z) = \alpha_t z + \beta_t x ψ t target ( x ∣ z ) = α t z + β t x ,若 X t X_t X t 为初始条件 X 0 ∼ p init = N ( 0 , I d ) X_0\sim p_{\text{init}} = \mathcal N(0,I_d) X 0 ∼ p init = N ( 0 , I d ) ,然后根据定义
X t = ψ t target ( X 0 ∣ z ) = α t z + β t X 0 ∼ N ( α t z , β t 2 I d ) = p t ( ⋅ ∣ z ) X_t = \psi_t^{\text{target}}(X_0|z) = \alpha_t z + \beta_t X_0\sim \mathcal N(\alpha_t z, \beta_t^2 I_d) = p_t(\cdot | z)
X t = ψ t target ( X 0 ∣ z ) = α t z + β t X 0 ∼ N ( α t z , β t 2 I d ) = p t ( ⋅ ∣ z )
现在已经说明轨迹是按照条件概率路径分布的了。接下来推导向量场就就行了。根据流的定义:
d d t ψ t target ( x ∣ z ) = u t target ( ψ t target ( x ∣ z ) ∣ z ) α ˙ t z + β ˙ t z = u t target ( α t z + β t z ∣ z ) α ˙ t z + β ˙ t ( x − α t z β t ) = u t target ( x ∣ z ) reparameterize x → ( x − α t z ) / β t ( α ˙ t − β ˙ t β t α t ) z + β ˙ t β t x = u t target ( x ∣ z ) \newcommand{\d}{\mathrm{d}}
\begin{aligned}
\frac{\d}{\d t}\psi_t^{\text{target}}(x|z) &= u_t^{\text{target}}(\psi_t^{\text{target}}(x|z)|z)\\
\dot\alpha_t z + \dot\beta_t z &= u_t^{\text{target}}(\alpha_t z + \beta_t z | z)\\
\dot\alpha_t z + \dot\beta_t \left( \frac{x-\alpha_t z}{\beta_t} \right) &= u_t^{\text{target}}(x|z)&\text{reparameterize }x\to(x-\alpha_tz)/\beta_t\\
\left(\dot{\alpha}_t - \frac{\dot\beta_t}{\beta_t}\alpha_t \right)z + \frac{\dot\beta_t}{\beta_t}x &= u_t^{\text{target}}(x|z)
\end{aligned}
d t d ψ t target ( x ∣ z ) α ˙ t z + β ˙ t z α ˙ t z + β ˙ t ( β t x − α t z ) ( α ˙ t − β t β ˙ t α t ) z + β t β ˙ t x = u t target ( ψ t target ( x ∣ z ) ∣ z ) = u t target ( α t z + β t z ∣ z ) = u t target ( x ∣ z ) = u t target ( x ∣ z ) reparameterize x → ( x − α t z ) / β t
接下来把上面的结果代入进 CFM loss:
L CFM ( θ ) = E t ∼ Unif , z ∼ p data , x ∼ p t ( ⋅ ∣ z ) [ ∥ u t θ ( x ) − u t target ( x ∣ z ) ∥ 2 ] = E t ∼ Unif , z ∼ p data , x ∼ p t ( ⋅ ∣ z ) [ ∥ u t θ ( x ) − ( α ˙ t − β ˙ t β t α t ) z − β ˙ t β t x ∥ 2 ] = E t ∼ Unif , z ∼ p data , ϵ ∼ N ( 0 , I d ) [ ∥ u t θ ( α t z + β t ϵ ) − ( α ˙ t z + β ˙ t ϵ ) ∥ 2 ] \begin{aligned}
\mathcal{L}_{\text{CFM}}(\theta) &= \mathbb{E}_{t\sim \text{Unif},z\sim p_{\text{data}},x\sim p_t(\cdot|z)}\left[\| u_t^{\theta}(x)-u_t^{\text{target}}(x|z) \|^2\right]\\
&= \mathbb{E}_{t\sim \text{Unif},z\sim p_{\text{data}},x\sim p_t(\cdot|z)}\left[\left\lVert u_t^{\theta}(x)-\left(\dot{\alpha}_t - \frac{\dot\beta_t}{\beta_t}\alpha_t \right)z - \frac{\dot\beta_t}{\beta_t}x \right\rVert^2\right]\\
&= \mathbb{E}_{t\sim \text{Unif},z\sim p_{\text{data}},\epsilon\sim\mathcal N(0,I_d)}\left[\left\lVert u_t^{\theta}(\alpha_t z + \beta_t\epsilon)-\left(\dot\alpha_t z + \dot\beta_t\epsilon \right) \right\rVert^2\right]
\end{aligned}
L CFM ( θ ) = E t ∼ Unif , z ∼ p data , x ∼ p t ( ⋅ ∣ z ) [ ∥ u t θ ( x ) − u t target ( x ∣ z ) ∥ 2 ] = E t ∼ Unif , z ∼ p data , x ∼ p t ( ⋅ ∣ z ) ⎣ ⎢ ⎡ ∥ ∥ ∥ ∥ ∥ ∥ u t θ ( x ) − ( α ˙ t − β t β ˙ t α t ) z − β t β ˙ t x ∥ ∥ ∥ ∥ ∥ ∥ 2 ⎦ ⎥ ⎤ = E t ∼ Unif , z ∼ p data , ϵ ∼ N ( 0 , I d ) [ ∥ ∥ ∥ ∥ u t θ ( α t z + β t ϵ ) − ( α ˙ t z + β ˙ t ϵ ) ∥ ∥ ∥ ∥ 2 ]
如果我们使用 CondOT probability path ,即令 α t = t , β t = 1 − t \alpha_t = t, \beta_t = 1-t α t = t , β t = 1 − t 的话,形式会变得更简单:
L CFM ( θ ) = E t ∼ Unif , z ∼ p data , ϵ ∼ N ( 0 , I d ) [ ∥ u t θ ( t z + ( 1 − t ) ϵ ) − ( z − ϵ ) ∥ 2 ] \mathcal L_{\text{CFM}}(\theta) =\mathbb{E}_{t\sim \text{Unif},z\sim p_{\text{data}},\epsilon\sim\mathcal N(0,I_d)}\left[\| u_t^{\theta}(t z + (1-t)\epsilon) - (z-\epsilon)\|^2 \right]
L CFM ( θ ) = E t ∼ Unif , z ∼ p data , ϵ ∼ N ( 0 , I d ) [ ∥ u t θ ( t z + ( 1 − t ) ϵ ) − ( z − ϵ ) ∥ 2 ]
总结
所以,流匹配是什么呢?核心目标是为了学习边缘向量场 u t target u_t^{\text{target}} u t target 。为了构造之,先定义条件概率路径 p t ( x ∣ z ) p_t(x|z) p t ( x ∣ z ) 使得 p 0 ( ⋅ ∣ z ) = p init p_0(\cdot|z) = p_{\text{init}} p 0 ( ⋅ ∣ z ) = p init 而 p 1 ( ⋅ ∣ z ) = δ z p_1(\cdot|z) = \delta_z p 1 ( ⋅ ∣ z ) = δ z 。接下来构造条件向量场 u t target ( x ∣ z ) u_t^{\text{target}}(x|z) u t target ( x ∣ z ) 使得其对应的流 ψ t target ( x ∣ z ) \psi_t^{\text{target}}(x|z) ψ t target ( x ∣ z ) 满足
X 0 ∼ p init ⟹ X t = ψ t target ( X 0 ∣ z ) ∼ p t ( ⋅ ∣ z ) X_0\sim p_{\text{init}} \implies X_t= \psi_t^{\text{target}}(X_0|z)\sim p_t(\cdot|z)
X 0 ∼ p init ⟹ X t = ψ t target ( X 0 ∣ z ) ∼ p t ( ⋅ ∣ z )
然后定义边缘向量场
u t target ( x ) = ∫ u t target ( x ∣ z ) p t ( x ∣ z ) p data ( z ) p t ( x ) d z u_t^{\text{target}}(x) = \int u_t^{\text{target}} (x|z) \frac{p_t(x|z)p_{\text{data}}(z)}{p_t(x)}\mathrm{d}z
u t target ( x ) = ∫ u t target ( x ∣ z ) p t ( x ) p t ( x ∣ z ) p data ( z ) d z
这个向量场可以把 p init p_{\text{init}} p init 沿着边缘概率路径转变成 p data p_{\text{data}} p data 。
为了学习之,构造一个条件流匹配损失函数
L CFM ( θ ) = E t ∼ Unif , z ∼ p data , x ∼ p t ( ⋅ ∣ z ) [ ∥ u t θ ( x ) − u t target ( x ∣ z ) ∥ 2 ] \mathcal{L}_{\text{CFM}}(\theta) = \mathbb{E}_{t\sim \text{Unif},z\sim p_{\text{data}},x\sim p_t(\cdot|z)}\left[\| u_t^{\theta}(x)-u_t^{\text{target}}(x|z) \|^2\right]
L CFM ( θ ) = E t ∼ Unif , z ∼ p data , x ∼ p t ( ⋅ ∣ z ) [ ∥ u t θ ( x ) − u t target ( x ∣ z ) ∥ 2 ]
对于 CondOT 路径的情况,学习的伪代码如下:
1 Input. A dataset of samples z ∼ p data , and neural network u t θ 2 Method. 3 for each mini-batch of data do 4 Sample a data example z from the dataset 5 Sample a random time t ∼ Unif 6 Sample noise ϵ ∼ N ( 0 , I d ) 7 Set x = t z + ( 1 − t ) ϵ ( General case: x ∼ p t ( ⋅ ∣ z ) ) 8 Compute loss L ( θ ) = ∥ u t θ ( x ) − ( z − ϵ ) ∥ 2 ( General case: = ∥ u t θ ( x ) − u t target ( x ∣ z ) ∥ 2 ) 9 Update θ ← grad_update ( L ( θ ) ) 10 end for \begin{array}{ll}
1 & \textbf{Input. } \text{A dataset of samples }z\sim p_{\text{data}}\text{, and neural network }u_t^{\theta} \\
2 & \textbf{Method. } \\
3 & \textbf{for } \text{each mini-batch of data}\textbf{ do} \\
4 & \qquad\text{Sample a data example }z \text{ from the dataset}\\
5 & \qquad\text{Sample a random time }t\sim\text{Unif} \\
6 & \qquad\text{Sample noise }\epsilon\sim\mathcal{N}(0,I_d)\\
7 & \qquad\text{Set }x=tz+(1-t)\epsilon&(\text{General case: }x\sim p_t(\cdot|z))\\
8 & \qquad\text{Compute loss } \mathcal{L}(\theta) = \|u_t^{\theta}(x) - (z - \epsilon) \|^2&(\text{General case:} =\| u_t^{\theta}(x)-u_t^{\text{target}}(x|z) \|^2)\\
9 & \qquad\text{Update }\theta\gets \text{grad\_update}(\mathcal{L}(\theta))\\
10 & \textbf{end for}
\end{array}
1 2 3 4 5 6 7 8 9 1 0 Input. A dataset of samples z ∼ p data , and neural network u t θ Method. for each mini-batch of data do Sample a data example z from the dataset Sample a random time t ∼ Unif Sample noise ϵ ∼ N ( 0 , I d ) Set x = t z + ( 1 − t ) ϵ Compute loss L ( θ ) = ∥ u t θ ( x ) − ( z − ϵ ) ∥ 2 Update θ ← grad_update ( L ( θ ) ) end for ( General case: x ∼ p t ( ⋅ ∣ z ) ) ( General case: = ∥ u t θ ( x ) − u t target ( x ∣ z ) ∥ 2 )
非常之简单优雅。
Score Matching