WGAN, WGAN-GP, BE-GAN论文笔记

GAN网络的重点在于均衡生成器与判别器,若判别器太强,loss没有再下降,生成器学习不到东西,生成图像的质量便不会再有提升,反之也是。

WGAN与WGAN-GP

WGAN中相较于此前GAN的改进主要在于以下四点:

  • 判别器最后一层去掉sigmoid
  • 生成器和判别器的loss不取log
  • 每次更新判别器的参数之后把它们的绝对值截断到不超过一个固定常数c,即Lipschitz限制
  • 不要用基于动量的优化算法(包括momentum和Adam),推荐RMSProp,SGD也行
什么是Wasserstein距离?

Wasserstein距离又叫Earth-Mover(EM)距离,定义如下:

W ( P r , P g ) = inf ⁡ γ ∼ Π ( P r , P g ) E ( x , y ) ∼ γ [ ∣ ∣ x − y ∣ ∣ ] W(P_r, P_g) = \inf_{\gamma \sim \Pi (P_r, P_g)} \mathbb{E}_{(x, y) \sim \gamma} [||x - y||] W(Pr,Pg)=γΠ(Pr,Pg)infE(x,y)γ[xy]
Π ( P r , P g ) \Pi (P_r, P_g) Π(Pr,Pg) P r P_r Pr P g P_g Pg组合起来的所有可能的联合分布的集合,对于 γ \gamma γ而言,可以从中采样 ( x , y ) ∼ γ (x, y) \sim \gamma (x,y)γ得到一个真实样本x和一个生成样本y,并计算初这对样本的距离 ∣ ∣ x − y ∣ ∣ ||x-y|| xy(范数),再计算出其期望值,获得的这个期望值的下界称为Wasserstein距离。

个人理解:从生成样本和真实样本中随机取出一对样本,计算他们之间的差的均值,最小的那个均值即所求。

WGAN中改进的理由?
1. 判别器最后一层去掉sigmoid

判别器的损失函数在训练中会近似真实分布与生成分布之间的Wasserstein距离。原始GAN的判别器做的是真假二分类任务,所以最后一层是sigmoid,但是现在WGAN中的判别器做的是近似拟合Wasserstein距离,属于回归任务,所以要把最后一层的sigmoid拿掉。

2. 生成器和判别器的loss不取log

原始GAN使用的loss函数为:
− E x ∼ P r [ log ⁡ D ( x ) ] − E x ∼ P g [ log ⁡ ( 1 − D ( x ) ) ] -\mathbb{E}_{x\sim P_r}[\log D(x)] - \mathbb{E}_{x\sim P_g}[\log(1-D(x))] ExPr[logD(x)]ExPg[log(1D(x))]
WGAN中不再对其取Log,改为:
L ( D ) = − E x ∼ P r [ D ( x ) ] + E x ∼ P g [ D ( x ) ] L(D) = -\mathbb{E}_{x\sim P_r}[D(x)] + \mathbb{E}_{x\sim P_g}[D(x)] L(D)=ExPr[D(x)]+ExPg[D(x)]
L ( G ) = − E x ∼ P g [ D ( x ) ] L(G) = - \mathbb{E}_{x\sim P_g}[D(x)] L(G)=ExPg[D(x)]
判别器的损失函数由代码实现即为torch.mean(D(G(z)))-torch.mean(D(real)),损失函数要小,所以该loss函数旨在尽可能拉高真实样本的分数,拉低生成样本的分数。而生成器的损失函数则旨在拉高生成样本的分数。两者对抗

3. Lipschitz限制

WGAN与WGAN-GP的区别主要就在这一部分
Lipschitz限制即要求判别器D(x)梯度的Lp_norm不大于一个有限的常熟k。其作用在于当输入样本稍微变化后,判别器给出的分数不会发生太剧烈的变化,以此保证判别器不会对两个略微不同的样本给出天差地别的分数。
weight clipping
∣ ∣ ∇ x D ( x ) ∣ ∣ p ≤ K ,  ∀ x ∈ X || \nabla _x D(x) ||_p \leq K \text{, } \forall x \in \mathcal{X} xD(x)pKxX
判别器的梯度是我Lp范数 限制在K以内。
WGAN中这步是通过weight clipping的方式实现的,即每当更新完一次判别器的参数之后,就检查判别器的所有参数的绝对值有没有超过一个阈值,比如0.01,有的话就把这些参数clip回 [-0.01, 0.01] 范围内。
然而这就导致了参数数值分布集中在最大最小两个极端上,这就使得判别器倾向于学习简单的映射函数(几乎所有参数都是正负0.01,都已经可以直接视为一个二值神经网络了)。判别器的性能就会变差。这才就有了WGAN-GP中的Gradient penalty。
在这里插入图片描述
Gradient penalty
[ ∣ ∣ ∇ x D ( x ) ∣ ∣ p − K ] 2 [ || \nabla_x D(x) ||_p - K ]^2 [xD(x)pK]2
WGAN-GP中设置了一个额外的Loss来限制判别器的梯度,公式如上。文中k取值为1。
作者提出,我们没必要在整个样本空间上施加Lipschitz限制,只要重点抓住生成样本集中区域、真实样本集中区域以及夹在它们中间的区域就行了。具体来说,我们先随机采一对真假样本,还有一个0-1的随机数: x r ∼ P r , x g ∼ P g , ϵ ∼ U n i f o r m [ 0 , 1 ] x_r \sim P_r, x_g \sim P_g, \epsilon \sim Uniform[0, 1] xrPr,xgPg,ϵUniform[0,1]
x ^ = ϵ x r + ( 1 − ϵ ) x g \hat x = \epsilon x_r + (1 - \epsilon) x_g x^=ϵxr+(1ϵ)xg
interpolates就是随机插值采样得到的图像,gradients就是loss中的梯度惩罚项,限制判别器的loss中所求的就是interpolates的梯度的梯度。
将该公式与WGAN中原本的判别器的损失函数加权合并,就得到新的判别器loss:
L ( D ) = − E x ∼ P r [ D ( x ) ] + E x ∼ P g [ D ( x ) ] + λ E x ∼ X [ ∣ ∣ ∇ x D ( x ) ∣ ∣ p − 1 ] 2 L(D) = -\mathbb{E}_{x\sim P_r}[D(x)] + \mathbb{E}_{x\sim P_g}[D(x)] + \lambda \mathbb{E}_{x \sim \mathcal{X}} [ || \nabla_x D(x) ||_p - 1 ]^2 L(D)=ExPr[D(x)]+ExPg[D(x)]+λExX[xD(x)p1]2

实验表明,gradient penalty能够显著提高训练速度,解决了原始WGAN收敛缓慢的问题

4. 不要用基于动量的优化算法

这点是作者实践中发现的,是一件玄学的事情,然后WGAN-GP中又不需要注意这一点了。

5. 补充:

论文还讲了一些使用gradient penalty时需要注意的配套事项,这里只提一点:由于我们是对每个样本独立地施加梯度惩罚,所以判别器的模型架构中不能使用Batch Normalization,因为它会引入同个batch中不同样本的相互依赖关系。如果需要的话,可以选择其他normalization方法,如Layer Normalization、Weight Normalization和Instance Normalization,这些方法就不会引入样本之间的依赖。论文推荐的是Layer Normalization

BEGAN

主要不同在于它的判别器。它的判别器作为一个编码译码器一样的存在,输入的是图片,输出的是经过编码后的图片。
它提出了一个新的概念,就是如果a分布与b分布相近,b分布与c分布相近,那么就可以认为a分布与c分布相近。a相当于训练的数据x,b相当于D对x编码解码后的图像D(x),c相当于D以G的生成为输入的结果D(G(z)) 。

原文中如此描述:We first introduce the auto-encoder loss, then we compute a lower bound to the Wasserstein distance between the auto-encoder loss distributions of real and generated samples.
It is important to note that we are aiming to optimize a lower bound of the Wasserstein distance
between auto-encoder loss distributions, not between sample distributions
作者在文中表明,文中优化的目标是自编码器D的损失分布的Wasserstein distance下界,而不是样本图像分布之间的。
其中损失函数公式如下图所示:
损失函数
D为判别器,是一个auto-encoder,v为输入图像,输入图像与输出图像的维度均为RNx,文中n=1。这里的损失函数是一个基于像素的损失,表示真实输入图像与经过自编码网络D的输出D(v)的相似程度。
作者认为Loss的数值满足独立同分布的情况,真实样本的loss L(x) 与生成器G的loss L(G(z)) ( L(G(z))=|G(z)-D(G(z))|n ) 近似满足正态分布。
假设L(x)和L(G(z))分别是µ1 = N(m1; C1)和 µ2 = N(m2; C2)的正太分布,m为均值,维度为Rp,c为方差维度为Rp×p 。那我们的目的就是求μ1与μ2之间的 Wasserstein 距离的下界。经推导,W(μ1,μ2)>=|m1-m2|,所以我们要求的就是|m1-m2| 的最大值。有两种方案:
在这里插入图片描述
最终选择的是方案b,因为当m1越趋向于0时,生成的图像就会越真实。
论文的目标是:
损失函数
其中参数kt中γ的取值范围为[0, 1],它是用于维持生成器与判别器之间平衡的一个重要参数。E表示equilibrium,平衡。
在这里插入图片描述
kt中的参数λk是kt的增益因子,通俗点来说,相当于kt的学习率,文中,作者使其等于0.001,不断调整kt的值。
文中D 和G 分别采用Adam作为优化器。
作者还提出了用M_global作为一个度量值检测网络收敛程度。它用于检测L(x)的最低值,和第二项最低值之和。
在这里插入图片描述
||x-D(x)|| - || G(z)- D(G(z)) || 不断趋近于0,那么随着训练,D(x)会不断接近x,那么D(G(z)) 接近于G(z),就意味着 g(z) 的数据分布和x分布几乎一样了,那么就说明G学到了生成数据的能力???。
如果||x-D(x)|| - || G(z)- D(G(z)) || |刚好等于0,这时候,D(x)和x可能还差的很远呢,此时如果我们用wassertein距离衡量m1与m2的距离。
根据wassertein公式
wassertein公式
经作者研究,在公式第二项是恒定的或者单调递增的情况下,仅公式第一项就可优化W2,W2与||m1-m2||2成正比:
在这里插入图片描述

参考文献

  1. 郑华滨-令人拍案叫绝的Wasserstein GAN
  2. DCGAN、WGAN、WGAN-GP、LSGAN、BEGAN原理总结及对比
  3. BEGAN解读
  4. 郑华滨-Wasserstein GAN最新进展:从weight clipping到gradient penalty,更加先进的Lipschitz限制手法
  • 7
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值