能量模型

本文最后更新于 2026年8月25日 下午

北京大学信息科学技术学院 生成模型基础(2025秋)的课程笔记

第八讲:Energy-based model

最近连日大雨,居家闲来无事,遂继续更新之,不想再鸽
这一章依旧是拓展内容,和物理关系不小,笔者看看还能记得多少()

何为能量模型

首先,我们可以比较显然地将一张图片视为某个概率分布
这只需要把每一个像素转化为灰度值,即可视为高维空间的分布

物理起源

能量模型最早来源于统计物理,用于描述系统状态的概率分布
系统状态$x$出现的概率为:
$p(x)=\dfrac{1}{Z}exp(-\dfrac{E(x)}{T})$
其中$E(x)$为能量函数,$T$为温度,$Z$为归一化常数
$Z= \int exp(-\dfrac{E(x)}{T}) dx$

由此公式,能量较低的状态出现概率较高

迁移到生成模型

对于生成模型,我们将能量函数替换为可学习的参数化函数
$p_\theta(x)=\dfrac{1}{Z(\theta)}exp(f_\theta(x))$,其中$Z(\theta)= \int exp(f_\theta(x)) dx$

这里$x$可以是输入的text/image/audio
能量函数被$f_\theta(x)$所替换,可以是神经网络
由此,可以将其视为对每个可能的$x$做一个softmax预测

为什么要用能量模型

概率分布需要满足$p(x) \ge 0$和归一化条件
很多函数类容易满足非负,但是归一化就不一定了

并且指数分布可以模拟许多尖锐的变化
即使$Z(\theta)$难以计算,模型仍然具备很强的表达能力

优点 :

  • 非常灵活,对$f_\theta$几乎没有假设
  • 无需计算$Z$即可比较两个样本之间相对概率

缺点:

  • 采样和训练都很困难
  • 高维空间计算积分更是困难

具体应用

首先一个非常简单的,上面也有提到
比如比较$x$和$x’$哪个出现概率更大,只需比较$f_\theta(x)$和$f_\theta(x’)$

此外还可以多个专家联合打分,建模为
$p_{\theta_1,\theta_2,\theta_3}=\dfrac{1}{Z}q_{\theta_1}(x)r_{\theta_2}(x)t_{\theta_3}(x)$
虽然每个单独专家是合法概率分布,但其乘积不一定是
这就体现出能量模型的好处,无脑归一化联合分布的概率即可

训练

依旧是经典的最大化对数似然函数
对$p_\theta(x)=\dfrac{1}{Z(\theta)}exp(f_\theta(x))$两边取自然对数
即为$max f_\theta(x_{train})-ln Z(\theta)$
对其取梯度,得到
$\nabla_\theta f_\theta(x_{train})-\dfrac{\nabla_\theta Z(\theta)}{Z(\theta)}$

其中$\nabla_\theta Z(\theta)=\nabla_\theta \int exp(f_\theta(x)) dx$
$=\int \nabla_\theta exp(f_\theta(x)) dx$
$=\int exp(f_\theta(x))\nabla_\theta f_\theta(x)dx$

带回原式,有
$\nabla_\theta f_\theta(x_{train})-\dfrac{\nabla_\theta Z(\theta)}{Z(\theta)}$
$=\nabla_\theta f_\theta(x_{train})-\dfrac{\int exp(f_\theta(x))\nabla_\theta f_\theta(x)dx}{Z(\theta)}$
$=\nabla_\theta f_\theta(x_{train})-\int p_\theta(x) \nabla_\theta f_\theta(x)dx$
$=\nabla_\theta f_\theta(x_{train})-E_{x \sim p_{model}}\nabla_\theta f_\theta(x)$

于是,我们训练的目的就是最大化上式
前一项很好理解,需要提高训练样本的得分
后一项则是防止$Z$持续增大,为模型生成的样本分配较低的评分
这种方法被称作contrastive divergence(对比散度)

对比学习

上面刚好提到了对比散度,这里我们简要介绍一下对比学习

对比学习是一种自监督学习方法,广泛用于cv任务
原理很简单,相似的对象特征表示也会相似,不同的对象反之
核心在于:采用数据增强技术生成相似对象对,采用随机采样生成不同对象对

上面是一个简单的例子

采样

MCMC

显然我们无法直接从$p_\theta(x)$中直接采样,但可以很容易地比较两个样本的采样概率大小
于是我们可以采取一种方法,称为Markov Chain Monte Carlo(MCMC)
本质是用马尔科夫链随机游走,逐步逼近真实分布

首先随机初始化$x^0$,$t=0$
然后令$x’=x^t+noise$
若$f_\theta(x’)>f_\theta(x^t)$,那么就令$x^{t+1}=x’$
否则以$exp(f_\theta(x’)-f_\theta(x^t))$的概率接受$x^{t+1}=x’$
由此当$t \rightarrow \infty$时,$x^t \sim p(x)$

Langevin sampling

利用score function
$\nabla_x logp_\theta(x)=\nabla_x (f_\theta(x)-log Z(\theta)=\nabla_x f_\theta(x)$
于是无需计算$Z(\theta)$即可得到score function

我们令$\pi(x)$为一个易于采样的先验分布,于是Langevin sampling如下
$x^0 \sim \pi(x)$
$x^{t+1} \sim x^t+\epsilon \nabla_x logp_\theta(x^t)+\sqrt{2\epsilon}z^t$,对于$t=0,1,…,T-1$
其中$z^t \sim N(0,1)$
若$\epsilon \rightarrow 0$,$T \rightarrow \infty$,则有$x^T \sim p_\theta(x)$


能量模型
https://yjyxfcy.github.io/2026/08/25/gen8/
作者
Yjy
发布于
2026年8月25日
更新于
2026年8月25日
许可协议