信息熵,KL散度,JS散度与Wasserstein距离----GAN到WGAN的进化之路

要了解WGAN就要知道Wasserstein距离和GAN,要了解GAN就需要知晓JS散度,JS散度则是对KL散度的改进,想要弄清楚KL散度就需要从信息熵说起

1️⃣信息熵

在《信息论》中熵是接收的每条消息中包含的信息的平均量,消息代表来自分布或数据流中的事件、样本或特征。在信息世界,熵越高,则能传输越多的信息,熵越低,则意味着传输的信息越少。
例如:太阳从东边出来,与今晚买彩票xxxx号能中大奖相比(假如笔者有超能力可以预测彩票中奖号码),“今晚买xxxx号彩票中大奖”似乎更让人觉得有用处,也许你会说:“我靠,你怎么知道今晚买xxxx号能中大奖的!!!”,也就是说太阳从东边出来这条信息甚至对于刚会讲话的小baby来说都是常识,你可能会说:“太阳从东边升起这个事情还用你告诉我?”,我们对一条信息的“惊讶”程度越大,这条信息所含的信息量越大。
在此给出信息熵的公式:
在这里插入图片描述
其中P(xi)表示事件xi的概率,共n个事件。

信息熵三性质

  • 非负性:信息熵可以看作为一种广度量,非负性是一种合理的必然;由公式可知,一堆事件发生概率一定小于1,则取对数后为负,所以我们需要在前面加一个负号来取正。
  • 单调性:发生概率越高的事件,其携带的信息量越低,这也就是说为什么用概率P(x)来代表信息量;
  • 累加性,即多随机事件同时发生存在的总不确定性的量度是可以表示为各事件不确定性的量度的和,这也是广度量的一种体现。
    由以上三性质不难理解信息熵的公式为何如此抽象。

2️⃣KL散度

KL散度(Kullback-Leibler Divergence)一般用于度量两个概率分布函数之间的“距离”KL散度又可称为相对熵,描述两个概率分布 P 和 Q 的差异或相似性,公式为:
在这里插入图片描述

很显然散度越小表示P与Q之间的差距越小,但KL散度不对称,即:在这里插入图片描述

为什么不对称?

首先给出两种情况的公式
在这里插入图片描述(1-1)
在这里插入图片描述(1-2)
很明显,假如我们现在有两个分布P,Q取之范围均为0~10,其中
P(x=i)=1/10(i属于1~10)
Q(x=1)=2/10
Q(x=2~9)=1/10
Q(x=10)=0
那么当x=10的时候由(1-1)可知DKL无穷大,然而由(1-2)可知DKL=0,很容易证明其不对称性。

KL散度不对称会给训练带来什么影响

KL散度会引起训练时优化方向的不稳定(如果 P 是真实分布而 Q 是模型分布)

  • 在选择(1-1)的情况下,模型更关注的是分布 P 中高概率区域在分布 Q 中的表示。优化过程会努力确保模型在真实分布出现频率较高的地方表现得很好。
  • 在选择(1-2)的情况下,模型更关注的是模型分布 Q 中高概率区域在真实分布 P 中的表示。优化过程会努力确保模型生成的样本在真实分布中也是合理的。

3️⃣JS散度

正是由于KL散度的不对称性问题使得在训练过程中可能存在一些问题,为了解决这个问题,我们在KL散度基础上引入了JS散度。

如何将KL散度优化为JS散度

首先我们引入另一个变量M,令M=1/2(P+Q),分别算DKL(P||M)DKL(Q||M)
然后均取其1/2将其相加得到**JSD(P||Q)**即:
在这里插入图片描述
将以上公式展开来看
在这里插入图片描述
等号右边合并
在这里插入图片描述
提取常数项后得到
在这里插入图片描述
由于
在这里插入图片描述
将常数项合并以后得到
在这里插入图片描述

到此我们将JSD展开结束了,由展开式不难看出括号内的部分是有可能取到0的,如果P与Q的分布情况下使得括号内恒为0,则JSD=log2为一个常数恒成立,那么梯度将不复存在,训练也就会变的毫无意义。

什么情况下JSD=log2?

假设我们令P为x~(0,5)的分布,令Q为x~(8,13)的分布如下图所示
在这里插入图片描述

  • 在(0,5)内,Q=0展开式括号内左半部分存在log1为0,由半部分Q(x)=0,则JSD=log2
  • 在(5,8)内P与Q没有重叠,则P与Q均为0,展开式括号内为0,JSD=log2
  • 在(8,13)内P=0展开式扩后内右半部分存在log1为0,左半部分P(x)=0,则JSD=log2
    那么到这里我们可以得出,当两个分布没有一点重合也就是完全不重合的时候,JSD=log2恒成立。

为什么会出现完全不重叠的情况

