当前位置: 首页 > news >正文

【生成模型(一)】Score-Based Generative Models

文章目录

  • 🌱 第一步:什么是 p(x)p(\mathbf{x})p(x)
  • 🔢 第二步:如何用神经网络表示 p(x)p(\mathbf{x})p(x)
      • ✅ 标准做法:指数族表示(Exponential Family)
  • 📈 第三步:如何训练这个模型?—— 最大似然估计(MLE)
      • 最常用的方法:最大化似然(Maximum Likelihood Estimation)
  • ⚠️ 第四步:问题来了—— ZθZ_\thetaZθ 太难算!
  • 💡 第五步:换个思路——不直接学 pθ(x)p_\theta(\mathbf{x})pθ(x),而是学它的“梯度”
  • 🧪 第六步:如何学 score function?—— Score Matching
      • 🔑 关键突破(Hyvärinen, 2005):
  • 🌀 第七步:学好了 score,怎么生成新样本?
  • ⚠️ 第八步:为什么原始方法失败?—— 低密度区域问题
  • 💎 第九步:解决方案——用多个噪声尺度扰动数据
  • 🔥 第十步:采样——Annealed Langevin Dynamics(退火朗之万)
  • ⏳ 第十一步:终极形式——SDE(随机微分方程)
  • ✅ 总结:完整流程
  • 🎯 你的问题总结
    • ✅ 第一步:澄清概念 —— `p_data(x)` 到底是什么?
      • ❗ 关键点:
    • ✅ 第二步:原始损失函数为什么不可行?
    • ✅ 第三步:关键突破 —— Hyvärinen (2005) 的“魔法”
      • 🔥 最终得到的 Score Matching 损失:
      • 🧠 这个公式的含义:
    • ✅ 第四步:为什么这个新损失函数有效?—— 它在“隐式地”优化真实 score!
      • 💡 直观理解:
    • ✅ 第五步:实际操作 —— 如何计算这个损失?
    • ✅ 第六步:举个一维例子(帮助理解)
    • ✅ 总结回答你的问题
    • 💡 一句话记住:

Generative Modeling by Estimating Gradients of the Data Distribution

  • 什么是概率分布 p(x)p(\mathbf{x})p(x)
  • 为什么可以写成 ef(x)Z\frac{e^{f(\mathbf{x})}}{Z}Zef(x)
  • 为什么用最大似然估计(MLE)
  • 什么是归一化常数 ZZZ,为什么它很难算
  • 什么是 score function(分数函数)
  • 为什么 score matching 能避开 ZZZ
  • 为什么 Langevin dynamics 能用来生成数据
  • 为什么原始方法不行,需要加噪声
  • 为什么加多个尺度的噪声,以及 SDE 是怎么来的

🌱 第一步:什么是 p(x)p(\mathbf{x})p(x)

假设你有一堆猫的图片。每张图片是一个高维向量 x∈RD\mathbf{x} \in \mathbb{R}^DxRD(比如 D=32×32×3=3072D = 32 \times 32 \times 3 = 3072D=32×32×3=3072)。

我们相信这些图片不是乱来的,而是从某个“真实世界的数据分布”中采样出来的。这个分布就叫 p(x)p(\mathbf{x})p(x)

  • p(x)p(\mathbf{x})p(x) 是一个概率密度函数(PDF)
  • 它满足两个条件:
    1. p(x)≥0p(\mathbf{x}) \geq 0p(x)0 对所有 x\mathbf{x}x
    2. ∫RDp(x)dx=1\int_{\mathbb{R}^D} p(\mathbf{x}) \, d\mathbf{x} = 1RDp(x)dx=1(总概率为1)

我们的目标:找到一个模型,能近似这个 p(x)p(\mathbf{x})p(x),然后自己生成新的猫图!


🔢 第二步:如何用神经网络表示 p(x)p(\mathbf{x})p(x)

一个很自然的想法是:让神经网络输出一个“打分” fθ(x)f_\theta(\mathbf{x})fθ(x),然后把这个打分转换成概率

但直接让神经网络输出 p(x)p(\mathbf{x})p(x) 有问题:你怎么保证它积分等于1?

