GAN1-对抗神经网络梳理(GAN,WGAN,WGAN-GP)
Posted tensor_zhang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GAN1-对抗神经网络梳理(GAN,WGAN,WGAN-GP)相关的知识,希望对你有一定的参考价值。
1,对基本概念梳理
https://www.cnblogs.com/kai-nutshell/p/12968454.html
https://www.cnblogs.com/kai-nutshell/p/12968484.html
https://www.cnblogs.com/kai-nutshell/p/12968508.html
https://www.cnblogs.com/kai-nutshell/p/12968548.html
https://zhuanlan.zhihu.com/p/26007545
2,WGAN
2.0,从GAN到WGAN,最核心的有这么几点:
-
最优判别器为:
\\[D(x)=\\frac{P_{r}(x)}{P_r(x)+P_g(x)} \\tag{1} \\]这个结果从直观上很容易理解,就是看一个样本\\(x\\)来自真实分布和生成分布的可能性的相对比例。如果\\(P_{r}(x)=0\\)且\\(P_{g}(x)\\neq{0}\\),最优判别器就应该非常自信地给出概率0;如果\\(P_{r}(x)=P_{g}(x)\\),说明该样本是真是假的可能性刚好一半一半,此时最优判别器也应该给出概率0.5。
-
判别器最优时,GAN的损失函数由:
\\[E_{x\\sim{P_{r}}}[logD(x)]+E_{x\\sim{P_{g}}}[log(1-D(G(z)))] \\tag{2} \\]变为
\\[E_{x\\sim{P_{r}}}[log\\frac{P_{r}(x)}{\\frac{1}{2}[P_{r}(x)+P_{g}(x)]}]+E_{x\\sim{P_{g}}}[log\\frac{P_{g}(x)}{\\frac{1}{2}[P_{r}(x)+P_{g}(x)]}]-2log2 \\tag{3} \\]已知KL散度以及JS散度:
2.1,GAN的损失函数如下:
判别器模型前向传播过程中最后需要加上sigmoid函数,结合nn.BCELoss()得到损失函数。
2.2,相较于GAN,WGAN做了以下改进
-
判别器最后一层去掉sigmoid
-
生成器和判别器中的loss不取对数,损失函数如下
\\[\\min_{G}\\max_{D}V\\{D,G\\}=E_{x\\sim{P_{data(x)}}}[D(x)]-E_{x\\sim{P_{z(z)}}}[D(G(z))] \\]作者为此还铺垫了一个距离概念:Earth-Mover (EM) distance / Wasserstein-1
\\[W(P_{r},P_{g})=\\inf_{\\gamma{\\sim{\\prod(P_{r},P_{g})}}}E_{(x,y)\\sim{\\gamma}}[||x-y||] \\]\\[\\min_{G}\\max_{D}W(P_{r},P_{g})=\\frac{1}{K}\\sup_{||f||_{L}\\leq{K}}E_{x\\sim{P_{r}}}[f(x)]-E_{x\\sim{P_{g}}}[f(x)] \\] -
每次更新判别器的参数,将其绝对值截断到不超过一个固定常数c(因为去除sigmoid后依照上面的损失函数进行更新,有可能造成生成器以及判别器的输出为无穷大,只要差值有限即可)
for p in disc_net.parameters(): p.data.clamp_(opt.clamp_lower, opt.clamp_upper)
-
不用基于动量的优化方法(momentum Adam)
2.3,WGAN-GP
以上是关于GAN1-对抗神经网络梳理(GAN,WGAN,WGAN-GP)的主要内容,如果未能解决你的问题,请参考以下文章
深度学习生成对抗网络GAN|GANWGANWGAN-UPCGANCycleGANDCGAN