图片其实是高维空间里低维的流形,因为在高维空间中随便采样一个点,它通常都没有办法构成一个图片,所以图片的分布,在高维的空间中其实是非常狭窄的。换个角度解释,如果是以二维空间为例,图片的分布可能就是二维空间的一条线,也就是 P 和 Q都是二维空间中的两条直线。而二维空间中的两条直线,除非它们刚好重合,否则它们相交的范围是几乎可以忽略的。从另一个角度解释,我们从来都不知道 P 和 Q 的具体分布,因为其源于采样,所以也许它们是有非常小的重叠分布范围。比如采样的点不够多,就算是这两个分布实际上很相似,也很难有任何的重叠的部分。

4️⃣GAN

上面啰嗦了这么,又是信息熵又是KL散度,又是JS散度的,这跟GAN有什么关系?

首先了解GAN

GAN全称Generative adversarial network,即生成对抗网络,网络由两部分组成,一部分是负责生成新事物的生成网络,一部分是负责判断生成的事物是真实的还是生成的;生成网络不断优化生成使判断网络觉得生成的事物更加真实,判断网络不断优化其判断能力使之不被生成网络所生成的事物迷惑,两个网络在如此的相互对抗中迭代升级。

网络工作过程(数据以图片为例)

GAN有很多种变体,在此我们用论文[《Generative Adversarial Nets》]
中的所描述的基于多MLP构成的生成器和判别器组成的生成对抗网络模型,作为例子来讲述。

我们首先不去理会生成器,训练判别器;因为生成器的初始参数是随机初始化的,所以它什么都没有学习到,输入一系列采样得到的向量给它,它的输出都是些随机、混乱的图片,然后我们根据真实的数据送入判别器与生成的数据做对比,我们把真正的图片标 1,生成器产生出来的图片都标 0。接下来对于判别器来说,这就是一个回归的问题,判别器看到真实图片就要输出 1,生成器的图片越假输出越接近 0,并且进行 0-1 之间的打分。
然后我们不去理会判别器,来训练生成器;生成器的目标是努力让生成的图片可以在判别器那里“蒙混过关”,首先我们随机选取一些向量送到生成器里来生成一张图片,我们将这个图片输入到判别器中,判别器会给这个图片一个打分。这里判别器是固定的,它只需要给更“真”的图片更高的分数即可,生成器训练的目标就是让图片更加真实,也就是提高分数。
接下来就是重复以上的训练,训练完判别器固定判别器训练生成器。训练完生成器以后再用生成器去产生更多的新图片再给判别器做训练。训练完判别器后再训练生成器,如此反覆地去执行。当其中一个进行训练的时候,另外一个就固定住,期待它们都可以在自己的目标处达到最优。网络框架如下图所示。
网络整体
在这里插入图片描述

生成器(Generator)
在这里插入图片描述

判别器(Discriminator)
在这里插入图片描述

怎么打分以及如何优化

(1)生成器