✅ 标准做法:指数族表示(Exponential Family)

我们定义模型为:
pθ(x)=efθ(x)Zθp_\theta(\mathbf{x}) = \frac{e^{f_\theta(\mathbf{x})}}{Z_\theta} pθ(x)=Zθefθ(x)

其中:

  • fθ(x)f_\theta(\mathbf{x})fθ(x):任意函数(比如一个深度神经网络),输出一个实数(“未归一化的 log 概率”)
  • Zθ=∫efθ(x)dxZ_\theta = \int e^{f_\theta(\mathbf{x})} d\mathbf{x}Zθ=efθ(x)dx归一化常数(normalizing constant)

🔍 为什么这样写?
因为 efθ(x)>0e^{f_\theta(\mathbf{x})} > 0efθ(x)>0,保证了非负性;除以 ZθZ_\thetaZθ 保证了总积分为1。

这就像 softmax:每个类别得分 fif_ifi,概率 =efi∑jefj= \frac{e^{f_i}}{\sum_j e^{f_j}}=jefjefi。这里只是把“求和”变成了“积分”。

✅ 所以:任何概率分布都可以写成 ef(x)Z\frac{e^{f(\mathbf{x})}}{Z}Zef(x) 的形式(只要 fff 足够灵活)。


📈 第三步:如何训练这个模型?—— 最大似然估计(MLE)

我们有一堆训练数据 {x(1),x(2),...,x(N)}\{\mathbf{x}^{(1)}, \mathbf{x}^{(2)}, ..., \mathbf{x}^{(N)}\}{x(1),x(2),...,x(N)},假设它们独立地来自真实分布 pdata(x)p_{\text{data}}(\mathbf{x})pdata(x)

我们希望模型 pθ(x)p_\theta(\mathbf{x})pθ(x) 尽可能接近真实分布。

最常用的方法:最大化似然(Maximum Likelihood Estimation)

“让模型认为训练数据出现的概率尽可能高”。

似然函数(Likelihood):
L(θ)=∏n=1Npθ(x(n))\mathcal{L}(\theta) = \prod_{n=1}^N p_\theta(\mathbf{x}^{(n)}) L(θ)=n=1Npθ(x(n))

取对数(更好数值稳定):
log⁡L(θ)=∑n=1Nlog⁡pθ(x(n))\log \mathcal{L}(\theta) = \sum_{n=1}^N \log p_\theta(\mathbf{x}^{(n)}) logL(θ)=n=1Nlogpθ(x(n))

代入我们的模型:
log⁡pθ(x)=fθ(x)−log⁡Zθ\log p_\theta(\mathbf{x}) = f_\theta(\mathbf{x}) - \log Z_\theta logpθ(x)=fθ(x)logZθ

所以目标变成:
max⁡θ∑n=1N[fθ(x(n))−log⁡Zθ]=(∑n=1Nfθ(x(n)))−Nlog⁡Zθ\max_\theta \sum_{n=1}^N \left[ f_\theta(\mathbf{x}^{(n)}) - \log Z_\theta \right] = \left( \sum_{n=1}^N f_\theta(\mathbf{x}^{(n)}) \right) - N \log Z_\theta θmaxn=1N[fθ(x(n))logZθ]=(n=1Nfθ(x(n)))NlogZθ


⚠️ 第四步:问题来了—— ZθZ_\thetaZθ 太难算!

Zθ=∫efθ(x)dxZ_\theta = \int e^{f_\theta(\mathbf{x})} d\mathbf{x} Zθ=efθ(x)dx

  • x\mathbf{x}x 是高维的(比如 3072 维)
  • 积分没有解析解
  • 无法用数值积分(维度太高,“维度灾难”)
  • 蒙特卡洛方法也很难(因为你还不知道 pθp_\thetapθ,这就是你要学的!)

👉 所以:只要 fθf_\thetafθ 是任意神经网络,ZθZ_\thetaZθ 就不可计算!

这就是为什么传统模型要限制结构:

  • 自回归模型(PixelCNN):把联合概率分解成条件概率乘积,避免高维积分
  • 归一化流(Normalizing Flows):用可逆变换,保证 ZθZ_\thetaZθ 可算
  • VAE:用变分下界近似 log-likelihood

