[GAN02]WGAN,WGAN-GP,WGAN的Keras实现与WGAN-GP的Pytorch实现

Idea of WGAN

GAN01:GAN的原理与DCGAN的Keras实现中,我们了解到,GAN的目的是使用生成器分布PG拟合数据的真实分布Pdata,在GAN的初始paper以及DCGAN的实现中,实际上计算这两者之间分布差的那个度量标准是JS-Divergence,而利用Sample的方法计算Divergence,就是上文中我们使用的Binary Crossentropy Loss。

由下图可以看出,JSD造成的问题是梯度下降不够平缓,生成器没有足够的动力向Pdata逼近。

在这里插入图片描述

WGAN被提出以解决这个问题,WGAN使用W量度(EM量度)来度量两个分布之间的相近程度,这种量度可以保证梯度的平缓,换句话说,能够为PG提供足够的动力逼近Pdata。

在这里插入图片描述

W距离的初始定义由上图所示,但是在实作中,我们sample的方式计算

在这里插入图片描述

只要D在1~李普希茨函数内取值,即y的变化慢于x的变化,就可以以上式计算W距离

两种满足1~李普希茨的方式

1.weight clipping,这种方式在初始时将所有的weight设在-c到c之间,并且在每次更新后将超出[-c,c]的规范化参数到[-c,c]之间,这种方法被证明可以满足k-lipschitz条件。
在这里插入图片描述
2. Weight Penalty,第一种方式的问题是他经常导致参数集中在-c和c的位置,因此人们开发了这种方式,通过对超出-1的weight添加惩罚项,来限制函数处于lipschitz范围内。

在这里插入图片描述

WGAN的Keras实现

这种方式相比之前我们实现的DCGAN有两点主要的不同,我只说一下这两点不同。

使用W-loss代替二分类交叉熵loss

WGAN的paper中提出了一种新的loss_function
Loss=D(real)-D(fake)

在Keras中,我们是这样实现的:

在这里插入图片描述
因为我们会给real的sample传lable=1,因此real的Loss=y_pred*1=y_pred

因为我们会给real的sample传lable=-1,因此fake的Loss=y_pred*-1=-y_pred
二者结合即得W-Loss

Weight Clipping

在这里插入图片描述

WGAN-GP的pytorch实现

这种实现中的疑点较多,换句话说,值得理解的地方也较多,写在下篇blog里。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值