生成器的本质就是在做一个极大似然估计,我们用在这里插入图片描述来表示输入生成器的数据的分布,网络需要做到的是(1)确定P的分布(2)找到相应的在这里插入图片描述使生成器按照如此分布生成的图片能够与输入判别器的数据最大程度的拟合。
如何确定P的分布呢?
我们首先取一个先验分布P1(可以是高斯分布),然后按照这个分布选取数据送入网络,然后生成图片B`,我们训练的目的是生产出一张与真实图片B最大程度拟合的图片,于是我们可以将生成的图片丢入判别器,根据判别器的损失函数来反馈调节参数与分布情况。

(2)判别器

对于生成器与判别器我们可以将其抽象为两个函数分别为G与D,令G为最优解,D用来评估真实数据与生成数据之间的差距,我们令真实数据的分布为Pdata,生成的分布为PG,在引出我们GAN目的的数学模型:
在这里插入图片描述
其中max V(G,D)衡量了生成数据与真实数据之间的差异(打分的分数),因此我们通过上式得到了最小差异的G。
生成数据与真实数据的差异如何衡量?即V(G,D)是什么?
在maxV(G,D)时我们需要对固定G来优化D,使之得到最大化的D
。其中V(G,D)可以用以下来推导并表示
在这里插入图片描述
我们可以令:在这里插入图片描述
将以上公式写作:
在这里插入图片描述
在此我们求的这个函数关于D的最大值为:
在这里插入图片描述

然后将D*带入到maxV(G,D)中得到:
在这里插入图片描述

由此我们得出了G的最优解G的终极表达式:*

在这里插入图片描述
其中JSD为JS散度(如上文所介绍)也就是使得JSD最小的G即为所求。
如上的G如何通过网络得到呢?
我们可以通过梯度下降算法来最小化损失函数L得到最优的G*。
其实到这里我们不难看出,判别器的训练目标是看到真实数据就给它比较高的分数,看到生成的数据就给它比较低的分数,我们可以把它当做是一个优化问题,具体来说,我们要训练一个判别器,其可以最大化一个目标函数,当然如果我们最小化它就可以称它为损失函数

GAN存在的问题

最大的问题便是GAN使用了JS散度,然而JS散度最大的问题就是当两个分布P,Q完全不重合的时候JSD=log2,是一个常数,这样的话其梯度就会消失。训练过程极度不稳定。

5️⃣Wasserstein距离

Wasserstein距离是2000年IJCV期刊文章《The Earth Mover’s Distance as a Metric for Image Retrieval》提出的一种直方图相似度量;用来评估由P分布转换成Q分布所需要的最小代价(移动的平均距离的最小值)。
其数学定义如下:
在这里插入图片描述
其中在这里插入图片描述为P1,P2分布组合起来的所有可能的联合分布的集合。对于每个联合分布γ,可以从(x,y)~γ中得到样本x,y,并且计算出这对样本距离||x-y||,因此可以计算该联合分布γ下,样本对距离的期望值E(x,y)∼γ(||x−y||),最后在所有可能的联合分布中能够对这个期望值取到的下界,这个下界就是Wasserstein距离。
我们举例来看:
假设我们有这样两个分布P和Q,其位置信息如下:
在这里插入图片描述
我们画出其位置分布图;
在这里插入图片描述

在这里插入图片描述

如何将P分布转换为Q分布?

首先我们将P中位置0的上面两块移动到位置2上,然后再将位置1上的一块移动到3上,再将位置4上的一块移动到位置3上
在这里插入图片描述
由此我们得到,移动的距离总和为:2x2+1x2+1x2=8
那么我们还有别的移动方式么?
将P中4上的2块移动到1上,然后再将0上的两块移动到2上,再将0上的两块移动到2上,再将1上的两块移动到3上,最后将1上一块移动到4上…有很多种方法将P转化为Q,在此最小的移动距离为8,所以我们按照定义算得最小代价(最小平均距离)=8/15
从以上的转化方式中我们不难发现,这种方法可以抽象为推土机推土的一个过程,所以Wasserstein距离又被称为推土机(Earth Mover)距离。

6️⃣WGAN-Wasserstein GAN

论文地址:https://arxiv.org/pdf/1701.07875
上文提到的GAN存在着一个严重的问题,就是如果生成数据与真实数据两个分布完全不重叠,那么梯度将会消失,这个问题是损失函数JS散度带来的,WGAN就从损失函数的角度来对GAN进行改进的
WGAN对于GAN的其他改进:

  • 判别器最后一层去掉sigmoid
  • 每次更新判别器的参数之后把它们的绝对值截断到不超过一个固定常数c
  • 不要用基于动量的优化算法(包括momentum和Adam)

如何对损失函数进行改进

WGAN提出了一个名为Wasserstein Loss的损失函数,也就是将我们前面所讲到的Wasserstein距离运用了进来。
上文提到的Wasserstein距离公式:
在这里插入图片描述
此公式无法直接求解,在论文中作者使用了另一种表达方式:
在这里插入图片描述

具体推导过程作者在文章中已经给出。在对上面这个式子做出解释之前,先引入一个概念:Lipschitz连续

Lipschitz连续

在一个连续函数f上面额外施加了一个限制,要求存在一个常数K>=0使得定义域内的任意两个元素x1和x2都满足
在这里插入图片描述
此时称函数f的Lipschitz常数为K。Lipschitz连续条件限制了一个连续函数的最大局部变动幅度。
此时我们可以给出公式的详解了
要求函数f的Lipschitz常数在这里插入图片描述对所有可能的条件的f取到在这里插入图片描述的上界然后再除以K,文章在此给公式变形:
在这里插入图片描述可以把f用一个带参数的神经网络来表示。具体的K是多少并不重要(只要不是正无穷就可以),因为它只是会使得梯度变大K倍,并不会影响梯度的方向。到此为止,我们可以构造一个含参数、最后一层不是非线性激活层的判别器网络f,在限制参数不超过某个范围的条件下,使得在这里插入图片描述尽可能取到最大,此时L就会近似真实分布与生成分布之间的Wasserstein距离。接下来生成器要近似地最小化Wasserstein距离,可以最小化L,由于Wasserstein距离的性质,我们不需要担心生成器梯度消失的问题。再考虑到L的第一项与生成器无关,就得到了WGAN的两个loss:

  • 生成器的loss:
    在这里插入图片描述

  • 判别器的loss:
    在这里插入图片描述
    得到loss后,在训练中反向传播不断调整参数。

7️⃣参考文章:

[1]《信息熵是什么?》
[2][《Generative Adversarial Nets》
[3]《TOWARDS PRINCIPLED METHODS FOR TRAINING GENERATIVE ADVERSARIAL NETWORKS》
[4]《Earth Mover’s Distance (EMD)》
[5]Wasserstein距离(最优传输距离:
[6]《Wasserstein GAN》

  • 15
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值