Toriskia 's Blog

13 篇文章 · 12 个标签 · 6 个友链

← 返回文章列表

2026.03.23

Energy-Based Model

包含 AI 辅助生成内容

一、Energy-Based Model(EBM)基本思想#

1. 生成模型目标#

生成模型希望建模数据分布:

P(x)P(x)

它需要满足:

P(x)0,P(x)dx=1P(x) \ge 0, \quad \int P(x)\,\mathrm{d}x = 1

2. 能量模型定义#

EBM 不是直接定义概率,而是定义一个能量函数:

Eθ(x)E_\theta(x)

再由能量诱导出概率分布:

pθ(x)=1Z(θ)eEθ(x)p_\theta(x) = \frac{1}{Z(\theta)} e^{-E_\theta(x)}

其中:

Z(θ)=eEθ(x)dxZ(\theta) = \int e^{-E_\theta(x)} \,\mathrm{d}x

这个量叫做 配分函数(partition function)

模型学习的目标:让真实数据对应较低能量,让非真实数据对应较高能量。


二、Hopfield Network#

Hopfield 网络是一个确定性的能量模型

1. 网络结构#

  • 全连接
  • 对称权重:wij=wjiw_{ij} = w_{ji}
  • 神经元状态:yi{+1,1}y_i \in \{+1, -1\}

局部场定义为:

zi=jwijyj+biz_i = \sum_j w_{ij} y_j + b_i

更新规则:

  • 如果 yizi<0y_i z_i < 0,就翻转 yiy_i

2. 能量函数#

Hopfield 网络的能量函数为:

E(y)=i<jwijyiyjibiyiE(y) = -\sum_{i<j} w_{ij} y_i y_j - \sum_i b_i y_i

性质:

  • 每次 neuron flip 都会使能量下降
  • 能量有下界
  • 系统最终收敛到某个局部最小值

3. Hopfield 学习规则(Hebbian Learning)#

为了让某个 pattern y(p)y^{(p)} 成为稳定点,可以使用 Hebbian 规则:

wij=1Npp=1Npyi(p)yj(p),ijw_{ij} = \frac{1}{N_p} \sum_{p=1}^{N_p} y_i^{(p)} y_j^{(p)}, \quad i \ne j

矩阵形式常简写为:

WEdata[yyT]W \approx \mathbb{E}_{\text{data}} \bigl[ y y^T \bigr]

这里本质上是在把数据中的相关结构刻进权重矩阵。


三、从 Hopfield 到概率模型(Boltzmann Machine)#

Hopfield 是确定性系统,但我们希望模型能够按概率生成样本,于是引入热力学里的 Boltzmann 分布。

1. Boltzmann 分布#

令系统状态为 yy,定义:

P(y)=1ZeE(y)P(y) = \frac{1}{Z} e^{-E(y)}

其中:

Z=yeE(y)Z = \sum_y e^{-E(y)}

能量越低的状态,概率越大。


2. Gibbs Sampling#

对于二值单元,若采用 0/10/1 编码,常见的条件分布形式为:

P(yi=1yi)=σ(jwijyj+bi)P(y_i = 1 \mid y_{-i}) = \sigma \left( \sum_j w_{ij} y_j + b_i \right)

其中 yiy_{-i} 表示除第 ii 个变量外的所有变量。

于是可以反复执行:

  • 固定其他变量
  • 采样一个变量
  • 循环更新

最终得到近似来自 P(y)P(y) 的样本,这就是 Gibbs sampling


四、带隐藏变量的 Boltzmann Machine#

在更一般的 Boltzmann Machine 中,状态由 visible 和 hidden 两部分组成:

y=(v,h)y = (v, h)

联合分布为:

P(v,h)=1ZeE(v,h)P(v,h) = \frac{1}{Z} e^{-E(v,h)}

其中:

Z=v,heE(v,h)Z = \sum_{v,h} e^{-E(v,h)}

我们真正关心的是 visible 的边缘分布:

P(v)=hP(v,h)P(v) = \sum_h P(v,h)

