- 示例工程
【免费下载链接】NYU-DLSP20
NYU Deep Learning Spring 2020
本文基于 NYU-DLSP20 课程第十五周讲义(docs/zh/week15/15.md)及其实践课讲义(15-1.md、15-2.md),系统梳理隐变量能量基础模型(Latent Variable Energy-Based Models, EBMs)的动机、推理、训练与自监督应用。读者将掌握:为什么一对多映射场景下前馈网络失效、如何用能量函数与自由能建模数据流形、如何通过"温度"松弛获得可微的自由能(softmin),以及如何用能量损失、Hinge 损失、Log 损失训练 EBM,最终用条件 EBM 完成"号角"流形的自监督学习。
一、为什么需要隐变量 EBM:一对多映射的困境
标准的 Feed-Forward 神经网络天然建模的是"一个输入 → 一个输出"的确定性映射。然而真实数据中大量存在一个输入对应多个合法输出的隐式依赖(implicit dependencies),此时前向网络无法刻画数据的内在结构。
课程用一个椭圆流形上的玩具数据集直观展示了这一困境:给定输入 $x$,可能输出多个 $\vect{y}$;例如固定 $y_1$ 时,几乎总是存在两个不同的 $y_2$ 与之对应。这种"一对多"关系正是引入隐变量能量基础模型的动机——用一个额外的隐变量 $z$ 来"解释"输出的多样性,用能量函数而非条件概率来度量兼容性。
1.1 椭圆数据集的生成
训练样本来自如下参数化椭圆:
$$ \vect{y} = \begin{bmatrix} \rho_1(x)\cos(\theta) + \epsilon \ \rho_2(x)\sin(\theta) + \epsilon \end{bmatrix}, $$
其中随机变量满足:
- $x \sim \mathcal{U}(0,1)$(输入)
- $\theta \sim \mathcal{U}(0,2\pi)$(角度)
- $\epsilon \sim \mathcal{N}\left[0, \left(\tfrac{1}{20}\right)^2\right]$(观测噪声)
而 $\rho: \mathbb{R} \mapsto \mathbb{R}^2$ 将 $x$ 映射为椭圆的半轴长度:
$$ \rho(x) = \begin{bmatrix} \alpha x + \beta (1-x) \ \beta x + \alpha (1-x) \end{bmatrix}\exp(2x). $$
下图(图 1,原图见 15-1.md)是该椭圆函数的 3D 可视化:同一 $x$ 对应一"环"而非一个点,明确展示了多输出特性。
1.2 简化设定与能量函数定义
为便于手工推演,固定输入 $x=0$ 并令 $\alpha = 1.5,\ \beta = 2$,椭圆退化为:
$$ \vect{y} = \begin{bmatrix} 2\cos(\theta) + \epsilon \ 1.5\sin(\theta) + \epsilon \end{bmatrix}. $$
从中随机采样 $24$ 个数据点 $Y = [\vect{y}^{(1)},\ldots,\vect{y}^{(24)}]$。与此同时,取隐变量 $z = [0:\tfrac{\pi}{24}:2\pi)$,送入解码器(decoder)生成流形上的点 $\tilde{\vect{y}}$,其中解码器为:
$$ \vect{g}(z) = [w_1\cos(z),\ w_2\sin(z)]^{\top},\quad \vect{g}:\mathbb{R}\mapsto\mathbb{R}^2. $$
能量函数定义为数据点与解码点之间的平方欧几里得距离:
$$ E(\vect{y},z) \equiv E(\vect{y},\tilde{\vect{y}}(z)) = [y_1 - g_1(z)]^2 + [y_2 - g_2(z)]^2, \quad \vect{y} \in Y. $$
对 $Y$ 中每个样本 $i\in[1,24]$,通过改变 $z$ 可得到 24 条能量曲线 $E_1,\ldots,E_{24}$(横轴为隐变量 $z$,纵轴为能量值)。这里已经能看到 EBM 的核心思想:能量低 ⇔ 兼容性好(该隐变量能合理解释该样本),能量高 ⇔ 兼容性差。
二、能量函数剖析:以第 23 个样本为例
考察固定样本 $\vect{y}^{(23)}$ 的能量函数 $E_{23}(z)$(见 15-1.md):
(上图为后文自由能横截面示意图,下图为能量曲线形态分析)
$E_{23}$ 是一个周期函数:最大值出现在 $z=0$ 与 $z=2\pi$ 附近,最小值出现在 $z=\pi$ 附近。这种对称形态来源于 $\vect{y}^{(23)}$ 在 $\vect{y}$ 空间中相对解码环 $\tilde{\vect{y}}$ 的位置——$\vect{y}^{(23)}$ 恰好与解码环的水平轴对齐。
隐变量 $z$ 可视为一个反向极坐标角(顺时针为正方向):
- $z=0$(最左端紫色点):$\tilde{\vect{y}}$ 与 $\vect{y}^{(23)}$ 欧氏距离大 → 能量高;
- $z\to\pi$(最右端紫色点):$\tilde{\vect{y}}$ 逼近 $\vect{y}^{(23)}$ → 能量降至最小;
- $z$ 继续从 $\pi$ 增至 $2\pi$:距离重新拉大 → 能量回升至最大。
2.1 零温度极限自由能与隐变量推理
在理解能量分布后,定义零温度极限(Zero-Temperature Limit, ZTL)自由能:
$$ F_{\infty}(\vect{y}) \equiv \min_{z} E(\vect{y}, z), $$
以及取得该最小值的最优隐变量:
$$ \check{z} = \arg\min_{z} E(\vect{y}, z). $$
$\check{z}$ 的求解属于**推理(inference)**过程,可采用多种优化算法,例如:
- 穷举搜索(exhaustive search)
- 共轭梯度(conjugate gradient)
- 线搜索(line search)
- 有限内存 BFGS(limited-memory BFGS, L-BFGS)
在 $\vect{y}$ 空间中观察该优化过程:随着迭代推进,隐变量不断增大,解码点 $\tilde{\vect{y}}$ 沿顺时针方向逼近 $\vect{y}^{(23)}$;到达自由能时,$\tilde{\vect{y}}$ 与样本的距离(亦即能量)被最小化。因此,通过计算 $F_\infty$ 与对应的 $\check{z}$,即可找到与样本数据最贴近的解码点——这就是隐变量 EBM 完成"用流形解释数据"的推理方式。
三、自由能稠密估计:从网格点到热力图
为了更深入理解自由能函数,课程在 $\vect{y}$ 空间中铺设网格(15-1.md),蓝色曲线代表流形(隐变量 $z$ 的所有可能取值)。对网格上的每个点计算:
$$ F_\infty = \min_z E(\vect{y},z) = E(\vect{y},\check{z}). $$
推理过程的几何直观:从蓝色流形上任选一点 $z$ 出发,沿流形移动寻找离采样点 $\vect{y}$ 最近的流形点 $\check{z}$;最终自由能就是样本点 $\vect{y}$ 到 $\tilde{\vect{y}}(\check{z})$ 的欧氏距离。
课程进一步考察网格中 5 个不同颜色的样本点:
- 蓝色点:能量函数幅度最大,5 个点中自由能最大;
- 橙色点:自由能最小。
5 条能量函数曲线中,交叉号(×)标记了各能量函数对应的 $\check{z}$ 取值。
3.1 自由能的定义域与值域
由于能量使用欧氏距离,自由能函数取值非负标量:
$$ F_\infty: \mathbb{R}^2 \rightarrow \mathbb{R}^+. $$
- 定义域:$\mathbb{R}^2$(仅 $\vect{y}$ 空间,与隐变量无关);
- 值域:$\mathbb{R}^+$(非负标量)。
将网格中所有点的自由能值绘制成热力图(图中箭头表示梯度值),即可看到能量"盆地"集中在流形附近、向外二次增大的全景。需要强调:$F_\infty$完全不依赖隐变量 $z$——它是在 $z$ 上取最小值后的结果,只是 $\vect{y}$ 的标量函数。
四、松弛自由能:用"温度"平滑能量函数
4.1 为什么需要松弛
在椭圆中心区域,零温度极限自由能会出现无限大的尖峰(中心点距流形任何位置都遥远),且自由能表面存在局部极小值,不利于优化与学习。为避免这种"冷能量"带来的尖峰,需要引入松弛版本的自由能(见 15-2.md):
$$ F_\beta(\vect{y}) \doteq -\frac{1}{\beta} \log \frac{1}{\vert\mathcal{Z}\vert} \int_{\mathcal{Z}} \exp[-\beta E(\vect{y},z)],\mathrm{d}z, $$
其中 $\beta = (k_B T)^{-1}$ 为逆温度($k_B$ 为玻尔兹曼常数,$T$ 为温度):
- 温度很高 → $\beta$ 极小;
- 温度很冷 → $\beta \to \infty$。
4.2 简单离散近似与 softmin
在实践中通常用离散求和近似积分:
$$ \tilde{F}\beta(\vect{y}) = -\frac{1}{\beta} \log \frac{1}{\vert\mathcal{Z}\vert} \sum{z\in\mathcal{Z}} \exp[-\beta E(\vect{y},z)],\Delta z, $$
其中核心项 $-\frac{1}{\beta}\log\frac{1}{\vert\mathcal{Z}\vert}\sum_{z\in\mathcal{Z}}\exp[-\beta E(\vect{y},z)]$ 被定义为 $\mathrm{softmin}_\beta[E(\vect{y},z)]$——松弛后的零温度极限自由能即成为真正的 softmin。
4.3 三个直观示例
回顾此前实践中的样本点,观察松弛后的效果:
- 情况 1:$\vect{y}' = Y[23]$—— 靠近 $\vect{y}'$ 的点能量小、指数项大;远离的点指数项趋于零;
- 情况 2:$\vect{y}' = Y[10]$—— 注意颜色条范围的变化,上限值由 $\exp[-\beta E(\vect{y},z)]$ 推导而来;
- 情况 3:$\vect{y}' = (0,0)$—— 以原点为查询点时,所有流形点都贡献能量,自由能对称变化。
随着降低 $\beta$(升高温度),尖峰逐渐被"抹平",最终得到只有一个全局极小值的抛物线;当 $\beta \to 0$ 时,退化为平均值,即恢复 MSE 损失。
4.4 冷、温、热:自由能的三种语义
从技术角度看,自由能的不同温度区间对应不同含义:
| 状态 | 含义 |
|---|---|
| 热(hot) | 指平均值($\beta\to0$,恢复 MSE) |
| 温(warm) | 指隐变量的边缘化(marginalization) |
| 冷(cold) | 指最小值($\beta\to\infty$,即 ZTL) |
五、命名法与 PyTorch 实现
正式定义actual-softmax:
$$ \mathrm{softmax}\beta[E(\vect{y},z)] \doteq \frac{1}{\beta} \log \sum{z\in\mathcal{Z}} \exp[\beta E(\vect{y},z)] - \frac{1}{\beta} \log N_z, $$
其中 $N_z = \vert\mathcal{Z}\vert / \Delta z$。在 PyTorch 中可直接用torch.logsumexp实现:
$$ \mathrm{softmax}_\beta[E(\vect{y},z)] = \frac{1}{\beta},\texttt{torch.logsumexp}(\beta E(\vect{y},z),\ \texttt{dim}=z) - \frac{1}{\beta}\log N_z. $$
actual-softmin则定义为:
$$ \mathrm{softmin}\beta[E(\vect{y},z)] \doteq -\frac{1}{\beta}\log\frac{1}{N_z}\sum{z\in\mathcal{Z}}\exp[-\beta E(\vect{y},z)]. $$
Softmin 可以通过"带两个负号的 softmax"实现:
$$ \mathrm{softmin}\beta[E(\vect{y},z)] = -\mathrm{softmax}\beta[-E(\vect{y},z)]. $$
同时,torch.softmax(l(j), dim=j) = \mathrm{softargmax}_{\beta=1}[l(j)]。这一节(15-2.md)给出了从数学定义到 PyTorch 原语(logsumexp、softmax)的完整映射,是动手实现松弛自由能的关键代码依据。
六、训练 EBM:损失函数(loss functional)的设计
6.1 目标与基本区分
训练 EBM 的目标是寻找一个表现良好的能量函数:对来自训练分布的数据能量小,对其他区域能量大。需要严格区分两个概念(见 15-2.md):
- 能量函数:由推理(inference)过程最小化(对隐变量 $z$ 求最小值);
- 损失函数(loss functional):由学习(learning)过程最小化(对模型参数求最小值),它是一个标量函数,度量当前能量函数的"好坏"。
数据集上的整体损失是各样本损失的均值:
$$ \mathcal{L}(F(\cdot),Y) = \frac{1}{N}\sum_{n=1}^{N} l(F(\cdot),\vect{y}^{(n)}) \in \mathbb{R}. $$
6.2 三种经典损失函数
① 能量损失(energy loss)——将正确数据点的能量"往下推":
$$ l_{\text{energy}}(F(\cdot),\check{\vect{y}}) = F(\check{\vect{y}}), $$
其中 $\check{\vect{y}}$ 表示要被压低的(正确)数据点。
② Hinge 损失——要求"冷"能量(正确标签)与"热"能量(错误标签)之差大于边界 $m$:
$$ l_{\text{hinge}}(F(\cdot),\check{\vect{y}},\hat{\vect{y}}) = \big(m - [F(\hat{\vect{y}})-F(\check{\vect{y}})]\big)^{+}, $$
其中 $[\cdot]^{+}$ 是 ReLU 函数,保证损失恒非负;$F(\check{\vect{y}})$ 与 $F(\hat{\vect{y}})$ 分别是"冷"(正确标签)与"热"(错误标签)能量的自由能。
Hinge 损失的行为:
- 只要差值小于边界 $m$,就持续"推动"能量;
- 一旦 $F(\hat{\vect{y}}) - F(\check{\vect{y}}) \geq m$,$[m - (\cdot)]$ 变为负值,经 ReLU 截断为 0,停止推动;
- 因此 Hinge 损失没有光滑的边界。
③ Log 损失——具有光滑边界的"软"Hinge:
$$ l_{\log}(F(\cdot),\check{\vect{y}},\hat{\vect{y}}) = \log\big(1+\exp[F(\check{\vect{y}})-F(\hat{\vect{y}})]\big). $$
由于指数函数的存在,Log 损失边界更平滑,可视为具有无限边界的软 Hinge 损失。
6.3 ZTL 训练与边缘化的对比
训练效果对比(15-2.md):
- 未经训练(左图):每个训练点对应一个流形上离它最近的 $x$(交叉点);以 ZTL 训练时,梯度把流形上最接近训练点的那个点推向训练点;
- 训练 1 个 epoch 后(右图):流形点到达期望位置,训练点(蓝色)对应能量降至零。
边缘化(marginalization)则不同:若选取流形上某个点 $\vect{y}$(左下图绿色叉),其梯度是指向该点所有箭头的平均值,即所有流形点都被适度拉向 $\vect{y}$。这样能避免模型过拟合单个训练点——注意训练版本并未完全贴合所有训练点。
从训练后模型的自由能横截面(见上节配图)可以清楚看到:ZTL($\beta=\infty$)时自由能出现高峰值;随着 $\beta$ 减小尖峰不断降低,最终得到蓝色平滑抛物线,即边缘化情形的自由能剖面:
$$ F_\beta(\vect{y}) \doteq -\frac{1}{\beta}\log\frac{1}{\vert\mathcal{Z}\vert}\int_{\mathcal{Z}}\exp[-\beta E(\vect{y},z)],\mathrm{d}z. $$
七、自监督学习:用条件 EBM 学习"号角"流形
7.1 问题设定
将上述思想推广到有条件的情形(条件 EBM),即自监督学习(见 15-2.md)。训练目标是学习"号角(horn)"形状的数据流形。隐变量与输入取离散网格:
- $z = [0:\tfrac{\pi}{24}:2\pi[$(不含$2\pi$,线性取值),送入解码器得到环绕椭圆的 $\tilde{\vect{y}}$;
- $x = [0:\tfrac{1}{50}:1]$,由预测器(predictor)观测后送入解码器。
在 ZTL 下训练:给定"号角"上一点 $\vect{y}$,找到流形上离它最近的点并将其拉向 $\vect{y}$。
7.2 条件能量函数与网络结构
此时的能量函数为:
$$ E(x,\vect{y},z) = [\vect{y}_1 - f_1(x)g_1(z)]^2 + [\vect{y}_2 - f_2(x)g_2(z)]^2, $$
其中 $f,g: \mathbb{R} \rightarrow \mathbb{R}^{2}$,具体结构为:
$$ \begin{array}{l} x \xmapsto{f} x \xrightarrow{\mathrm{L}^{+}} 8 \xrightarrow{\mathrm{L}^{+}} 8 \xrightarrow{\mathrm{L}} 2, \[2pt] z \xmapsto{g} [\cos(z)\ \ \sin(z)]^{\top}. \end{array} $$
即:$x$ 经过两层带正激活($\mathrm{L}^{+}$,如 ReLU)的 8 维线性层再映射到 2 维;$g$ 输出 $\sin/\cos$ 基函数,其分量被 $f$ 的输出缩放。
7.3 向真实场景推广
玩具示例"几乎不需要训练时间",但推广到真实问题需要两步升级:
第一步:让 $g$ 成为神经网络。推广为:
$$ \begin{array}{l} f: \mathbb{R} \rightarrow \mathbb{R}^{\dim(f)}, \ g: \mathbb{R}^{\dim(f)} \times \mathbb{R} \rightarrow \mathbb{R}^{2}, \end{array} \qquad E(x,\vect{y},z) = [\vect{y}_1 - g_1(f(x), z)]^2 + [\vect{y}_2 - g_2(f(x), z)]^2. $$
此时 $g$ 接收 $f$ 的输出与 $z$,且 $g$ 本身可以是一个神经网络。模型必须自己学会"$\vect{y}$ 绕圈运动"这一此前被我们想当然的 $\sin/\cos$ 结构。
第二步:确定隐变量维度并正则化。进一步推广:
$$ \begin{array}{l} f: \mathbb{R} \rightarrow \mathbb{R}^{\dim(f)}, \ g: \mathbb{R}^{\dim(f)} \times \mathbb{R}^{\dim(z)} \rightarrow \mathbb{R}^{2}, \end{array} \qquad E(x,\vect{y},z) = [\vect{y}_1 - g_1(f(x), z)]^2 + [\vect{y}_2 - g_2(f(x), z)]^2. $$
高维隐变量倾向于过拟合:若不加以正则化,模型会"记住"所有数据点,导致整个空间能量为零,流形结构完全失效。因此隐变量维度的选择与正则化是条件 EBM 落地时不可回避的工程问题。
八、理解性问答(课程要点回顾)
Q1:为什么能量平面上的值是标量?
能量平面取值即自由能 $F_\infty$——它是能量函数 $E(\vect{y},z)$ 对所有可能隐变量 $z$ 的最小值。因此 $F_\infty$ 不依赖 $z$,只依赖 $\vect{y}$,对每个 $\vect{y}$ 输出一个标量。例如上述 $17\times 25=425$ 个网格点,就有 425 个自由能值,每个值都是该点到流形的二次欧氏距离。
Q2:如何选择表达数据流形的函数?
关于隐变量选择已有大量研究,可以用多层神经网络来表达隐变量的选择。典型例子是语言翻译:同一句子可有多种合法译法,若用 softmax 训练会面临翻译结果无穷多的问题,因此改用 EBM——能量函数直接度量"原句与译句的兼容程度"。
Q3:在训练流形上最小化能量是否基本等同于去噪?
是的。如果模型已从真实流形中学到结构,那么通过最小化能量即可找到输入的"去噪版本"——将含噪输入投影回流形上的最近点。
九、小结与仓库导航
第十五周的核心脉络可以概括为一条完整的技术链路:
- 动机:一对多映射场景下前馈网络失效 → 引入隐变量 EBM;
- 推理:定义能量函数 $E(\vect{y},z)$,通过优化隐变量求零温度极限自由能 $F_\infty = \min_z E$;
- 松弛:用逆温度 $\beta$ 平滑自由能,得到可微的 softmin 表达(
torch.logsumexp实现); - 训练:用能量损失 / Hinge 损失 / Log 损失最小化 loss functional,ZTL 训练 vs 边缘化;
- 应用:条件 EBM 自监督学习"号角"流形,并探讨 $g$ 网络化与隐变量正则化。
如需继续深入,可在仓库内查阅:
- 中文讲义总览:docs/zh/week15/15.md
- 推理部分完整推导与图示:docs/zh/week15/15-1.md
- 松弛自由能与训练部分:docs/zh/week15/15-2.md
- 英文原版讲义:docs/en/week15/15-1.md、docs/en/week15/15-2.md
- 实践课视频字幕(含完整推导口述):docs/en/week15/practicum15A.sbv、docs/en/week15/practicum15B.sbv
- 配套图示:docs/images/week15/15-1、docs/images/week15/15-2
提示:本文所有公式与结论均来自上述讲义原文;涉及
torch.logsumexp等 API 的实现细节建议结合 PyTorch 官方文档验证($\beta$ 取值、dim参数与 $N_z$ 归一化项需按离散化方案对齐)。
- 示例工程
【免费下载链接】NYU-DLSP20
NYU Deep Learning Spring 2020
相关推荐
深入理解潜在变量能量模型(LV-EBM):从椭圆数据到自监督学习的推理与训练实践 —— 基于 NYU-DLSP20 第 15 周教程
深入理解潜在变量能量模型(LV EBM):从椭圆数据到自监督学习的推理与训练实践 —— 基于 NYU DLSP20 第 15 周教程 本篇技术指南以 NYU D
示例工程隐变量能量模型(EBM)推理与训练全解析:NYU-DLSP20 第 15 周精读
隐变量能量模型(EBM)推理与训练全解析:NYU DLSP20 第 15 周精读 本篇技术指南以 NYU DLSP20 第 15 周课程文档( docs/en/
示例工程NYU-DLSP20 第 7 周精讲:自监督学习与能量基模型(EBM)——从潜在变量建模到对比训练方法
NYU DLSP20 第 7 周精讲:自监督学习与能量基模型(EBM)——从潜在变量建模到对比训练方法 本篇技术指南以 NYU DLSP20(NYU Deep
示例工程
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考