ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

深度生成模型入门:有向生成网络与VAE、GAN技术演进

深度生成模型入门:有向生成网络与VAE、GAN技术演进

1. 从"生成"二字说起:为什么深度生成模型值得单独开一篇笔记

很多人第一次接触深度生成模型,脑子里冒出来的第一个问题往往是:判别模型已经能分类、能检测、能分割了,为什么还要费劲去"生成"数据?这个问题我当年也卡了很久。后来做项目才慢慢体会到,生成模型解决的是一个完全不同维度的问题——它不是在已有的数据上画一条分界线,而是要学着把数据本身的分布"造"出来。换句话说,判别模型回答的是"这张图是不是猫",而生成模型回答的是"猫长什么样,你能不能给我画一只出来"。

这篇笔记要梳理的是深度生成模型里一个非常重要的分支:有向生成网络。围绕这个核心,会依次聊到 sigmoid 信念网络、可微生成器网络、变分自编码器(VAE)、生成对抗网络(GAN),以及生成矩匹配网络。这几个名字放在一起,其实是一条清晰的技术演进线:从显式建模概率分布,到用神经网络当"生成器"隐式地逼近分布,再到用对抗、矩匹配等不同手段去训练这个生成器。

如果你正在入门深度学习,或者已经会跑几个 GAN 的 demo 但说不清楚背后的原理,这篇内容会比较适合你。我会尽量把每个模型的"动机—结构—训练—坑"讲透,而不是只丢几个公式。毕竟生成模型这块,公式谁都能抄,真正难的是理解"为什么这么设计"以及"实际跑起来会出什么问题"。

2. 有向生成网络到底"有向"在哪:先厘清概念地图

2.1 有向图模型与无向图模型的分野

要理解有向生成网络,得先回到概率图模型的框架里。图模型用图来描述随机变量之间的依赖关系,边有没有方向,决定了这个模型是"有向"还是"无向"。

有向图模型,也叫贝叶斯网络,它的边是有方向的,通常表示一种因果关系或者生成关系。比如变量 A 指向 B,意思可以理解为"先有 A,再由 A 决定 B"。这种方向性带来的最大好处是:联合概率可以很自然地分解成一串条件概率的乘积。假设有一组变量 x₁ 到 xₙ,按照拓扑顺序排列,那么联合分布就能写成每个变量在它所有父节点条件下的概率相乘。这个分解性质是有向生成网络的命根子,后面讲的 sigmoid 信念网络就是靠它吃饭的。

无向图模型,也叫马尔可夫随机场,边没有方向,变量之间是相互影响的对称关系。它的联合概率通常用一个势函数乘积再除以配分函数来表示。配分函数这个东西是个大麻烦,因为它需要对所有可能状态求和,维度一高就根本算不动。这也是为什么无向模型在深度生成里相对难训练的原因之一。

提示:判断一个生成模型属于有向还是无向,最直接的办法是看它的联合概率能不能写成条件概率的连乘。能,基本就是有向的。

2.2 生成模型的两条技术路线:显式 vs 隐式

有向生成网络内部,其实还藏着一条更重要的分界线:显式密度模型和隐式密度模型。

显式密度模型会明确地写出概率密度函数 p(x),或者至少写出一个可以归一化的形式。sigmoid 信念网络、变分自编码器都属于这一类。它们的优点是理论清晰,能算似然,能做概率推断;缺点是密度函数往往很难设计得既灵活又可计算。

隐式密度模型不直接写 p(x),而是提供一个从简单分布(比如高斯噪声)到数据分布的映射,你只能通过采样来"感受"这个分布。GAN 就是典型的隐式模型。它的优点是不用管归一化常数,生成样本往往很锐利;缺点是没有显式的似然,训练不稳定,评估也麻烦。

理解这条分界线,后面看每个模型时就不会迷路。你会发现,VAE 和 GAN 的很多设计差异,本质上就是显式和隐式两条路线的取舍。

2.3 为什么这一串模型要放在一起学

单独看 sigmoid 信念网络、VAE、GAN,会觉得它们八竿子打不着。但放在"有向生成网络"这个框架下,它们其实是在回答同一个问题的不同阶段:如何用一个有向的、可训练的神经网络结构,去逼近真实数据的分布。

sigmoid 信念网络是最早的尝试之一,用有向的随机二值单元堆叠;可微生成器网络把"生成"这件事抽象成一个可微的映射,为 VAE 和 GAN 铺了路;VAE 用变分推断给隐变量模型一个可训练的近似;GAN 干脆绕开似然,用对抗博弈来训练生成器;生成矩匹配网络则从统计矩的角度给出另一种训练准则。把它们串起来学,比孤立地背每个模型的公式要高效得多。

3. sigmoid 信念网络:有向生成网络的"老前辈"

3.1 结构长什么样:二值单元与有向连接

sigmoid 信念网络(Sigmoid Belief Network,简称 SBN)可以看作是有向版本的受限玻尔兹曼机。它的基本单元是随机的二值神经元,取值只有 0 和 1,每个单元被激活的概率由它父节点的加权和经过 sigmoid 函数得到。