给定训练集 P\mathcal{P},最大似然目标为:

L(W)=1PvPlogP(v)\mathcal{L}(W) = \frac{1}{\lvert \mathcal{P} \rvert} \sum_{v \in \mathcal{P}} \log P(v)

其梯度可以写成:

WL=1PvPWlogP(v)=1PvP(WlogheE(v,h)WlogZ)=Evdata[EhP(hv)[WE(v,h)]]E(v,h)Pmodel[WE(v,h)]\begin{aligned} \nabla_W \mathcal{L} &= \frac{1}{\lvert \mathcal{P} \rvert} \sum_{v \in \mathcal{P}} \nabla_W \log P(v) \\ &= \frac{1}{\lvert \mathcal{P} \rvert} \sum_{v \in \mathcal{P}} \left( \nabla_W \log \sum_h e^{-E(v,h)} - \nabla_W \log Z \right) \\ &= \mathbb{E}_{v \sim \text{data}} \left[ \mathbb{E}_{h \sim P(h \mid v)} \bigl[ -\nabla_W E(v,h) \bigr] \right] - \mathbb{E}_{(v,h) \sim P_{\text{model}}} \bigl[ -\nabla_W E(v,h) \bigr] \end{aligned}

如果能量函数对参数 WW 的导数满足:

WE(v,h)=yyT,y=(v,h),-\nabla_W E(v,h) = y y^T, \quad y = (v,h),

那么就得到熟悉的形式:

WL=Evdata,hP(hv)[yyT]E(v,h)Pmodel[yyT]\nabla_W \mathcal{L} = \mathbb{E}_{v \sim \text{data},\, h \sim P(h \mid v)} \bigl[ y y^T \bigr] - \mathbb{E}_{(v,h) \sim P_{\text{model}}} \bigl[ y y^T \bigr]

解释:

含义
Evdata,hP(hv)[yyT]\mathbb{E}_{v \sim \text{data},\, h \sim P(h \mid v)} [yy^T]positive phase:把 visible 固定为真实数据,再对 hidden 后验取期望
E(v,h)Pmodel[yyT]\mathbb{E}_{(v,h) \sim P_{\text{model}}} [yy^T]negative phase:对模型自身生成的联合分布取期望

五、Restricted Boltzmann Machine(RBM)#

RBM 对 Boltzmann Machine 的结构做了限制:

  • visible 和 hidden 之间有连接
  • visible 内部没有连接
  • hidden 内部没有连接

这种限制带来两个直接好处:

  • 条件分布可以分解
  • Gibbs sampling 更高效

一个常见的 RBM 能量函数写成:

E(v,h)=bTvcThvTWhE(v,h) = -b^T v - c^T h - v^T W h

其中 vv 是 visible,hh 是 hidden,b,cb,c 是偏置项。

由于图结构是二部图,条件分布可以分解为:

P(hj=1v)=σ(W:,jTv+cj)P(h_j = 1 \mid v) = \sigma \bigl( W_{:,j}^T v + c_j \bigr) P(vi=1h)=σ(Wi,:h+bi)P(v_i = 1 \mid h) = \sigma \bigl( W_{i,:} h + b_i \bigr)

因此,RBM 的权重梯度为:

WL=Evdata,hP(hv)[vhT]E(v,h)Pmodel[vhT]\nabla_W \mathcal{L} = \mathbb{E}_{v \sim \text{data},\, h \sim P(h \mid v)} \bigl[ v h^T \bigr] - \mathbb{E}_{(v,h) \sim P_{\text{model}}} \bigl[ v h^T \bigr]

对应的偏置梯度为:

bL=Evdata[v]EvPmodel[v]\nabla_b \mathcal{L} = \mathbb{E}_{v \sim \text{data}} [v] - \mathbb{E}_{v \sim P_{\text{model}}} [v] cL=Evdata,hP(hv)[h]E(v,h)Pmodel[h]\nabla_c \mathcal{L} = \mathbb{E}_{v \sim \text{data},\, h \sim P(h \mid v)} [h] - \mathbb{E}_{(v,h) \sim P_{\text{model}}} [h]

