31

f-GAN简介:GAN模型的生产车间

 4 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzIwMTc4ODE0Mw%3D%3D&%3Bmid=2247503147&%3Bidx=2&%3Bsn=f8fcec6d1e0c472b66a4d9590438a801
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

yUR7Nrq.gif

©PaperWeekly 原创 · 作者|苏剑林

单位|追一科技

研究方向|NLP、神经网络

今天介绍一篇比较经典的工作,作者命名为 f-GAN,他在文章中给出了通过一般的 f 散度来构造一般的 GAN 的方案。可以毫不夸张地说,这论文就是一个 GAN 模型的“生产车间”,它一般化的囊括了很多 GAN 变种,并且可以启发我们快速地构建新的 GAN 变种(当然有没有价值是另一回事,但理论上是这样)。

yERBbyY.jpg!web

论文链接: https://arxiv.org/abs/1606.00709

emQjUnn.png!web

局部变分

整篇文章对 f 散度的处理事实上在机器学习中被称为“局部变分方法”,它是一种非常经典且有用的估算技巧。 事实上本文将会花大部分篇幅介绍这种估算技巧在 f 散度中的应用结果。 至于 GAN,只不过是这个结果的基本应用而已。

f散度

首先我们还是对 f 散度进行基本的介绍。 所谓 f 散度,是 KL 散度的一般化:

IzuYVjq.png!web

注意,按照通用的约定写法,括号内是 p/q 而不是 q/p,大家不要自然而言地根据 KL 散度的形式以为是 q/p。

可以发现,这种形式能覆盖我们见过的很多概率分布之间的度量了,这里直接把论文中的表格搬进来(部分)。

bQjeMfB.jpg!web

凸函数

上面列举了一堆的分布度量以及对应的 f ,那么一个很自然的问题是这些 f 的共同特点是什么呢?  

答案是:  

1. 它们都是非负实数到实数的映射( aU7Zjiv.png!web);  

2. f(1)=0;  

3. 它们都是凸函数。  

第一点是常规的,第二点  f(1)=0 保证了  meyMnyN.png!web,那第三点凸函数是怎么理解呢? 其实它是凸函数性质的一个最基本的应用,因为凸函数有一个非常重要的性质(詹森不等式):

也就是“函数的平均大于平均的函数”,有些教程会直接将这个性质作为凸函数的定义。 而如果 f(u) 是光滑的函数,我们一般会通过二阶导数 f′′(u) 是否恒大于等于 0 来判断是否凸函数。

利用 (2),我们有:

m67RbaY.png!web

也就是说,这三个条件保证了 f 散度是非负,而且当两个分布一模一样时 f 散度就为 0,这使得   可以用来简单地度量分布之间的差异性。 当然,f 散度原则上并没有保证 P≠Q 时  uYRramq.png!web 但通常我们会选择严格凸的 f(即 f′′(u) 恒大于 0),那么这时候可以保证 P≠Q 时 uYRramq.png!web,也就是说这时候有  6RZn2mV.png!web

注: 即便如此,一般情况下  uQJ7byN.png!web 仍然不是满足公理化定义的“距离”,不过这个跟本文主题关系不大,这里只是顺便一提。

NrQ3emV.png!web

凸共轭

现在从比较数学的角度讨论一下凸函数,一般地,记凸函数的定义域为 D(对于本文来说,)。 选择任意一个点 ξ,我们求 y=f(u) 在 u=ξ 处的切线,结果是:

考虑两者的差函数:

所谓凸函数,直观理解,就是它的图像总在它的(任意一条)切线上方,因此对于凸函数来说下式恒成立。

整理成:

因为不等式是恒成立的,并且等号是有可能取到的,因此可以导出:

换新的记号,记 t=f′(ξ),并从中反解出 ξ(对于凸函数,这总能做到,读者可以自己尝试证明),然后记:

那么就有:

MJbAvyV.png!web

这里的 g(t) 就称为 f(u) 的共轭函数。留意花括号里边的式子,给定 f 后,g 也确定了,并且整个式子关于 u 是线性的。所以总的来说,我们做了这样的一件事情:

对一个凸函数给出了线性近似,并且通过最大化里边的参数就可以达到原来的值。

注意给定 u,我们都要最大化一次 t 才能得到尽可能接近 f(u) 的结果,否则随便代入一个 t,只能保证得到下界,而不能确保误差大小。所以它称为“局部变分方法”,因为要在每一个点(局部)处都要进行最大化(变分)。这样一来,我们可以理解为 t 实际上是 u 的函数,即:

上述讨论过程实际上已经给出了计算凸共轭的方法,在这里我们直接给出上表对应的凸函数的共轭函数。

aYRvMvA.png!web

注:这里的 W 为朗伯 W 函数。

https://en.wikipedia.org/wiki/Lambert_W_function

MJjMfuq.png!web

f-GAN

由上述推导,我们就可以给出 f 散度的估算公式,并且进一步给出 f-GAN 的一般框架。 

f散度估计

