李宏毅深度学习笔记——Tips for Improving GAN

Tips for Improving GAN

本节思维导图
在这里插入图片描述

JS divergence衡量分布的问题

问题在于 P G 和 P d a t a P_G和P_{data} PGPdata是不重叠的。因为

  • 图片是高维空间中的低维manifold,就像二维平面上的两条一维曲线,重叠的地方是很少的。

    在这里插入图片描述

  • 就算 P G 和 P d a t a P_G和P_{data} PGPdata有重叠部分,由于我们是对分布采样,所以一般也不会有重叠。在这里插入图片描述

如果两个分布完全没有重合,它们的JS散度就是常数,这样会造成梯度消失,是没有办法做优化的。

Least Square GAN (LSGAN)

在这里插入图片描述

由于蓝色点这边的梯度都是0,很难训练。LSGAN提出用线性分类器替换sigmoid分类器,也就是把分类问题换成回归问题。train的目标是让真实数据越接近1越好,生成数据越接近0越好。

Wasserstein GAN (WGAN)

不用JS散度衡量两个分布的差别,使用Earth Mover’s Distance。

Earth Mover’s Distance

把P和Q的分布看作两堆土。如果想把P的形状变成Q,需要按照Q的形状,移动P堆的某些部分。

在这里插入图片描述

将需要填充的块旁边临近的部分移动过去。我们把每一种方案都计算出来,然后找到最小的那个。

可以把moving plan,也就是移动方案定义为一个 γ \gamma γ矩阵, γ [ i ] [ j ] \gamma[i][j] γ[i][j]代表从第i列移动到第j列的土的多少。而i行元素的和是P土堆第i列土堆的大小,第j列元素的和是目标Q土堆第j列土的大小,对角线元素是P第i列中不移动的土的大小。
B ( γ ) = ∑ x p , x q γ ( x p , x q ) ∣ ∣ x p − x q ∣ ∣ W ( P , Q ) = m i n γ ∈ ∏ B ( γ ) B(\gamma)=\sum_{x_p,x_q}\gamma(x_p,x_q)||x_p-x_q|| \\ W(P,Q)=\underset{\gamma \in \prod}{min}B(\gamma) B(γ)=xp,xqγ(xp,xq)xpxqW(P,Q)=γminB(γ)

为什么用Earth Mover‘s Distance?

可以解决之前当两分布不重叠梯度就为0的问题。

在这里插入图片描述

对于Earth Mover‘s Distance,即使分布不重叠,对于不同差距的分布,是不同的, d 50 比 d 0 d_{50}比d_0 d50d0更好。

WGAN

V ( G , D ) = m a x D ∈ 1 − L i p s c h i t z { E x ∼ P d a t a [ D ( x ) ] − E x ∼ P G [ D ( x ) ] } V(G,D)=\underset{D\in1-Lipschitz}{max}\{E_{x\sim{P_{data}}}[D(x)]-E_{x\sim{P_G}}[D(x)]\} V(G,D)=D1Lipschitzmax{ExPdata[D(x)]ExPG[D(x)]}

D要是一个1-Lipschitz的函数,也就是D要越平滑越好。这个公式就是希望如果x是从 P d a t a P_{data} Pdata中采样出来的,希望他的discriminator值越大越好,如果是从 P G P_G PG中采样出来的,希望他的discriminator值越小越好。

为什么D需要平滑呢?

因为如果不对D加这个约束的话,D就会在真实数据的地方趋向于正无穷大,生成数据的地方趋向于负无穷大。对D加一个限制,D就不会无限上升或者下降,它最终会在某个地方停下来。

Lipschitz Function

∣ ∣ f ( x 1 ) − f ( x 2 ) ∣ ∣ ≤ K ∣ ∣ x 1 − x 2 ∣ ∣ ||f(x_1)-f(x_2)||\leq{K||x_1-x_2||} f(x1)f(x2)Kx1x2

就是输出的变化要小于K倍的输入的变化,当K=1时,我们把满足这个不等式的函数称为1-Lipschitz,也就是
∣ ∣ f ( x 1 ) − f ( x 2 ) ∣ ∣ ≤ ∣ ∣ x 1 − x 2 ∣ ∣ ||f(x_1)-f(x_2)||\leq{||x_1-x_2||} f(x1)f(x2)x1x2
如何满足1-Lipschitz约束条件呢?

原论文中的方法是:weight clipping

就是需要把权重w限制在c和-c中,如果w>c,则w=c;如果w<-c,则w=-c。

当然这个方法弄出来的函数并不能满足1-Lipschitz function约束条件,但是基本能work,能达到值D平滑的目的。

Improved WGAN

对约束换了一个角度,限制梯度的norm要小于等于1。
D ∈ 1 − L i p s c h i t z ⇔ ∣ ∣ ∇ x D ( x ) ∣ ∣ ≤ 1 f o r   a l l   x D\in{1-Lipschitz}\Leftrightarrow{||\nabla_xD(x)||\leq1for \,all\, x} D1LipschitzxD(x)1forallx

V ( G , D ) ≈ m a x D { E x ∼ P d a t a [ D ( x ) ] − E x ∼ P G [ D ( x ) ] − λ ∫ x m a x ( 0 , ∣ ∣ ∇ x D ( x ) ∣ ∣ − 1 ) d x } V(G,D)\approx\underset{D}{max}\{E_{x\sim{P_{data}}}[D(x)]-E_{x\sim{P_G}}[D(x)]-\lambda\int_xmax(0,||\nabla_xD(x)||-1)dx\} V(G,D)Dmax{ExPdata[D(x)]ExPG[D(x)]λxmax(0,xD(x)1)dx}

后面这个积分类似与正则项,当 ∣ ∣ ∇ x D ( x ) ∣ ∣ ≥ 1 ||\nabla_xD(x)||\ge1 xD(x)1就会存在正则项。但是由于我们的x是采样出来的,无法做积分,我们把正则项近似成:
− λ E x ∼ P p e n a l t y [ m a x ( 0 , ∣ ∣ ∇ x D ( x ) ∣ ∣ − 1 ) ] -\lambda E_{x\sim{P_{penalty}}}[max(0,||\nabla_xD(x)||-1)] λExPpenalty[max(0,xD(x)1)]
做一个可视化,从 P d a t a 和 P G P_{data}和P_G PdataPG中分别取一点,在它们的连线上random sample出一点,这个点就相当于从 P p e n a l t y P_{penalty} Ppenalty中sample出来的。

在这里插入图片描述

所以 P p e n a l t y P_{penalty} Ppenalty的分布就是上图中蓝色的部分。

直观来看,只有 P G P_G PG P d a t a P_{data} Pdata之间的区域才会影响到 P G P_G PG的学习。

还有一个trick,对于梯度的约束,实际使用的正则项为 ( ∣ ∣ ∇ x D ( x ) ∣ ∣ − 1 ) 2 (||\nabla_xD(x)||-1)^2 (xD(x)1)2,希望梯度越接近1越好。理由是因为在实验中这样的效果比较好。

Sepctrum Norm

限制discriminator在每一个位置的norm都满足小于1的条件。

GAN to WGAN

GAN的算法

  • 在每次迭代中

    • 从真实数据中抽取数据

    • 从pior distribution中生成noise sample

    • 把noise sample丢到G中,得到生成数据

    • 更新生成器D(反复k次,直到收敛)

      • M a x i m i z e   V ^ = 1 m ∑ i = 1 m l o g D ( x i ) + 1 m ∑ i = 1 m l o g ( 1 − D ( x ~ i ) ) Maximize \,\hat{V}=\frac{1}{m}\sum_{i=1}^{m}logD(x^i)+\frac{1}{m}\sum_{i=1}^{m}log(1-D(\tilde{x}^i)) MaximizeV^=m1i=1mlogD(xi)+m1i=1mlog(1D(x~i))
    • 再从pior distribution中生成新的noise sample,放入G中,得到新的生成数据

    • 更新G

      • M i n i m i z e   V ^ = − 1 m ∑ i = 1 m l o g D ( x i ) + 1 m ∑ i = 1 m l o g ( 1 − D ( G ( z i ) ) ) Minimize \,\hat{V}=-\frac{1}{m}\sum_{i=1}^{m}logD(x^i)+\frac{1}{m}\sum_{i=1}^{m}log(1-D(G(z^i))) MinimizeV^=m1i=1mlogD(xi)+m1i=1mlog(1D(G(zi)))

WGAN的算法

修改训练discrminator的式子
V ~ = 1 m ∑ i = 1 m D ( x i ) − 1 m ∑ i = 1 m D ( x ~ i ) \tilde{V}=\frac{1}{m}\sum_{i=1}^{m}D(x^i)-\frac{1}{m}\sum_{i=1}^{m}D(\tilde{x}^i) V~=m1i=1mD(xi)m1i=1mD(x~i)
训练时还要主义使用Weight Clipping/Gradient Penalty等技巧,否则很难收敛。

而generator的式子修改为:
V ~ = − 1 m ∑ i = 1 m D ( G ( z i ) ) \tilde{V}=-\frac{1}{m}\sum_{i=1}^{m}D(G(z^i)) V~=m1i=1mD(G(zi))

EBGAN

使用autoencoder为discriminator。

好处:

  • autoencoder可以pretrain,不需要negative example来训练,直接给positive example来minimize reconstruction error就可以。
  • discriminator不再依赖generator,一开始就可以训练的很好。

训练时,我们希望的是在真实数据的时候,让reconstruction error越小越好,而不是在生成数据上的reconstruction error越大越好,因为前者很难,而后者很容易做到,output一个noise就可以做到,这和我们想要的结果不一样。

我们在训练中,为reconstruction error设置一个margin下限(超参数,需要手调),只要小于margin就好。

Loss-sensitive GAN

本来我们希望的是真实数据得分越大越好,而生成数据得分越小越好,但有的时候生成的数据已经很像了,也没必要压低它的分数。

在这里插入图片描述

参考:

李宏毅学习笔记35.GAN.06.Tips for Improving GAN

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值