能量视角下的GAN模型-EBMs
date
Jun 22, 2022
Last edited time
Sep 6, 2022 06:10 AM
status
Published
slug
能量视角下的GAN模型-EBMs
tags
DL
GAN
summary
幸好之前看了花书, 很多在花书上都有提及.
2022.09.06@添加了关于郎之万方程的链接 2022.09.07@修改了一个公式错误
type
Post
Field
Plat
今天要介绍的结果还是跟能量模型相关,来自论文《Implicit Generation and Generalization in Energy-Based Models》。
这篇文章就是指出能量模型实际上就是某个特定的 Langevin 方程的静态解,然后就用这个 Langevin 方程来实现采样,有了采样过程也就可以完成能量模型的训练。
能量分布
跟《能量视角下的 GAN 模型(二):GAN=“分析”+“采样”》一样,假设我们有一批数据,我们希望用一个概率模型去拟合它,我们选取的模型为
其中 是带参数 的未定函数,我们称为 “能量函数”,而 是归一化因子(配分函数)
这样的分布可以称为 “能量分布”,在物理中也被称为 “玻尔兹曼分布”。
为了求出参数 ,我们先定义对数似然函数:
我们希望它越大越好,也就是希望其负对数似然
越小越好,为此,我们对 使用梯度下降。我们有(具体推导参考上面链接)
所以
这意味着梯度下降的更新公式是
这里的能量函数 , 相当是 , 即 .
Langevin 方程
在式 (5) 中,是容易估算的,直接抽样一批真实数据来计算就行了;但是 却很困难,因为我们不知道怎么实现从 中采样。
重要采样思路是定义另外一个容易采样的分布 ,然后改为从 中采样,同时去缩小 和 的差异,使得 确实可以成为 的一个良好近似。但这篇论文不一样,它直接从能量模型对应的 Langevin 方程采样。
Langevin 方程:
马尔可夫链由一个随机状态 和一个转移分布 定义而成, 是一个概率分布,说明了给定状态 的情况下随机地转移到 的概率。运行一个马尔可夫链意味着根据转移分布 采出的值 来更新状态 。
从状态 到新状态 ′ 。单一状态转移到 的概率可以表示为 .
我们可以将转移算子 表示成一个矩阵 。矩阵 的定义如下:. 矩阵 有一种特殊的结构,因为它的每一列都代表一个概率分布。这样的矩阵被称为随机矩阵(Stochastic Matrix)。如果对于任意状态 到任意其他状态 存在一个 使得转移概率不为 ,那么 Perron-Frobenius 定理可以保证这个矩阵的最大特征值是实数且大小为 。
另外, 可以用一个向量 来描述这个概率分布 , .
则单次转移的马尔可夫过程可写为: , 或者 , 其中随机过程 定义了转移分布 .
的一个特例就是Langevin方程:
它也称为随机微分方程,当 时,它的静态分布正好是能量分布 .
当 且 时,序列 所服从的分布就是 ,换句话说,是该 Langevin 方程的静态分布,再换句话说,那就是给定能量函数 后(也确定了),上式的递归过程就可以帮我们得到一批从 采样的样本来。
有了这个采样过程,首先 可以估算了,因此能量模型可以完成训练了;训练完成之后,还是使用Langevin方程帮助我们从中采样出一批新样本了,这样就完成生成过程了。
模型细节
首先是作者往模型 加入了谱归一化,而 本身就相当于 GAN 中的判别器地位,所以加入谱归一化是可以理解的。其次,在训练的过程中,用的能量函数不是 ,而是加上一个小的 L2 正则:,其中 是一个小的正常数,作者的意思是这样会使得整个 loss 更光滑,训练起来更稳定(使用时还是 )。
然后,回到采样问题,采样是通过式Langevin方程进行的,它是一个迭代过程,既然是迭代就需要初始值。然而如果直接从随机分布(比如均匀分布)中采样随机向量作为初始值,作者提到会出现模式单一的问题,即迭代出来的图片形式比较单一,导致采样不充分,所以作者维护了一个 Buffer,它把历史的的采样结果缓存起来,作为下一次采样的候选初始值。即下面链接的 PCD 算法.
模型的更新过程:
假定数据样本分布为 ,选定迭代步长 (参考值为 1/200)、迭代步数 (参考值 20~50)和 batch size ,Buffer 记为 ,初始化是空集。
循环执行,直到收敛:
循环执行,得到一批真假样本:
- 从 中采样一个真样本 ,加入到当前批;
- 以 95% 的概率从 (或者以 5% 的概率从均匀分布)选取一个样本作为初始值 ;
- 以 为初始值,Langevin 方程为迭代式共 步,得到 ;
- 将 作为假样本 ,加入到当前批,同时加入到 。
有了真假样本后,执行一步优化器,优化目标为:
而训练完成后的采样,同样需要维护 Buffer,并且作者为了保证多样性,他将模型分别训练几次,得到若干个不同权重的统一模型,然后同时从这若干个模型中采样,并且共享、共同维护一个 Buffer。其他细节问题大家直接看原论文即可,因为不打算复现,所以就不考究了。
总结
至于效果上,可以说它媲美 GAN,也可以说比不上 GAN。作者主要在 Cifar10 和 ImageNet 上做实验,这两个数据集当然很难,可以说一般的 GAN 都生成不好,从效果图来看,确实可以 PK 大多数 GAN 了,在 Cifar10 上明显完胜 Glow。说它比不上,则是感觉它太有技巧性了,不够优雅,比如 Langevin 方程的所导致的采样思路,我感觉就没有什么底,维护一个 Buffer 的做法,虽然实践效果还可以,但显然工程味道太浓了….