计算 f 散度有什么困难呢?根据定义 (1) ,我们同时需要知道两个概率分布 P , Q 才可以计算两者的 f 散度,但事实上在机器学习中很难做到这一点, 有时我们最多只知道其中一个概率分布的解析形式,另外一个分布只有采样出来的样本,甚至很多情况下我们两个分布都不知道,只有对应的样本(也就是说要比较两批样本之间的相似性) ,所以就不能直接根据 (1) 来计算 f 散度了。 

结合 (1) 和 (11) ,我们得到:

MB7JVzN.png!web

将   记为整体 T(x),那么就有:

式 (13) 就是估计 f 散度的基础公式了。意思就是说: 分别从两个分布中采样,然后分别计算 T(x) 和 g(T(x)) 的平均值,优化 T,让它们的差尽可能地大,最终的结果就是f散度的近似值了。 显然 T(x) 可以用足够复杂的神经网络拟合,我们只需要优化神经网络的参数。

注意在对凸函数的讨论中,我们在最大化目标的时候,对 T 的值域是有限制的。因此, 在 T 的最后一层,我们必须设计适当的激活函数,使得 T 满足要求的值域。 当然激活函数的选择不是唯一的,参考的激活函数已经列举在前表。注意,尽管理论上激活函数的选取是任意的,但是为了优化上的容易,应该遵循几个原则:

1. 对应的定义域为 R,对应的值域为要求值域(边界点可以忽略);

2. 最好选择全局光滑的函数,不要简单地截断,例如要求值域为 R+ 的话,不要直接用 relu(x),可以考虑的是  MzUnYjR.png!web

3. 注意式 (13) 的第二项包含了 g(T(x)),也就是 g 和 T 的复合计算,因此选择激活函数时,最好使得它与 g 的复合运算比较简单。

GAN批发

好了,说了那么久,几乎都已经到文章结尾了,似乎还没有正式说到 GAN。事实上,GAN 可以算是整篇文章的副产物而已。 

GAN 希望训练一个生成器,将高斯分布映射到我们所需要的数据集分布,那就需要比较两个分布之间的差异了,经过前面的过程,其实就很简单了,随便找一种 f 散度都可以了。然后用式 (13) 对 f 散度进行估计,估计完之后,我们就有 f 散度的模型了,这时候生成器不是希望缩小分布的差异吗?最小化 f 散度就行了。所以写成一个表达式就是:

或者反过来:

就这样完了。

需要举几个例子?好吧,先用 JS 散度看看。把所有东西式子一步步代进去,你会发现最终结果是(略去了 log2 的常数项):

其中 D 用  rmIJvma.png!web  激活。 这就是最原始版本的 GAN 了。

用 Hellinger 距离试试?结果是:

这里的 D(x) 是线性激活。这个貌似还没有命名?不过论文中已经对它做过实验了。

那用 KL 散度呢?因为 KL 散度是不对称的,所以有两个结果,分别为:

或:

这里的 D(x) 也是线性激活。

好吧,不再举例了。其实这些 f 散度本质上都差不多,看不到效果差别有多大。不过可以注意到,JS 散度和 Hellinger 距离都是对称的、有界的,这是一个非常好的性质,以后我们会用到。

jUFB3yY.png!web

总结

说白了,本文主要目的还是介绍 f 散度及其局部变分估算而已。所以大部分还是理论文字,GAN 只占一小部分。

当然,经过一番折腾,确实可以达到“GAN 生产车间”的结果(取决于你有多少种f散度),这些新折腾出来的 GAN 可能并不像我们想象中的 GAN,但它们确实在优化 f 散度。不过,以往标准 GAN(对应 JS 散度)有的问题,其实 f 散度照样会有,因此 f-GAN 这个工作更大的价值在于“统一”,从生成模型的角度,并没有什么突破。

nmYFBne.png!web

点击以下标题查看更多往期内容:

# 投 稿 通 道 #

让你的论文被更多人看到 

如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢? 答案就是:你不认识的人。

总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。 

PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是 最新论文解读 ,也可以是 学习心得技术干货 。我们的目的只有一个,让知识真正流动起来。

:memo:  来稿标准:

• 稿件确系个人 原创作品 ,来稿需注明作者个人信息(姓名+学校/工作单位+学历/职位+研究方向) 

• 如果文章并非首发,请在投稿时提醒并附上所有已发布链接 

• PaperWeekly 默认每篇文章都是首发,均会添加“原创”标志

:mailbox_with_mail: 投稿邮箱:

• 投稿邮箱: [email protected]  

• 所有文章配图,请单独在附件中发送 

• 请留下即时联系方式(微信或手机),以便我们在编辑发布时和作者沟通

:mag:

现在,在 「知乎」 也能找到我们了

进入知乎首页搜索 「PaperWeekly」

点击 「关注」 订阅我们的专栏吧

关于PaperWeekly

PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击 「交流群」 ,小助手将把你带入 PaperWeekly 的交流群里。

IrqMBj7.gif

▽ 点击 |  阅读原文   | 查看作者博客


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK