GAN的损失函数(转载)


转载:https://zhuanlan.zhihu.com/p/72195907 GAN的损失函数

理解生成对抗网络的关键在于理解GAN的损失函数

JS散度

GAN实际是通过对先验分布施加一个运算G, 来拟合一个新的分布

 

如果从传统的判别式网络的思路出发,只要选定合适的loss,就可以使生成分布和真实分布之间的距离尽可能逼近

KL散度经常用来衡量分布之间距离

[公式]

但KL散度是不对称的。不对称意味着,对于同一个距离,观察方式不同,获取的loss也不同,那么整体loss下降的方向就会趋向于某个特定方向。这在GAN中非常容易造成模式崩塌,即生成数据的多样性不足

JS散度在KL散度的基础上进行了修正,保证了距离的对称性:

[公式]

实际上,无论KL散度还是JS散度,在直接用作loss时,都是难以训练的:由于分布只能通过取样计算,这个loss在每次迭代时都几乎为零

GAN loss的推导

GAN的训练方法,能够巧妙的解决这个问题:

先训练D,再训练G,二者相互对抗,直到收敛

 

在原始的GAN中,提出的loss是:

[公式]

当G固定且运算可逆时(实际上这一点一般不成立,但不影响了解GAN的思想):

[公式]

代入loss公式,进而有:

[公式]

对于积分区间内的每一个x,设被积函数为f 为:

[公式]

注意这里x是固定的,变量是D。对f求导,得到当 [公式] 时,f存在最大值。

由于被积函数的最大值对于任意x都成立,所以当 [公式] 时, V(D, G)有最大值

代入loss公式,有:

[公式]

所以原始GAN的loss实际等价于JS散度

Wasserstein Loss

JS散度存在一个严重的问题:两个分布没有重叠时,JS散度为零,而在训练初期,JS散度是有非常大的可能为零的。所以如果D被训练的过于强,loss会经常收敛到-2log2而没有梯度

对于这个问题,WGAN提出了一个新的loss,Wasserstein loss, 也称作地球移动距离:

[公式]

这个距离的直观含义是,将分布r移动到分布g所需要的距离,所以即使是两个分布没有重叠,这个loss也是有值的

可以证明,该距离可以转化为如下形式:

[公式]

其中f必须满足1-Lipschitz连续,即: [公式] 可以看到,符合1-Lipschitz连续的函数的梯度是受限的,可以有效的防止梯度的爆炸,使训练更加稳定

 

Spectral Normalization

对于GAN来说,f其实就是指的D或G,也就是神经网络。对于神经网络来说,一般是由一系列矩阵乘法复合而成的。可以证明,如果矩阵乘法这个运算满足1-Lipschitz连续,那么其复合运算也会满足1-Lipschitz连续,神经网络也就满足1-Lipschitz连续

对于矩阵变换A来说,它满足K-Lipschitz连续的充要条件是: $$ ||Ax|| \leq K||x|| $$ 对其等价变换有:

[公式]

假设 [公式] 的特征向量构成的基底为 [公式] 对应的特征值为 [公式] ,则x可由特征向量表示: [公式]

那么有:

[公式]

只有当i 不等于j时,式子不为零, 且 [公式]

所以有: [公式]

矩阵 [公式] 是半正定矩阵,所有特征值都为非负,所以只要矩阵除以它最大的奇异值的开方,就可以满足1-Lipschitz连续。power iteration 是求奇异值的一种简便算法,

称这种除以最大奇异值的操作为spectral norm

Hinge loss

Hinge loss 是对地球移动距离的一种拓展

Hinge loss 最初是SVM中的概念,其基本思想是让正例和负例之间的距离尽量大,后来在Geometric GAN中,被迁移到GAN:

[公式]

对于D来说,只有当D(x) < 1 的正向样本,以及D(G(z)) > -1的负样本才会对结果产生影响

也就是说,只有一些没有被合理区分的样本,才会对梯度产生影响

这种方法可以使训练更加稳定