基于能量的模型(Energy-Based Models, EBMs)中的噪声对比估计(Noise-Contrastive Estimation, NCE)训练原理与概率归一化机制
字数 2596 2025-12-09 02:06:28

基于能量的模型(Energy-Based Models, EBMs)中的噪声对比估计(Noise-Contrastive Estimation, NCE)训练原理与概率归一化机制


1. 题目描述

在基于能量的模型中,我们定义一个能量函数 \(E_\theta(x)\) 来为数据 \(x\) 分配一个标量能量(通常能量越低表示概率越高)。概率分布可表示为:

\[p_\theta(x) = \frac{e^{-E_\theta(x)}}{Z(\theta)}, \]

其中 \(Z(\theta) = \int e^{-E_\theta(x)} dx\) 是配分函数(归一化常数)。直接优化最大似然估计(MLE)时,计算 \(Z(\theta)\) 通常难以处理(尤其是在高维连续数据中)。噪声对比估计(NCE)通过将概率密度估计问题转化为二分类问题,从而避免显式计算 \(Z(\theta)\)。本题将详细讲解 NCE 在 EBMs 中的工作原理、训练目标推导及实现细节。


2. 问题背景:为什么需要 NCE?

  • 配分函数 \(Z(\theta)\) 难以计算:对于复杂模型,积分 \(Z(\theta)\) 通常无解析解,蒙特卡洛估计在高维空间方差很大。
  • 目标:通过对比真实数据分布 \(p_{\text{data}}(x)\) 与噪声分布 \(p_n(x)\)(例如均匀分布或高斯分布),让模型学会区分数据与噪声,从而隐式学习到 \(p_\theta(x)\)

3. NCE 的核心思想

将问题重新定义:

  • 构造一个二分类任务,其中样本来自两类:
    • 真实数据样本(从 \(p_{\text{data}}(x)\) 采样,标记为类别 \(y=1\))。
    • 噪声样本(从已知的简单分布 \(p_n(x)\) 采样,标记为类别 \(y=0\))。
  • 训练一个分类器(基于能量模型)来区分这两类样本,分类器的输出为样本是真实数据的概率。

4. 分类器的构建

定义分类函数(基于能量模型):

\[p(y=1 \mid x) = \frac{p_\theta(x)}{p_\theta(x) + p_n(x)} = \frac{e^{-E_\theta(x) - c}}{e^{-E_\theta(x) - c} + p_n(x)}, \]

其中 \(c = -\log Z(\theta)\) 是一个常数(对数配分函数)。注意:这里我们显式引入参数 \(c\) 作为可学习的偏置,从而避免直接计算 \(Z(\theta)\)


5. 训练目标函数

假设我们采样:

  • \(m\) 个真实数据样本 \(x_1, \dots, x_m \sim p_{\text{data}}(x)\)
  • \(n\) 个噪声样本 \(\tilde{x}_1, \dots, \tilde{x}_n \sim p_n(x)\)

NCE 的目标是最大化二分类的对数似然:

\[J(\theta, c) = \sum_{i=1}^m \log p(y=1 \mid x_i) + \sum_{j=1}^n \log p(y=0 \mid \tilde{x}_j). \]

代入分类概率公式:

\[p(y=0 \mid x) = 1 - p(y=1 \mid x) = \frac{p_n(x)}{p_\theta(x) + p_n(x)}. \]

\(p_\theta(x) = e^{-E_\theta(x) - c}\) 代入,得到:

\[J(\theta, c) = \sum_{i=1}^m \log \frac{e^{-E_\theta(x_i) - c}}{e^{-E_\theta(x_i) - c} + p_n(x_i)} + \sum_{j=1}^n \log \frac{p_n(\tilde{x}_j)}{e^{-E_\theta(\tilde{x}_j) - c} + p_n(\tilde{x}_j)}. \]


6. 训练过程与梯度计算

  1. 参数更新:通过梯度上升最大化 \(J(\theta, c)\)
  2. 梯度形式:以第一个求和项为例,对参数 \(\theta\) 的梯度为:

\[\nabla_\theta \log p(y=1 \mid x_i) = \left(1 - p(y=1 \mid x_i)\right) \left( -\nabla_\theta E_\theta(x_i) \right). \]

类似可求对 \(c\) 的梯度。
3. 物理意义:梯度推动模型降低真实数据样本的能量,同时提高噪声样本的能量(通过权重 \(1 - p(y=1 \mid x)\) 调整更新幅度)。


7. 噪声分布的选择

  • 常用简单分布:均匀分布、高斯分布、混合高斯分布。
  • 要求:噪声分布应易于采样且与数据分布有部分重叠,以提供“有挑战性”的负样本。

8. 最终概率的恢复

训练完成后,模型参数 \(\theta\)\(c\) 固定,我们可以通过下式计算归一化概率:

\[p_\theta(x) = e^{-E_\theta(x) - c}. \]

此时 \(c\) 已学习到近似 \(-\log Z(\theta)\),从而无需显式计算配分函数。


9. 扩展:NCE 与 InfoNCE 的联系

  • 在对比学习中,InfoNCE 损失是 NCE 的变体,其中噪声分布是通过批次内其他样本隐式构造的。
  • 区别:NCE 通常使用显式噪声分布,而 InfoNCE 将噪声样本视为批次中的其他数据点。

10. 实际应用注意事项

  • 噪声样本数量:实践中常取 \(n = m\)(等量正负样本)。
  • 数值稳定性:计算指数时需注意数值溢出,通常用 log-sum-exp 技巧。
  • 能量函数设计:可以是神经网络,需确保能量函数足够灵活以捕捉数据分布。