Contrastive Divergence(CD-k)#

实际训练时,负相通常用 Contrastive Divergence 近似。

步骤:

  1. 输入真实数据 v0v_0
  2. 采样 h0P(hv0)h_0 \sim P(h \mid v_0)
  3. 采样 v1P(vh0)v_1 \sim P(v \mid h_0)
  4. 继续交替采样,直到得到 vk,hkv_k, h_k
  5. 用下面的近似更新:
ΔWv0h0TvkhkT\Delta W \propto v_0 h_0^T - v_k h_k^T

通常 k=13k = 1 \sim 3 就已经能工作得不错,这就是常说的 CD-1 / CD-k


六、General Energy-Based Model 训练公式#

更一般地,设模型为:

pθ(x)=1Z(θ)eEθ(x)p_\theta(x) = \frac{1}{Z(\theta)} e^{-E_\theta(x)}

其中:

Z(θ)=eEθ(x)dxZ(\theta) = \int e^{-E_\theta(x)} \,\mathrm{d}x

单个样本的对数似然为:

logpθ(x)=Eθ(x)logZ(θ)\log p_\theta(x) = -E_\theta(x) - \log Z(\theta)

对整个数据集取平均,得到目标函数:

L(θ)=Exdata[logpθ(x)]\mathcal{L}(\theta) = \mathbb{E}_{x \sim \text{data}} \bigl[ \log p_\theta(x) \bigr]

其梯度为:

θL=Exdata[θEθ(x)]+Expθ[θEθ(x)]\nabla_\theta \mathcal{L} = -\mathbb{E}_{x \sim \text{data}} \bigl[ \nabla_\theta E_\theta(x) \bigr] + \mathbb{E}_{x \sim p_\theta} \bigl[ \nabla_\theta E_\theta(x) \bigr]

等价地,也可以写成:

θL=Exdata[θEθ(x)]Expθ[θEθ(x)]\nabla_\theta \mathcal{L} = \mathbb{E}_{x \sim \text{data}} \bigl[ -\nabla_\theta E_\theta(x) \bigr] - \mathbb{E}_{x \sim p_\theta} \bigl[ -\nabla_\theta E_\theta(x) \bigr]

这就是所有 EBM 的统一训练公式。


七、Sampling 方法(用于负相)#

EBM 的主要难点在于配分函数:

Z(θ)=eEθ(x)dxZ(\theta) = \int e^{-E_\theta(x)} \,\mathrm{d}x

通常不可直接计算,因此负相

Expθ[f(x)]\mathbb{E}_{x \sim p_\theta} \bigl[ f(x) \bigr]

往往要靠采样近似。

1. 从 MCMC 开始#

我们的目标不是直接算出 pθ(x)p_\theta(x) 的归一化常数,而是构造一个马尔可夫链

x(0)x(1)x(2)x^{(0)} \to x^{(1)} \to x^{(2)} \to \cdots

使得这个链的平稳分布正好是目标分布:

π(x)=pθ(x)eEθ(x)\pi(x) = p_\theta(x) \propto e^{-E_\theta(x)}

当链跑得足够久以后,后面的样本就近似来自 π(x)\pi(x),于是可以用样本平均估计负相:

Expθ[f(x)]1Tt=1Tf(x(t))\mathbb{E}_{x \sim p_\theta} \bigl[ f(x) \bigr] \approx \frac{1}{T} \sum_{t=1}^T f \bigl( x^{(t)} \bigr)

这就是 MCMC(Markov Chain Monte Carlo) 的基本思想。

2. Metropolis-Hastings(MH)#

MH 的做法是:给定当前状态 xx,先从 proposal distribution 里提出一个候选样本:

xq(xx)x' \sim q(x' \mid x)

然后以某个接受概率决定是否跳到 xx'

α(x,x)=min(1,π(x)q(xx)π(x)q(xx))\alpha(x, x') = \min \left( 1, \frac{\pi(x') q(x \mid x')}{\pi(x) q(x' \mid x)} \right)

