基于能量的模型(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\) 的梯度。
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,我们成功避免了配分函数的直接计算,将概率建模转化为可训练的二分类问题,从而使得基于能量的模型在大规模数据上可行。