©PaperWeekly 原创 · 作者|苏剑林
单位|追一科技
研究方向|NLP、神经网络
在 2018 年的文章里
f-GAN 简介:
GAN 模型的生产车间
笔者介绍了 f-GAN,并评价其为 GAN 模型的“生产车间”,顾名思义,这是指它能按照固定的流程构造出很多不同形式的 GAN 模型来。
前几天在 arXiv 上看到了新出的一篇论文 Designing GANs: A Likelihood Ratio Approach(后面简称 Designing GANs 或原论文),发现它在做跟 f-GAN 同样的事情,但走的是一条截然不同的路(不过最后其实是殊途同归),整篇论文颇有意思,遂在此分享一番。
论文链接:https://arxiv.org/abs/2002.00865
从 f-GAN 简介:GAN 模型的生产车间中我们可以知道,f-GAN 的首要步骤是找到满足如下条件的函数 f:
f 是非负实数到实数的映射();
f(1)=0 ;
f 是凸函数。
找到这样的函数后,就可以构造一个概率 f 散度出来,然后用一种称为“凸共轭”的技术将 f 散度转化为另一种形式(带 max 的形式,一般称为对偶形式),然后去 min 这个散度,就得到一个 min-max 过程,这便诞生了一种 GAN 模型。
顺便说一下,f-GAN 代表了一系列 GAN 模型,但不包含 WGAN,不过 WGAN的推导其实也遵循着类似的步骤,只不过它用到的概率度量是 Wasserstein 距离,并且 Wasserstein 距离转化为对偶形式的方法不一样,具体细节可以参考从 Wasserstein 距离、对偶理论到 WGAN。
f-GAN 在逻辑上并没有问题,但是根据它提供的步骤,我们总是需要先找到一个 f 散度,然后再转化为对偶形式。问题就是:既然我们只需要它的对偶形式,为什么不直接在对偶空间里边分析呢?
这个疑问笔者之前在文章不用 L 约束又不会梯度消失的 GAN,了解一下?,只不过在当时只是讨论了在对偶空间中概率散度的证明,并没有给出概率散度的构建方法,而 Designing GANs 正是补充了这一点。
在这一节里,我们会探讨 Designing GANs 里边的思路和方法。不同于原论文中比较冗余的教科书式推导,本文将会通过逐步反推的过程来导出 Designing GANs 的结果,笔者认为这样更容易理解一些。有意思的是,理解整个推导过程事实上只需要非常基础的微积分知识。
这里以一个称为 Total Variation 的概率散度为例子,让我们初步体会一下在对偶空间里边分析推导概率散度的要点。
所以对于概率分布 p(x), q(x),我们也有:
两边积分得(我们先不纠结积分和 max 的交换性):
这里的 ∫|p(x)−q(x)|dx 就称为两个概率分布的 Total Variation,所以我们就通过这样的过程导出了 Total Variation 的对偶形式。如果固定 p(x),让 q(x) 逼近 p (x),那么就可以最小化 Total Variation,即:
回顾整个流程,抛开对 Total Variation 的先验认识,我们可以发现整个流程的核心其实是式 (1) ,有了式 (1) 之后,后面的事情都是顺理成章了。
那么式 (1) 有什么特点呢?
事实上,它可以一般化为:
目标 1:寻找函数 ϕ(t), ψ(t) 以及某个值域 Ω ,使得:
并且有 d(p,q)≥0 以及 d(p,q)=0⇔p=q。
有了这样的 ϕ(t),ψ(t) 之后,我们就可以导出跟 (4) 类似的 GAN 出来:
求导找极大值
注意到“目标 1”里边 p, q 只是一个非负实数,ϕ(t), ψ(t) 也只是标量函数,所以整个目标纯粹是一元函数的极值问题,应该说已经相当简化了。
甚至地,设 r=q/p∈[0,+∞),它还可以转化为更简洁的“目标 2”:
目标 2:寻找函数 ϕ(t), ψ(t) 以及某个值域 Ω ,使得:
现在我们就来考察目标 2,简单起见,我们假设 ϕ(t), ψ(t) 都是光滑函数,这样一来 ϕ(t)+rψ(t) 的最大值我们就可以通过求导来解决。事实上这样的设计已经有足够的代表性了,当有部分点不光滑时,我们可以用光滑函数近似,然后取极限,比如 。
基于这样的假设,要求 ϕ(t)+rψ(t) 的最大值,首先需要求导并让它等于 0:
这里假设上述方程有唯一解,记为 t=ω(r),所以最后 相当于是 ,它是 ω(r) 的逆函数(再提醒,这里是逆函数,不是倒数)。同时,由于 r∈[0,+∞),所以 t∈Ω=ω([0,∞)),也就是说 t 的取值范围 Ω 就是 ω(r) 的值域。
此外,既然能求逆,说明 ω(r) 要不就严格单调递增,要不就严格单调递减,不失一般性,这里假设 ω(r) 是严格单调递增的,所以 也是严格单调递增的。
导数为 0 只能说明 t 是一个极值点,但还不能保证是极大值点,我们来确定它是最大值的条件,现在我们有:
注意到 是严格单调递减的,所以它只能有一个零点,并且它是先正后负的形式,为了让整个导函数也有这个特性,我们设 ψ′(t)≜ρ(t)>0,也就是 ρ(t) 恒为正。这样一来,ϕ(t)+rψ(t) 的导函数是连续的、先正后负的,所以 ϕ(t)+rψ(t) 只有一个极值点,且极值点为最大值点。
求导找极小值
先汇总一下到目前为止的结果:我们假设 ω (r) 是严格单调递增的,并且假设 ρ(t) 在 t∈Ω 时是恒正的,然后满足如下关系:
这时候 ϕ(t)+rψ(t) 就存在唯一的极大值点 t=ω(r),并且它也是最大值点,对于目标 2 来说这已经完成了一半的内容。现在来考察当 t=ω(r) 时,d(r)=ϕ(ω(r))+rψ(ω(r)) 是否如我们所愿满足剩下的性质(即 d(r) 的最小值在 r=1 时取到)。
继续求导:
其中第二个等号是因为根据式 (8) 得方括号部分为 0。现在只剩 ψ(ω(r)) 一项了,并且留意到我们假设了 ψ′(t)=ρ(t)>0,所以 ψ(t) 是严格单调递增的,同时我们也假设了 ω(r) 是严格单调递增的,所以复合函数 ψ(ω(r)) 也是严格单调递增的。
现在我们补充一个假设:ψ(ω(1))=0,也就是说 d′(1)=0,即 r=1 是 d(r) 的极值点,并且由于 ψ(ω(r)) 连续且严格单调递增,所以 d′(r) 是先负后正,因此 r=1 是 d(r) 的极小值点,也是最小值点。
GAN模型已经送达
到这里,我们的推导已经完成了,我们得到的条件是:
结论 1:如果 ω(r) 是严格单调递增的,Ω=ω([0,+∞)),ρ(t) 在 t∈Ω 时是恒正的,并且满足如下关系:
以及条件 ψ(ω(1))=0,具备这些条件的的 ϕ(t), ψ(t) 就可以用来构建如 (6) 的 GAN 模型。
比如,我们来验算一下原始版本的 GAN:
其中 σ(⋅) 是 sigmoid 激活函数,上述是让真样本的标签为 0、假样本的标签为 1 的二分类交叉熵,等号右边是化简后的结果,由此观之 ,。
我们做个小调整,让 ,显然这不影响原优化问题。现在我们有:
显然它是恒大于 0 的,以及
,即 t=ω(r)=log r,显然它也是严格单调递增的,最后验算 ψ(ω(1)) 发现它确实等于 0。
1. ψ(ω(1))=0 这个条件并不是必须的,因为就算一开始不满足 ψ(ω(1))=0,我我们可以往 ψ(t) 里边加上一个常数,使得它满足 ψ(ω(1))=0,而加上常数不会改变原来的优化问题;
2. 如果调换一下标签,让真样本的标签为 1、假样本的标签为 0,那么得到的性质刚好相反,即算出来的 ρ(t) 是恒小于 0 的,ω(r) 的严格单调递减的。
这说明,本文给出的结论 1 是构成 GAN 的充分条件而不是必要条件。
不同形式的 ρ(t), ω(r) 对于同一个 GAN 模型,比如我们选择
,这时候
,然后我们选择
,那么:
从而积分得到 ϕ(t)=log(1−t),ψ(t)。此外注意到 Ω=ω([0,+∞))=[0,1),并且 排除了 t=0,所以可行域为 (0,1)(事实上对于实验来说,边界点可以忽略),即导出的 GAN 为:
这跟原始 GAN 是等价的,只不过没有显式写出使得 t(x)∈(0,1) 的激活函数。
再算一个例子。选择 ,即
,并且选择
,可以算得
,因此得到一个 GAN 变种:
原论文还用上述结论算了很多稀奇古怪的 GAN,有兴趣的读者可以自行去阅读原论文,这里就不再重复推导了。
本文的方法与之前的 f-GAN 有什么关联吗?本文的方法还有什么推广吗?此处给出笔者自己的答案。
与 f-GAN 的联系
在上面的推导中,max 这一步的结果 d(r),其中 r=1 是 d(r) 的最小值点,回顾目标 1,然后将 d(r) 代回到式 (6) 中,就会发现我们优化的目标实际上是:
是不是有点眼熟?
没错,它看起来就像是 f 散度的定义。
并且回顾 (11) 处的推导,我们知道 d(r) 的导数是严格单调递增的,这说明 d(r) 是凸函数,所以上式确实就是一个 f 散度!
也就是说,虽然这篇论文的作者走了一条看起来截然不同的路子,但实际上它的结果都可以通过 f-GAN 的结果导出来,并没有带来新的东西。
那这篇论文是否完全等价于 f-GAN 呢?
很遗憾,还不是,原论文所做的结果,只是 f-GAN 的一个子集,换句话说,它能导出的 GAN 模型变种,f-GAN 都可以导出来,但是 f-GAN 能导出的 GAN 模型变种,它却不一定能导出来。
因为回顾整个推导过程,它核心思想是直接将“点”的度量公式直接推广到“函数”,比如开头的 |p−q|=0⇔p=q 推广到 ∫|p(x)−q(x)|dx=0⇔p(x)=q(x),而正因为这个思想,所以所有推导过程都可以只在一元微积分下进行。
但问题是,并不是所有的 ∫d(p(x),q(x))dx=0⇔p(x)=q(x) 的结论都意味着有 d(p,q)=0⇔p=q,比如 KL 散度为
,它等于 0 意味着 p(x)=q(x),但是
不意味着一定 p=q,因此,原论文至少没法导出 KL 散度对应的 GAN 出来。
这样看来,原论文是不是就没有价值了?
如果单看“产品”的话,确实是没有价值,因为它能产出的,f-GAN 都能产出。
但是我们不应当只关心“产品”,我们有时候也要关心“生产过程”。
事实上,笔者认为原论文的学术价值在于提供了一种直接在对偶空间中分析和发现 GAN 的参考方法,为我们了解 GAN 模型多添加了一个角度。
不管是 f-GAN 还是原论文,导出的 GAN 模型的生成器和判别器的 loss 都是同一个形式,只不过方向不同。
但事实上,目前我们用得比较多的 GAN 变种,生成器和判别器的 loss 都不是同一个,比如原始 GAN 的一个更常用的形式是:
同样的例子还包括 LSGAN、Hinge GAN 等等。
所以如果只考虑生成器和判别器的 loss 都是同样形式的变种,其实还是不够充分的。
其实,这篇论文还可以再前进一步,得到比 f-GAN 更多的结果的,很可惜,作者们似乎把自己的思维绕到死胡同里边去了,并没有察觉到这一点。
事实上做到这一点非常简单:
在上面的过程中,通过
这一步我们求出了 t=ω(r),然后代回原来的 ϕ(t)+rψ(t) 得到 d(r),但事实上我们没必要代回原来的式子,其实可以代回任意形如 α(t)+rβ(t) 的式子,根据式 (17) 并结合开头列举的 f 散度的要求,只要 d(r)=α(ω(r))+rβ(ω(r)) 是一个凸函数就行了( d(1)=0 可以通过平移来实现),或者根据前面的推理 d(r) 是以 r=1 为最小值的任意函数也行。
结论 2:如果 ω(r) 是严格单调递增的,Ω=ω([0,+∞)),ρ(t) 在 t∈Ω 时是恒正的,并且满足如下关系:
以及函数 α(t),β(t) 使得 d(r)=α(ω(r))+rβ(ω(r)) 是一个凸函数,或者使得 d(r) 是以 r=1 为最小值的函数,具备这些条件的的 ϕ(t),ψ(t),α(t),β(t) 就可以用来构建如下的 GAN 模型(其中
已经省去了与 q(x) 无关的 α(t) 部分):
用结论 2 来构造 GAN 就相当自由了,它可以构造出很多 f-GAN 找不出来的例子,因为它允许生成器和判别器的 loss 不一致。
比如在算原始 GAN 的时候,我们得到 t=ω(r)=log r ,而 r log r 刚好就是凸函数,所以可以让 α(t)=0, β(t)=t (注意 α(t) 可以为 0,β(t) 不可以,想想为什么?
),得到 d(r)=r log r ,这时候的 GAN 为:
这便是一个挺好用的 GAN 变种。
还有,既然 r log r 是凸函数,那么 (1+r)log(1+r) 也是,那么可以让
,正好对应 d(r)=(r+1)log(1+r),并且
,所以这时候对应的 GAN 就是 (18),这才是更常用的原始版本的 GAN,比 (13) 更好用。
我们再举一个例子。
取
,这里约定 b>a,那么 Ω=(a,b)(还是先不管边界点),并且
。
我们取 ρ(t)=2(b−t),那么它满足恒正的要求。
这样解得
。
接着取
,它显然是在 r=1 处取到最小值,然后设 α(t)=β(t),试图反推 β(t) 的形式,即 d(r)=(1+r)β(t),推出
,代入
得到
,简单起见我们可以让 b−a=2,那么
。
最后得出的 GAN 形式为:
这其实就是 LSGAN。
读者可能会困惑 LSGAN 里边没有 t(x)∈(a,b) 这个限制呀,这里怎么会有?
事实上这个限制是可以去掉的,因为去掉这个限制后,对应的最优解还是在 (a,b) 里边。
很显然,这些基于推广后的 结论 2 所得到的 GAN 的变种是很有价值的,而且这些 GAN 变种是 f-GAN 没法得到的,因此如果原论文能补充这部分推广,那显得很漂亮了。
本文分享了一篇直接在对偶空间设计 GAN 模型的论文,并且分析了它与 f-GAN 的联系,接着笔者对原论文的结果进行了简单的推广,使得它能设计更多样的 GAN 模型。
最后,读者可能会疑问:f-GAN 那里搞了那么多 GAN 出来,现在你这篇论文又搞那么多 GAN 出来,我们来来去去用的无非就那几个,搞那么多有什么价值呢?这个问题见仁见智了,这类工作更重要的应该是方法上的价值,实际应用的价值可能不会很大。不过笔者更想说的是:
我也没说它有什么价值呀,我只是觉得它比较有意思罢了。
点击以下标题查看更多往期内容:
#投 稿 通 道#
让你的论文被更多人看到
如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。
总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。
PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学习心得或技术干货。我们的目的只有一个,让知识真正流动起来。
📝 来稿标准:
• 稿件确系个人原创作品,来稿需注明作者个人信息(姓名+学校/工作单位+学历/职位+研究方向)
• 如果文章并非首发,请在投稿时提醒并附上所有已发布链接
• PaperWeekly 默认每篇文章都是首发,均会添加“原创”标志
📬 投稿邮箱:
• 投稿邮箱:hr@paperweekly.site
• 所有文章配图,请单独在附件中发送
• 请留下即时联系方式(微信或手机),以便我们在编辑发布时和作者沟通
🔍
现在,在「知乎」也能找到我们了
进入知乎首页搜索「PaperWeekly」
点击「关注」订阅我们的专栏吧
关于PaperWeekly
PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」,小助手将把你带入 PaperWeekly 的交流群里。