用公式说,假设某个单元 sⱼ 的父节点集合是 Pa(sⱼ),那么它取 1 的概率就是 sigmoid(Σ wᵢⱼ sᵢ + bⱼ)。这里的 wᵢⱼ 是连接权重,bⱼ 是偏置。整个网络的联合概率就是所有单元条件概率的连乘,这正是有向图模型的标准分解。

这种结构的好处是采样特别直接:从最顶层的单元开始,按拓扑顺序一层层往下采样,每一步都只依赖已经采好的父节点。这跟无向模型需要反复迭代才能采一个样本形成鲜明对比。

3.2 训练难在哪:解释消除与后验不可解

SBN 的理论很美,但训练起来有个致命问题:后验概率不可解。

我们想最大化数据的对数似然,梯度里会出现对隐变量后验的期望。问题是,在有向模型里,给定可见单元后,隐单元之间因为存在"解释消除"效应而相互依赖——一个隐单元被激活后,会降低其他隐单元被激活的必要性。这种依赖关系导致后验不能像受限玻尔兹曼机那样简单分解,于是梯度没法精确计算。

当年为了解决这个问题,研究者提出了各种近似方法,比如用 wake-sleep 算法交替更新生成权重和推断权重,或者用随机变分推断。这些方法能跑,但收敛慢、方差大,实际用起来比较折腾。

3.3 它给后来者留下了什么

SBN 本身在今天已经很少直接用了,但它的思想遗产很重要。它第一次比较系统地展示了"用有向的、分层的随机网络来建模数据分布"这条路。它暴露出的后验不可解问题,直接催生了变分自编码器——VAE 用 amortized inference(摊销推断)用一个神经网络来近似后验,本质上就是在绕开 SBN 的这个坑。

所以学 SBN 不是为了用它,而是为了理解"为什么需要 VAE"。这个因果关系理清了,后面看 VAE 的设计动机会顺畅很多。

4. 可微生成器网络:把"生成"抽象成一个可微映射

4.1 核心思想:生成器就是一个函数

可微生成器网络(Differentiable Generator Network)不是一个具体的模型,而是一类模型的统称。它的核心思想非常朴素:把生成过程定义成一个可微的函数 G(z; θ),其中 z 是从某个简单分布(通常是标准正态或均匀分布)采样的隐变量,θ 是网络参数,G 的输出就是生成的样本。

这个抽象一旦建立,很多事就清晰了。生成样本就是前向传播,采样就是给 G 喂不同的 z。训练的目标就是调整 θ,让 G 输出的分布尽量接近真实数据分布。

这个框架的妙处在于,它把"生成"和"训练准则"解耦了。G 的结构可以随便设计,卷积、全连接、Transformer 都行;训练准则可以是对抗损失、可以是重构损失、可以是矩匹配损失。VAE、GAN、生成矩匹配网络,全都是在这个框架下换不同的训练准则而已。

4.2 为什么"可微"这么关键

可微性之所以是硬要求,是因为训练要靠反向传播。如果 G 不可微,梯度就传不回去,参数就没法用梯度下降更新。

这里有个细节值得说:即使 G 本身可微,如果训练准则里含有不可微的操作(比如采样、取最大值),梯度照样会断。GAN 里生成器的输出要经过判别器,判别器必须可微;VAE 里要从后验采样,就得用重参数化技巧把随机性"挪"到输入侧,保证梯度能穿过采样这一步。这些都是"可微"这个约束带来的连锁设计。

4.3 从抽象到具体:三类训练准则的分岔

在可微生成器网络这个统一框架下,训练准则大致分三派:

  • 基于似然的:直接最大化数据对数似然,或者它的变分下界。VAE 走这条路。
  • 基于对抗的:不碰似然,让生成器和判别器博弈。GAN 走这条路。
  • 基于矩匹配的:让生成样本的统计矩(均值、方差、高阶矩)匹配真实数据的矩。生成矩匹配网络走这条路。

这三派的取舍,本质上是"要不要显式似然""训练稳不稳""样本质量高不高"之间的权衡。下面几节分别展开。

5. 变分自编码器 VAE:给隐变量模型一个可训练的近似

5.1 自编码器的局限与 VAE 的动机

普通自编码器把输入压缩成隐向量再重构回来,看起来能学到表示,但它有个根本问题:隐空间是"散"的。你随便在隐空间里取一个点,解码出来可能是一团噪声,因为训练时只约束了"真实数据编码后的点能重构",没约束隐空间的整体结构。

VAE 的动机就是给隐空间加一个先验分布(通常是标准正态),让整个隐空间都有意义。这样一来,你从先验里采样一个 z,解码出来就应该是一个合理的样本。这个"能当生成模型用"的能力,是 VAE 相比普通自编码器的关键升级。

5.2 证据下界 ELBO 是怎么推出来的

VAE 的目标是最大化数据对数似然 log p(x)。但 p(x) 需要对隐变量积分,积分不可解。于是引入一个近似后验 q(z|x),用变分推断推出一

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进