通过 NCE,我们成功避免了配分函数的直接计算,将概率建模转化为可训练的二分类问题,从而使得基于能量的模型在大规模数据上可行。

基于能量的模型(Energy-Based Models, EBMs)中的噪声对比估计(Noise-Contrastive Estimation, NCE)训练原理与概率归一化机制 1. 题目描述 在基于能量的模型中,我们定义一个能量函数 \( E_ \theta(x) \) 来为数据 \( x \) 分配一个标量能量(通常能量越低表示概率越高)。概率分布可表示为: \[ p_ \theta(x) = \frac{e^{-E_ \theta(x)}}{Z(\theta)}, \] 其中 \( Z(\theta) = \int e^{-E_ \theta(x)} dx \) 是配分函数(归一化常数)。直接优化最大似然估计(MLE)时,计算 \( Z(\theta) \) 通常难以处理(尤其是在高维连续数据中)。噪声对比估计(NCE)通过将概率密度估计问题转化为二分类问题,从而避免显式计算 \( Z(\theta) \)。本题将详细讲解 NCE 在 EBMs 中的工作原理、训练目标推导及实现细节。 2. 问题背景:为什么需要 NCE? 配分函数 \( Z(\theta) \) 难以计算 :对于复杂模型,积分 \( Z(\theta) \) 通常无解析解,蒙特卡洛估计在高维空间方差很大。 目标 :通过对比真实数据分布 \( p_ {\text{data}}(x) \) 与噪声分布 \( p_ n(x) \)(例如均匀分布或高斯分布),让模型学会区分数据与噪声,从而隐式学习到 \( p_ \theta(x) \)。 3. NCE 的核心思想 将问题重新定义: 构造一个二分类任务,其中样本来自两类: 真实数据样本 (从 \( p_ {\text{data}}(x) \) 采样,标记为类别 \( y=1 \))。 噪声样本 (从已知的简单分布 \( p_ n(x) \) 采样,标记为类别 \( y=0 \))。 训练一个分类器(基于能量模型)来区分这两类样本,分类器的输出为样本是真实数据的概率。 4. 分类器的构建 定义分类函数(基于能量模型): \[ p(y=1 \mid x) = \frac{p_ \theta(x)}{p_ \theta(x) + p_ n(x)} = \frac{e^{-E_ \theta(x) - c}}{e^{-E_ \theta(x) - c} + p_ n(x)}, \] 其中 \( c = -\log Z(\theta) \) 是一个常数(对数配分函数)。注意:这里我们显式引入参数 \( c \) 作为可学习的偏置,从而避免直接计算 \( Z(\theta) \)。 5. 训练目标函数 假设我们采样: \( m \) 个真实数据样本 \( x_ 1, \dots, x_ m \sim p_ {\text{data}}(x) \) \( n \) 个噪声样本 \( \tilde{x}_ 1, \dots, \tilde{x}_ n \sim p_ n(x) \) NCE 的目标是最大化二分类的对数似然: \[ J(\theta, c) = \sum_ {i=1}^m \log p(y=1 \mid x_ i) + \sum_ {j=1}^n \log p(y=0 \mid \tilde{x} j). \] 代入分类概率公式: \[ p(y=0 \mid x) = 1 - p(y=1 \mid x) = \frac{p_ n(x)}{p \theta(x) + p_ n(x)}. \] 将 \( p_ \theta(x) = e^{-E_ \theta(x) - c} \) 代入,得到: \[ J(\theta, c) = \sum_ {i=1}^m \log \frac{e^{-E_ \theta(x_ i) - c}}{e^{-E_ \theta(x_ i) - c} + p_ n(x_ i)} + \sum_ {j=1}^n \log \frac{p_ n(\tilde{x} j)}{e^{-E \theta(\tilde{x}_ j) - c} + p_ n(\tilde{x}_ j)}. \] 6. 训练过程与梯度计算 参数更新 :通过梯度上升最大化 \( J(\theta, c) \)。 梯度形式 :以第一个求和项为例,对参数 \( \theta \) 的梯度为: \[ \nabla_ \theta \log p(y=1 \mid x_ i) = \left(1 - p(y=1 \mid x_ i)\right) \left( -\nabla_ \theta E_ \theta(x_ i) \right). \] 类似可求对 \( c \) 的梯度。 物理意义 :梯度推动模型降低真实数据样本的能量,同时提高噪声样本的能量(通过权重 \( 1 - p(y=1 \mid x) \) 调整更新幅度)。 7. 噪声分布的选择 常用简单分布:均匀分布、高斯分布、混合高斯分布。 要求:噪声分布应易于采样且与数据分布有部分重叠,以提供“有挑战性”的负样本。 8. 最终概率的恢复 训练完成后,模型参数 \( \theta \) 和 \( c \) 固定,我们可以通过下式计算归一化概率: \[ p_ \theta(x) = e^{-E_ \theta(x) - c}. \] 此时 \( c \) 已学习到近似 \( -\log Z(\theta) \),从而无需显式计算配分函数。 9. 扩展:NCE 与 InfoNCE 的联系 在对比学习中,InfoNCE 损失是 NCE 的变体,其中噪声分布是通过批次内其他样本隐式构造的。 区别:NCE 通常使用显式噪声分布,而 InfoNCE 将噪声样本视为批次中的其他数据点。 10. 实际应用注意事项 噪声样本数量 :实践中常取 \( n = m \)(等量正负样本)。 数值稳定性 :计算指数时需注意数值溢出,通常用 log-sum-exp 技巧。 能量函数设计 :可以是神经网络,需确保能量函数足够灵活以捕捉数据分布。 通过 NCE,我们成功避免了配分函数的直接计算,将概率建模转化为可训练的二分类问题,从而使得基于能量的模型在大规模数据上可行。