由于 EBM 里

π(x)eEθ(x),\pi(x) \propto e^{-E_\theta(x)},

所以配分函数 Z(θ)Z(\theta) 会自动约掉,接受率变成:

α(x,x)=min(1,eEθ(x)q(xx)eEθ(x)q(xx))\alpha(x, x') = \min \left( 1, \frac{e^{-E_\theta(x')} q(x \mid x')}{e^{-E_\theta(x)} q(x' \mid x)} \right)

如果 proposal 是对称的,即

q(xx)=q(xx),q(x' \mid x) = q(x \mid x'),

那么就进一步简化为:

α(x,x)=min(1,eEθ(x)+Eθ(x))\alpha(x, x') = \min \left( 1, e^{-E_\theta(x') + E_\theta(x)} \right)

直觉上:

  • 如果新状态能量更低,通常更容易被接受
  • 如果新状态能量更高,也不是绝对拒绝,而是以一定概率接受

这样链既倾向低能量区域,又不会太容易卡在局部区域里。

3. Gibbs Sampling#

Gibbs sampling 适用于每个变量的条件分布都容易采样的情形。

x=(x1,x2,,xd),x = (x_1, x_2, \dots, x_d),

那么 Gibbs 的一步就是依次从条件分布采样:

xi(t+1)pθ(xix1(t+1),,xi1(t+1),xi+1(t),,xd(t))x_i^{(t+1)} \sim p_\theta \bigl( x_i \mid x_1^{(t+1)}, \dots, x_{i-1}^{(t+1)}, x_{i+1}^{(t)}, \dots, x_d^{(t)} \bigr)

也就是说,每次固定其他变量,只重采样一个坐标。

对 Boltzmann Machine / RBM 来说,这特别合适,因为条件分布往往正好能写出来。比如 RBM 中:

P(hj=1v)=σ(W:,jTv+cj)P(h_j = 1 \mid v) = \sigma \bigl( W_{:,j}^T v + c_j \bigr) P(vi=1h)=σ(Wi,:h+bi)P(v_i = 1 \mid h) = \sigma \bigl( W_{i,:} h + b_i \bigr)

于是可以交替执行:

vhvhv \to h \to v \to h \to \cdots

从而得到近似来自模型分布的样本。

从更抽象的角度看,Gibbs sampling 可以看成 MH 的一个特例:proposal 正好取目标条件分布,因此接受率恒为 1。

4. 常见方法对比#

方法适用场景
Gibbs sampling条件分布容易写出的离散模型,如 RBM
Metropolis-Hastings一般 EBM,条件分布不一定容易直接采样
Langevin dynamics连续深度 EBM,利用能量梯度采样
HMC高维连续变量
Importance sampling估计期望或积分

相关采样技巧还包括:

  • Inverse CDF
  • Box-Muller(Gaussian)
  • Importance Sampling
  • Annealing(退火)

八、EBM 的应用#

1. Pattern Memory(Hopfield)#

  • 联想记忆
  • 图像恢复

2. Generative Model(Boltzmann / RBM)#

  • 图像生成
  • 推荐系统
  • topic model

3. Deep Boltzmann Machine#

  • 早期 deep generative model
  • Deep Belief Network 等相关结构

4. Modern EBM#

现代 EBM 常见形式是直接用神经网络表示能量函数:

Eθ(x)=fθ(x)E_\theta(x) = f_\theta(x)

其中 fθf_\theta 常常由 CNN、Transformer 等网络实现。

应用包括:

  • 图像生成(score-based model / diffusion 可从能量视角理解)
  • 对比学习(InfoNCE 可以看成条件 EBM)
  • 强化学习(某些视角下 energy 与 value / Q function 相关)
  • NLP(logit 与 energy 存在对应关系)

Softmax 分类器也可以写成条件 EBM:

P(yx)=eE(x,y)yeE(x,y)P(y \mid x) = \frac{e^{-E(x,y)}}{\sum_{y'} e^{-E(x,y')}}

因此可以把分类模型理解为:

分类模型 = 条件 EBM