但这些限制了模型表达能力!


💡 第五步:换个思路——不直接学 pθ(x)p_\theta(\mathbf{x})pθ(x),而是学它的“梯度”

我们观察到:
∇xlog⁡pθ(x)=∇x(fθ(x)−log⁡Zθ)=∇xfθ(x)\nabla_\mathbf{x} \log p_\theta(\mathbf{x}) = \nabla_\mathbf{x} \left( f_\theta(\mathbf{x}) - \log Z_\theta \right) = \nabla_\mathbf{x} f_\theta(\mathbf{x}) xlogpθ(x)=x(fθ(x)logZθ)=xfθ(x)

因为 ZθZ_\thetaZθ 是个常数(对 x\mathbf{x}x 求导为0)!

所以:梯度 ∇xlog⁡p(x)\nabla_\mathbf{x} \log p(\mathbf{x})xlogp(x) 和归一化常数 ZZZ 无关!

这个梯度有一个名字:score function(分数函数)

定义:
score function: s(x):=∇xlog⁡p(x)\text{score function: } \mathbf{s}(\mathbf{x}) := \nabla_\mathbf{x} \log p(\mathbf{x}) score function: s(x):=xlogp(x)

  • 它是一个向量场:每个点 x\mathbf{x}x 都有一个“方向”,指向概率更高的地方
  • 它告诉我们:x\mathbf{x}x 附近,往哪个方向走,概率会变大

🧪 第六步:如何学 score function?—— Score Matching

我们不知道真实 score ∇log⁡pdata(x)\nabla \log p_{\text{data}}(\mathbf{x})logpdata(x),但我们可以定义一个神经网络 sθ(x)\mathbf{s}_\theta(\mathbf{x})sθ(x) 来逼近它。

损失函数:Fisher Divergence(费雪散度)
L=Epdata(x)[∥∇xlog⁡pdata(x)−sθ(x)∥22]\mathcal{L} = \mathbb{E}_{p_{\text{data}}(\mathbf{x})} \left[ \left\| \nabla_\mathbf{x} \log p_{\text{data}}(\mathbf{x}) - \mathbf{s}_\theta(\mathbf{x}) \right\|_2^2 \right] L=Epdata(x)[xlogpdata(x)sθ(x)22]

问题:真实 score 未知!

🔑 关键突破(Hyvärinen, 2005):

这个损失可以通过分部积分(integration by parts)重写成不需要真实 score 的形式

最终得到(省略推导):
LSM=Epdata(x)[tr(∇xsθ(x))+12∥sθ(x)∥2]+const\mathcal{L}_{\text{SM}} = \mathbb{E}_{p_{\text{data}}(\mathbf{x})} \left[ \text{tr}\left( \nabla_\mathbf{x} \mathbf{s}_\theta(\mathbf{x}) \right) + \frac{1}{2} \| \mathbf{s}_\theta(\mathbf{x}) \|^2 \right] + \text{const} LSM=Epdata(x)[tr(xsθ(x))+21sθ(x)2]+const

虽然仍有梯度,但只需要对 sθ\mathbf{s}_\thetasθ 求导,完全不需要真实分布的 score

✅ 所以:我们可以用任何神经网络 sθ(x)\mathbf{s}_\theta(\mathbf{x})sθ(x),直接用训练数据学习 score function!


🌀 第七步:学好了 score,怎么生成新样本?

答案:Langevin Dynamics(朗之万动力学)

它是一个 MCMC 算法,仅用 score function 就能从 p(x)p(\mathbf{x})p(x) 中采样!

算法步骤:

  1. 初始化 x0\mathbf{x}_0x0(随便给,比如全零或高斯噪声)
  2. 重复 K 次:
    xk+1=xk+ϵ⋅sθ(xk)+2ϵ⋅zk,zk∼N(0,I)\mathbf{x}_{k+1} = \mathbf{x}_k + \epsilon \cdot \mathbf{s}_\theta(\mathbf{x}_k) + \sqrt{2\epsilon} \cdot \mathbf{z}_k, \quad \mathbf{z}_k \sim \mathcal{N}(0, I) xk+1=xk+ϵsθ(xk)+2ϵzk,zkN(0,I)
  • 第一项:向高概率方向走(梯度上升)
  • 第二项:加噪声,防止卡在局部最大值
  • ϵ→0\epsilon \to 0ϵ0K→∞K \to \inftyKxK∼p(x)\mathbf{x}_K \sim p(\mathbf{x})xKp(x)

