欢迎来到专栏《GAN的优化》。 这是第二期。 本专栏介绍了GAN的相关背景、基本原理、优化等相关理论,特别侧重于GAN目标函数的优化。 粥和有三带领大家从零开始深入探索干的点滴。

其实,比起到处搜集的资料积累,我更喜欢讲故事。 从头到尾讲一个故事,中间环环相扣,逻辑条理清晰,读后仔细回想,就能融会贯通。

上次从一般的生成模型开始,论述了明确定义最大似然法和概率分布的模型,最后论述了GAN的结构、本质。 今天和大家一起学习fGAN。 fan是具有一定“通用”意义的模型,可以定义框架,从该框架自然派生其他GAN模型。 这篇文章不一定有助于提高你的实验效果,但它有助于了解早期的GAN,提高机器学习的水平和见解。

作者小米粥

今天是第二期,主要介绍fGAN。 本文首先建立距离和测量的概念,然后引出f分集的概念,用共轭函数和神经网络计算f分集,最后简述KL分集和JS分集的问题。

1 分布间的距离

首先提出的GAN基于博弈论,包括鉴别器和生成器,鉴别器给出输入样本来自训练集的概率,并且生成器努力生成可以欺骗鉴别器的样本。 整个GAN流程虽然有点复杂,但非常具体,也可以拟人化理解。 其实,更一般地,应该从样本的概率分布的角度来理解GAN,从这里开始虽然有点抽象,但是可以接触到GAN的本质。

因为GAN生成器隐式地定义概率分布,并且根据该概率分布生成样本,但是对于一些训练样本集,GAN的核心目标是驱动生成器定义的隐式概率分布接近训练样本集的本质概率分布,以及连续独立地对其进行采样

不同概率密度函数之间的距离有“近”。 例如,下图中黄色分布和蓝色分布的距离应该接近“感觉”,而红色分布和蓝色分布的距离应该接近“感觉”。 为了量化分布之间的距离,必须定义测量函数(

在向量空间中,将各向量视为一个要素,有很多两个要素之间距离的测量方法,如闵可夫斯基距离、欧式距离、曼哈顿距离、超大船距等。 中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。 请注意,定义的距离必须满足非阴性、对称性和三角不等式。

2 f-divergence

分集(f-divergence )提供了一系列“距离”,通过以下公式定义了数据集的本质概率分布和生成器的隐式概率分布:

其中f(u )是凸函数,并且f )1)=0。 f(1)=0确保当两个分布完全一致时,f分散度为0。 f(u )是凸函数,保证f-divergence的值不是负的。 用Jensen不等式简单证明一下:

分集f(u )有多种形式,如下图所示。

的满足一般要求的凸函数f(u )的函数示意图如下图所示。

3 共轭函数

即使知道f分集的一般公式,也无法正确计算其值。 您可能会得到训练数据集的概率密度函数表达式,但不知道生成器隐式定义的概率密度函数。

我们用共轭函数将f分散度转换为可计算的形式。 共轭(或对偶)通常是指具有相同结构和意义、具有较强关系的两个实体配对出现。 闲话不多说,无论原始函数是否为凸函数,其共轭函数都一定是凸函数。 凸函数在进行优化时具有非常好的数学性质。

共轭函数的定义

的定义域是f(u )的一阶导数的值域。 也就是说,对于任意给定的u,遍历所有可能的t赋值计算,寻找最大值。

此时,f分散度可以变换为:

t和u具有非常复杂的数学解析关系,则t和x也具有非常复杂的数学解析关系,即便用共轭函数给出了f散度的一个下界,依然无法写成解析式而使用蒙特卡洛方法近似求解。利用神经网络强大的函数拟合能力,可以构造一个神经网络T来拟合t和x的复杂函数关系,即

这里要注意通过设置最后一层的激活函数以保证神经网络的输出在f(u)的一阶导数的值域中。

所以,对于这个神经网络T,我们应该以

为目标函数通过采样的方式进行训练,将求极值的问题转化成训练神经网络的问题,理论上,经过完美的训练,上述目标函数即转化成了f散度的一个下界。所以在fGAN的框架下来看,训练判别器本质上是为了逼近一个f散度,然后利用f散度去指示生成器的学习。从现在开始,判别器已经不再像最原始的GAN拥有具象的意义了。

需要补充说明一下,如何通过选择最后一层输出神经元的激活函数来保证T的输出在f(u)的一阶导数的值域中。

4 产生GAN

现在,我们可以利用上述的流程在fGAN的框架下生成原始版本的GAN。在原始版本的GAN中,希望用JS散度来度量两个概率分布的距离,则选择原函数和其对应的共轭函数为

代入其中则

做一个简单的变换(同时注意相应调整激活函数):

则有

这就是熟悉的GAN的判别器的目标函数了。若要有人尝试使用直接用KL−divergence KL-divergenceKL−divergence,则有

当然也可以选择使用逆KL散度。另外,对于LSGAN,可以证明其使用的是卡方距离,而EBGAN使用总变差距离。

5 两个小问题

KL散度和逆KL散度在严格意义上并不是一种度量,因为不符合对称性,即

非对称性意味着使用KL散度或者逆KL散度作为优化目标,其得到结果将具有显著差异。例如,用分布Q去拟合分布P,选择KL散度,Q会将诸多高概率的峰模糊化:

如若使用逆KL散度,则会导致Q去拟合高概率的单峰:

另一个需要解释的问题,为什么原始GAN中使用JS散度效果不好。因为训练集的概率分布和生成器隐式定义的概率分布往往只是高维空间的低维流形,例如下图在三维空间中,两个分布均是二维流形,其交集最多为一条线段,以至于在计算JS散度时,忽略重叠部分的问题在维数很高时,将愈加严重,在此只给出一个三维空间示意图。

即对于任意x,在绝大部分情况下,两个概率分布至少有一个为0。

显然,这样计算得来的JS散度为常数。所以如果将判别器训练的太好(即学习到了JS散度)但JS散度为一个常数,无法提供任何梯度信息供生成器训练,就是大家常说的“学不动”。

6 作者介绍

小米粥,本科就读于吉林大学物理学院、经济学院,现为中科院二年级直博生,主要研究方向为机器学习、GAN,入有三AI-GAN群请添加小米粥微信xiaozhouguo94

总结

今天向大家介绍了概率密度函数的距离、由f散度定义的一系列距离、共轭函数,之后推导了如何使用fGAN生成原始的GAN,最后阐述了KL散度和JS散度的一些问题。

下期预告:对偶与WGAN

有三AI夏季划

有三AI夏季划进行中,欢迎了解并加入,系统性成长为中级CV算法工程师。

转载文章请后台联系

侵权必究

往期精选

【GAN优化】GAN优化专栏上线,首谈生成模型与GAN基础

【技术综述】有三说GANs(上)

【模型解读】历数GAN的5大基本结构

【完结】深度学习CV算法工程师从入门到初级面试有多远,大概是25篇文章的距离

【完结】优秀的深度学习从业者都有哪些优秀的习惯

【完结】给新手的12大深度学习开源框架快速入门项目

【完结】总结12大CNN主流模型架构设计思想

【AI不惑境】数据压榨有多狠,人工智能就有多成功

【AI不惑境】网络深度对深度学习模型性能有什么影响?

【AI不惑境】网络的宽度如何影响深度学习模型的性能?

【AI不惑境】学习率和batchsize如何影响模型的性能?

【AI不惑境】残差网络的前世今生与原理

【AI不惑境】移动端高效网络,卷积拆分和分组的精髓