✅ 所以:学好 sθ\mathbf{s}_\thetasθ 后,就能用 Langevin 生成新数据!


⚠️ 第八步:为什么原始方法失败?—— 低密度区域问题

Langevin 从 x0∼N(0,I)\mathbf{x}_0 \sim \mathcal{N}(0, I)x0N(0,I) 开始。

但在高维空间中,真实数据 pdata(x)p_{\text{data}}(\mathbf{x})pdata(x) 非常集中(比如所有猫图都集中在某些区域),而 N(0,I)\mathcal{N}(0, I)N(0,I) 的大部分质量在远离数据的地方(低密度区)。

而 score matching 的损失是:
Epdata(x)[∥error∥2]\mathbb{E}_{p_{\text{data}}(\mathbf{x})}[\| \text{error} \|^2] Epdata(x)[error2]

只关心数据高密度区域的误差!低密度区完全不管!

但 Langevin 刚开始就在低密度区 → score 不准 → 一开始方向就错了 → 生成失败!


💎 第九步:解决方案——用多个噪声尺度扰动数据

想法:不要只学原始数据的 score,还要学“模糊版”数据的 score

定义:

  • pσ(x)=∫pdata(y)⋅N(x;y,σ2I)dyp_{\sigma}(\mathbf{x}) = \int p_{\text{data}}(\mathbf{y}) \cdot \mathcal{N}(\mathbf{x}; \mathbf{y}, \sigma^2 I) \, d\mathbf{y}pσ(x)=pdata(y)N(x;y,σ2I)dy
  • 相当于:每个训练图加高斯噪声 σz\sigma \mathbf{z}σz,得到模糊图

性质:

  • σ\sigmaσ:接近原始数据
  • σ\sigmaσ:分布更平滑,覆盖整个空间(低密度区也被填充)

我们训练一个 噪声条件 score 网络(NCSN)
sθ(x,σ)≈∇xlog⁡pσ(x)\mathbf{s}_\theta(\mathbf{x}, \sigma) \approx \nabla_\mathbf{x} \log p_{\sigma}(\mathbf{x}) sθ(x,σ)xlogpσ(x)

损失函数:
∑i=1Lλi⋅Epσi(x)[∥∇log⁡pσi(x)−sθ(x,σi)∥2]\sum_{i=1}^L \lambda_i \cdot \mathbb{E}_{p_{\sigma_i}(\mathbf{x})} \left[ \| \nabla \log p_{\sigma_i}(\mathbf{x}) - \mathbf{s}_\theta(\mathbf{x}, \sigma_i) \|^2 \right] i=1LλiEpσi(x)[∥∇logpσi(x)sθ(x,σi)2]

通常取 λi=σi2\lambda_i = \sigma_i^2λi=σi2


🔥 第十步:采样——Annealed Langevin Dynamics(退火朗之万)

  1. x∼N(0,I)\mathbf{x} \sim \mathcal{N}(0, I)xN(0,I) 开始(对应最大噪声 σL\sigma_LσL
  2. σ=σL,σL−1,...,σ1\sigma = \sigma_L, \sigma_{L-1}, ..., \sigma_1σ=σL,σL1,...,σ1
    • sθ(x,σ)\mathbf{s}_\theta(\mathbf{x}, \sigma)sθ(x,σ) 运行若干步 Langevin
    • 逐步减小 σ\sigmaσ(从模糊到清晰)
  3. 最终得到清晰样本

✅ 这样:每一步都在 score 准确的区域采样!


⏳ 第十一步:终极形式——SDE(随机微分方程)

把离散的 LLL 个噪声尺度 → 连续时间 t∈[0,T]t \in [0, T]t[0,T]

  • 前向(加噪):
    dx=f(x,t)dt+g(t)dwd\mathbf{x} = \mathbf{f}(\mathbf{x}, t) dt + g(t) d\mathbf{w} dx=f(x,t)dt+g(t)dw
    例如:f=0\mathbf{f} = 0f=0, g(t)=2g(t) = \sqrt{2}g(t)=2 → 纯布朗运动

  • 反向(生成):
    dx=[f(x,t)−g(t)2∇xlog⁡pt(x)]dt+g(t)dwˉd\mathbf{x} = \left[ \mathbf{f}(\mathbf{x}, t) - g(t)^2 \nabla_\mathbf{x} \log p_t(\mathbf{x}) \right] dt + g(t) d\bar{\mathbf{w}} dx=[f(x,t)g(t)2xlogpt(x)]dt+g(t)dwˉ

训练目标:
Et∼U(0,T)[λ(t)⋅Ept(x)[∥∇log⁡pt(x)−sθ(x,t)∥2]]\mathbb{E}_{t \sim \mathcal{U}(0,T)} \left[ \lambda(t) \cdot \mathbb{E}_{p_t(\mathbf{x})} \left[ \| \nabla \log p_t(\mathbf{x}) - \mathbf{s}_\theta(\mathbf{x}, t) \|^2 \right] \right] EtU(0,T)[λ(t)Ept(x)[∥∇logpt(x)sθ(x,t)2]]

  • λ(t)=g(t)2\lambda(t) = g(t)^2λ(t)=g(t)2,则等价于最大化似然

采样:

  • 用 SDE 求解器(如 Euler-Maruyama)模拟反向过程
  • 或用 ODE(probability flow ODE)做确定性生成,并计算精确 log-likelihood

✅ 总结:完整流程

步骤问题解决方案
1数据来自分布 p(x)p(\mathbf{x})p(x)目标是建模 p(x)p(\mathbf{x})p(x)
2pθ(x)=efθ/Zp_\theta(\mathbf{x}) = e^{f_\theta}/Zpθ(x)=efθ/Z 表示通用,但 ZZZ 难算
3用 MLE 训练 → 需要 ZZZ不可行!
4转而学 score ∇log⁡p(x)\nabla \log p(\mathbf{x})logp(x)不依赖 ZZZ
5用 Score Matching 训练 sθ\mathbf{s}_\thetasθ无需真实 score!
6用 Langevin Dynamics 采样仅需 score!
7Langevin 在低密度区失败加噪声扰动数据
8用多尺度噪声训练 NCSN覆盖全空间
9用 Annealed Langevin 采样从模糊到清晰
10推广到连续时间 → SDE统一框架,支持似然计算、ODE 采样等

现在你应该明白了:

Score-Based Models 的核心思想是:绕过归一化常数,直接学习概率的“梯度”,再用物理模拟(Langevin/SDE)来生成数据。

这既是深刻的数学,也是优雅的工程。

你问得非常好!这是理解 Score Matching 最核心、也最容易卡住的地方。我们来用最通俗、最细节的方式,一步一步拆解这个“魔法”是如何发生的


🎯 你的问题总结

  1. p_data(x) 不就是样本分布吗?为什么不是已知的?
  2. 损失函数里有 ∇ log p_data(x),这不是“真值”(Ground Truth)吗?
  3. 更新后的公式全是神经网络 s_θ(x) 的值,没有 GT,那优化目标不就没了?

这三个问题其实是一个问题:“既然真实 score 是未知的,那我们到底在优化什么?”


✅ 第一步:澄清概念 —— p_data(x) 到底是什么?

你说得对!p_data(x) 就是我们想学习的“真实数据分布”。

  • 比如,所有猫的图片构成一个分布 p_data(x)
  • 我们手里的训练集 {x₁, x₂, ..., x_N},就是从这个分布中采样出来的一小部分样本

❗ 关键点:

我们知道的是“样本”,不是“分布”本身!

  • 分布 p_data(x) 是一个连续的、高维的、未知的函数
  • 我们不知道它在任意点 x 的值是多少,更不知道它的梯度 ∇ log p_data(x) 是多少!

所以:

p_data(x) 是未知的!
∇ log p_data(x) 是未知的!
我们只有样本 x_i ~ p_data(x) 可以用!


✅ 第二步:原始损失函数为什么不可行?

我们最初的想法是:

让神经网络 s_θ(x) 去逼近真实 score ∇ log p_data(x)

所以损失函数写成:

L=Epdata(x)[∥∇xlog⁡pdata(x)−sθ(x)∥2]\mathcal{L} = \mathbb{E}_{p_{data}(x)} \left[ \| \nabla_x \log p_{data}(x) - s_\theta(x) \|^2 \right] L=Epdata(x)[xlogpdata(x)sθ(x)2]

这看起来很合理,但问题是:

我们根本不知道 ∇ log p_data(x) 是多少!

这就像是:

“我要训练一个模型去预测明天的天气温度,但我连今天的温度都不知道,我怎么算误差?”

所以这个损失函数虽然形式上完美,但在实践中无法计算,因为缺少 GT。


✅ 第三步:关键突破 —— Hyvärinen (2005) 的“魔法”

Hyvärinen 发现了一个惊人的数学技巧:

可以通过分部积分(integration by parts),把这个依赖于“真实 score”的损失函数,重写成一个只依赖于 s_θ(x)p_data(x) 的形式!

具体推导非常复杂(涉及高维微积分),但我们只需要记住结果:

🔥 最终得到的 Score Matching 损失:

LSM=Epdata(x)[tr(∇xsθ(x))+12∥sθ(x)∥2]+const\mathcal{L}_{SM} = \mathbb{E}_{p_{data}(x)} \left[ \text{tr}\left( \nabla_x s_\theta(x) \right) + \frac{1}{2} \| s_\theta(x) \|^2 \right] + \text{const} LSM=Epdata(x)[tr(xsθ(x))+21sθ(x)2]+const

🧠 这个公式的含义:

  • tr(∇ₓ s_θ(x)):这是对神经网络 s_θ(x)雅可比矩阵(Jacobian matrix)求迹(trace)。简单说,就是对 s_θ(x) 的每一个输出分量,对其每一个输入维度求偏导,然后把对角线上的元素加起来。
  • ||s_θ(x)||²:这是神经网络输出的平方和。
  • 𝔼_p_data(x)[...]:我们仍然需要从真实数据分布中采样 x,但这没问题!因为我们有训练集!

✅ 第四步:为什么这个新损失函数有效?—— 它在“隐式地”优化真实 score!

现在,损失函数里确实没有 ∇ log p_data(x) 了!

那它是在优化什么?

答案是:它在优化一个“代理目标”,这个目标的最小值恰好对应于 s_θ(x) ≈ ∇ log p_data(x)

💡 直观理解:

想象一下,你有一个黑盒子(真实分布 p_data(x)),你不知道里面是什么,但你可以往里面扔一个点 x,然后观察它“流向”哪里(即 ∇ log p_data(x) 的方向)。

Score Matching 的巧妙之处在于:

它不直接测量“流的方向”,而是测量“如果我假设流的方向是 s_θ(x),那么这个假设是否自洽?”

  • 如果 s_θ(x) 真的是真实 score,那么它满足一些特定的数学性质(比如散度定理)。
  • Score Matching 的损失函数就是衡量 s_θ(x) 是否满足这些性质。
  • s_θ(x) 满足这些性质时,损失最小 → 此时 s_θ(x) 就是真实 score!

✅ 第五步:实际操作 —— 如何计算这个损失?

我们不需要知道 p_data(x) 的解析形式,只需要:

  1. 从训练集中随机采样一个点 x(因为 x ~ p_data(x)
  2. x 输入到神经网络 s_θ(x),得到输出向量
  3. 计算 s_θ(x) 的雅可比矩阵 ∇ₓ s_θ(x)
  4. 求迹 tr(∇ₓ s_θ(x))
  5. 计算 ||s_θ(x)||²
  6. 加起来,就是损失的一个样本估计

✅ 所以,整个过程完全基于训练数据和神经网络的输出,不需要任何“真实 score”的 GT!


✅ 第六步:举个一维例子(帮助理解)

假设我们有一堆数据点 x_i,它们来自一个未知分布 p_data(x)

我们定义一个简单的神经网络 s_θ(x) = a * x + b(一维线性函数)。

我们的目标是让 s_θ(x) ≈ d/dx log p_data(x)

根据 Score Matching,损失是:

LSM=Epdata(x)[ddxsθ(x)+12(sθ(x))2]\mathcal{L}_{SM} = \mathbb{E}_{p_{data}(x)} \left[ \frac{d}{dx} s_\theta(x) + \frac{1}{2} (s_\theta(x))^2 \right] LSM=Epdata(x)[dxdsθ(x)+21(sθ(x))2]

因为是一维,tr(∇ₓ s_θ(x)) = d/dx s_θ(x) = a

所以损失变成:

LSM=Epdata(x)[a+12(ax+b)2]\mathcal{L}_{SM} = \mathbb{E}_{p_{data}(x)} \left[ a + \frac{1}{2} (a x + b)^2 \right] LSM=Epdata(x)[a+21(ax+b)2]

现在,我们从训练集中采样 x_i,代入计算:

LSM≈1N∑i=1N[a+12(axi+b)2]\mathcal{L}_{SM} \approx \frac{1}{N} \sum_{i=1}^N \left[ a + \frac{1}{2} (a x_i + b)^2 \right] LSMN1i=1N[a+21(axi+b)2]

然后,我们就可以用梯度下降来优化参数 ab

👉 注意:这里完全没有用到 d/dx log p_data(x)!我们只是在优化 ab,使得这个损失最小。

当损失最小时,s_θ(x) = a*x + b 就会近似等于真实 score!


✅ 总结回答你的问题

你的疑问解答
p_data(x) 不就是样本分布吗?为什么不是已知的?我们知道的是“样本”,不是“分布函数”。分布是未知的、连续的、高维的。我们只能通过样本去“估计”它。
损失函数里有 ∇ log p_data(x),这不是 GT 吗?是的,但它在原始损失里是 GT,但在 Score Matching 重写后的损失里,它被消掉了!
更新后的公式全是神经网络的值,没有 GT,优化目标不就没有了吗?不!优化目标还在! 新的目标是:让神经网络 s_θ(x) 的输出满足某种数学性质(由分部积分推导出)。当它满足这个性质时,它就自动等于真实 score。这是一个“无监督”的、基于数据本身的优化目标。

💡 一句话记住:

Score Matching 是一种“自我指涉”的学习方法:它不比较神经网络和真实值,而是检查神经网络自身的输出是否“自洽”,从而间接地学到真实 score。


http://www.dtcms.com/a/569484.html

相关文章:

  • Erasmus Glioma Database (EGD)数据集下载
  • FeatEnHancer:在低光视觉下增强目标检测及其他任务的分层特征
  • 网站建设流程及构架郑州网站建设推广渠道
  • QuickData
  • 和网站开发公司如何签合同world做网站怎么做连接
  • AIGC中stable-diffusion安装部署
  • 飞腾D3000自带10G网卡调试
  • git简介和常用方法
  • Java114 LeeCode 翻转二叉树
  • 网站建设优化托管如何给网站添加cnzz
  • 免费物流公司网站模板小程序定制开发团队
  • 曙光超算-VASPkit教程
  • MiniEngine学习笔记 : CommandQueue
  • ArCHer:LLM 的高效分层强化学习框架,突破多轮决策瓶颈
  • shell 3-循环
  • Java_LinkedList底层结构
  • 家装网站建设案例搜狗搜索网页版
  • 国内免费网站服务器推荐深圳网站建站公司
  • JavaScript逆向Vue处理事件和捕获错误的核心逻辑
  • Python汤姆猫
  • Java中,直接使用null.equals()
  • GIS坐标系转换相关基本理论
  • 网站开发标书品牌网络推广方案
  • 门户网站制作服务ppt做的模板下载网站有哪些内容
  • Pycharm 中jupyter notebook变量窗口只显示特殊变量
  • 怀化优化生育政策seo怎么做优化排名
  • 1984年-2022年全球年度地表水扩张或消退时间数据集
  • 三乡网站开发网络营销的策略
  • APM学习(4):ArduPilot程序运行流程
  • seo站内站怎么做河北 网站建设