深度学习之生成式对抗网络GAN

 

一、GAN介绍

生成式对抗网络GAN(Generative Adversarial Networks)是一种深度学习模型,是近年来复杂分布上无监督学习最具前景的方法之一。模型通过框架中(至少)两个模块:生成模型(Generative model)和判别模型(Discriminative model)的相互博弈学习产生相当好的输出。原始GAN理论中并不要求G和D都是神经网络,只需要是能够拟合相应生成和判别的函数即可。但实际应用中一般均使用深度神经网络DNN/MLP作为G和D。一个优秀的GAN应用需要有良好的的训练方法,否则可能由于神经网络模型的自由性而导致输出不理想。

GAN将机器学习中的两大模型紧密结合在了一起,在这个框架中将会有两个模型被同时训练:G用来捕获数据分布,D用来估计样本来自训练数据而不是G的概率,G的训练目的是最大化D产生错误的概率。这个框架相当于一个极小化极大的双方博弈。在任意函数G和D的空间中存在唯一解,此时G恢复训练数据分布,且D处处都等于1/2。在G和D由DNN构成的情况下,可以使用反向传播进行训练,在训练或生成样本时不需要任何马尔可夫链或展开的近似推理网络。

以生成图片为例,G为一个生成图片的网络,接收一个随机的噪声z生成图片G(z);D为一个判别网络,判断一张图片x是不是真实的,D(x)表示x是真实图片的概率,若D(x)等于1表示x是100%真实的图片、等于0表示x不可能是真实的图片。训练过程中G和D构成一个动态博弈过程,博弈的结果就是G可以生成足以“以假乱真”的图片G(z),而D难以判断G生成的图片是不是真实的,即D(G(z))=0.5。这样就得到了一个生成模型G,可以用来生成图片。Goodfellow从理论上证明了该算法的收敛性,且在模型收敛时,生成数据和真实数据具有相同的分布。

GAN的应用有:图像生成(超分辨率),语义分割,文字生成,数据增强,信息检索/排序,聊天机器人等。

 

二、对抗网络

       

为了学习生成器G对数据x的分布 p_{g},先从一个简单的分布中采样一个噪声信号z(均匀分布or正态分布),先验概率为 p_{z}(z)。DNN/MLP的参数为 \theta _{g},z经过G(z;\theta _{g})映射得到 x_{g}D(x;\theta _{d}) 的输出是一个标量,表示x是真实数据而不是 p_{g} 生成的概率,G和D都是可微函数,可以用BP算法训练。内循环训练k次D最大化正确分配标签概率,同时训练1次G最小化log(1-D(G(z))):G和D的训练是关于V(G,D)的极小化极大的二者博弈问题 two-player minimax game。

Minimax game是一种递归寻找失败的最大可能性中的最小值的算法,即最小化对方的最大得益。该算法是一个零和算法,一方要在可选的选项中选择将其优势最大化的选择,而另一方则选择令对方优势最小化的选项,输赢的总和为零。

\underset{G}{\min}\, \underset{D}{\max}\, V(G,D)=E_{x\sim p_{data}(x)}[\log D(x)]+E_{z\sim p_{z}(z)}[\log (1-D(G(z)))]

这个方程在训练初期可能无法为G提供足够的梯度进行学习,在训练初期当G生成的效果很差、与训练数据明显不同时,D会以高的置信度拒接生成样本,log(1-D(G(z)))趋近于零梯度饱和;因此选择最大化logD(G(z))而不是最小化log(1-D(G(z)))来训练G。

在训练GAN时,同时更新判别分布(D,蓝色的虚线)使其能够区分数据生成分布 p_{x}(黑色的点线)中的样本和生成分布  p_{g}(G,绿色实线)中的样本。下面的水平线为均匀采样z的区域,上面的水平线为x的部分区域,朝上的箭头为映射x=G(z)将非均匀分布 p_{g} 作用在转换后的样本上。G在 p_{g} 高密度区域收缩,在 p_{g} 低密度区域扩散。

(a) 考虑一个接近收敛的对抗模型对:p_{g}p_{data} 相似,D是个部分准确的分类器;

(b) 算法的内循环中,保持G不变优化D,直到分类的准确率最高:D^{*}(x)=\frac{p_{data}(x)}{p_{data}(x)+p_{g}(x)}

(c) 在G更新1次后,D的梯度引导G(z)流向更可能分类为数据的区域;

(d) 训练若干步后,如果G和D接近某个稳定点且无法继续提高性能,则 p_{g}=p_{data},D(x)=1/2。

 

三、公式推导

生成器G隐式定义了概率分布 p_{g} 作为 z\sim p_{z} 时G(z)的样本,如果有足够的训练容量及训练时间,下面的算法可以收敛到 p_{data} 的近似估计。

1、p_{g}=p_{data} 全局最优解

训练包括顺序完成的两个阶段:固定G训练D,再固定D训练G,固定的意思是不进行训练,神经网络只是向前传播,不进行反向传播。

Proposition 1. G固定时,最优的D为:D_{G}^{*}(x)=\frac{p_{data}(x)}{p_{data}(x)+p_{g}(x)}

Proof:对于任意G,D的训练目的是使V(G,D)的值最大

        V(G,D)=\int_{x}p_{data}(x)\log D(x)dx+\int_{z}p_{z}(z)\log (1-D(g(z)))dz

                        = \int_{x}p_{data}(x)\log D(x)+p_{g}(x)\log (1-D(x))dx

对于任意 (a,b)\in R^{2} \ {0,0},函数 y=a\log y+b\log (1-y) 在[0,1]之间取最大值\frac{a}{a+b}。注意到D的训练目标可以被解释为最大化估计条件概率P(Y=y|x)的对数似然,Y表示x为真实分布 p_{data}(y=1)或者生成分布 p_{g}(y=0),因此:

       C(G)=\underset{D}{\mathrm{max}} V(G,D)\\\\=E_{x\sim p_{data}}[\log D_{G}^{*}(x)]+E_{z\sim p_{z}}[\log (1-D_{G}^{*}(G(z)))]\\\\=E_{x\sim p_{data}}[\log D_{G}^{*}(x)]+E_{x\sim p_{g}}[\log (1-D_{G}^{*}(x))]\\\\=E_{x\sim p_{data}}[\log \frac{p_{data}(x)}{p_{data}(x)+p_{g}(x)}]+E_{x\sim p_{g}}[\log \frac{p_{g}(x)}{p_{data}(x)+p_{g}(x)}]

Theorem 1. 训练目标C(G)的全局最优解仅在 p_{g}=p_{data} 时获得,此时 C(G)=-\log 4

Proof:对于 p_{g}=p_{data}D_{G}^{*}(x)=1/2,因此 C(G)=\log 1/2+\log 1/2=-\log 4

       E_{x\sim p_{data}}[-\log 2]+E_{x\sim p_{g}}[-\log 2]=-\log 4

       C(G)=-\log 4+KL\left ( p_{data}|| \frac{p_{data}+p_{g}}{2} \right )+KL\left ( p_{g}|| \frac{p_{data}+p_{g}}{2} \right )

后两项是Jensen-Shannon散度,衡量两个概率分布的相似度,取值在0到1之间。JS散度是KL散度的变体,解决了KL散度不对称的问题。当两个分布距离较远、完全没有重叠时,KL散度没有意义,而JS散度是一个常数,这在学习算法中是比较致命的问题,意味着梯度为零无法训练。

由于两个分布的JS散度的值非负,且二者相同的时候为0,因此 C^{*}=-\log 4是C(G)的全局最小值,唯一解为 p_{g}=p_{data},这表明生成模型完美的复制了数据产生的过程。

 

2、算法收敛性证明

Propostion 2. 如果G和D有足够的性能,对于算法1的每一步,给定G时D能够达到最优解,并且通过更新 p_{g} 来提高这个判别准则。

       E_{x\sim p_{data}}[\log D_{G}^{*}(x)]+E_{x\sim p_{g}}[\log (1-D_{G}^{*}(x))]

因此 p_{g} 收敛为 p_{data}

Proof:考虑 V(G,D)=U(p_{g},D) 为关于 p_{g} 的凸函数,上确界的次导数包含达到最大值处的该函数的导数。如果f(x)=sup_{\alpha \in A}f_{\alpha }(x) 且对每一个ɑ,f_{\alpha }(x) 是关于x的凸函数,那么如果\beta =\arg sup_{\alpha \in A}f_{\alpha }(x),则 \partial f_{\beta }(x)\in \partial f。这等价于给定对应的G和最优的D,计算 p_{g} 的梯度更新。如Thm1已经证明的,\mathrm{sup}_{D}U(p_{g},D) 是关于 p_{g} 的凸函数且有唯一的全局最优解,因此当 p_{g} 的更新足够小时,p_{g} 收敛到 p_{x}

实际上对抗网络通过 G(z;\theta _{g}) 表示 p_{g} 分布的有限簇,并且我们优化 \theta _{g} 而不是 p_{g} 本身,使用MLP定义G在参数空间引入的多个临界点。尽管缺乏理论证明,但在实际中MLP的优良性能表明了这是一个合理的模型。

 

四、GAN总结

1、优点

(1)生成模型G不需要直接用样本更新,避免了损失函数设计的困难;

(2)GAN是一个非常灵活的框架,各种类型的损失函数都可以整合到GAN模型中,可以产生更加清晰、真实的样本,广泛用于无监督学习和半监督学习领域;

(3)相比于变分自编码器,GAN没有引入任何决定性偏置(deterministic bias),由于变分方法引入了决定性偏置,是优化对数似然的下界,而不是似然本身,导致VAE生成的实例比GAN模糊。GAN没有变分下界,如果训练良好,GAN是渐进一致的。

(4)GAN相比其他的生成模型(受限玻尔兹曼机RBM、DBM、生成随机网络GSN等)只用到了反向传播,不需要复杂的Markov链;GAN的表达能力更强,而基于Markov链的模型需要分布比较模糊才能在不同的模式间进行混合。

 

2、缺点

(1)p_{g}(x) 是隐式表示,没有直接关于G的表达,而是通过一些参数进行控制;

(2)训练GAN需要达到纳什均衡,有时梯度下降法无法做到,相比VAE、PixelRNN不太稳定;

(3)GAN不适合处理离散形式的数据,如文本;

(4)GAN存在训练不稳定、梯度消失、模式崩溃等问题。

 

纳什均衡(Nash equilibrium)

在一个博弈过程中,无论对方的策略选择如何,当事人一方都会选择某个确定的策略,则该策略被称作支配性策略。如果两个博弈的当事人的策略组合分别构成各自的支配性策略,那么这个组合就被定义为纳什均衡。

一个策略组合被称为纳什均衡,当每个博弈者的均衡策略都是为了达到自己期望收益的最大值,与此同时,其他所有博弈者也遵循这样的策略。

 

模式崩溃(model collapse)

一般出现在GAN训练不稳定时,具体表现为生成结果很差,即使经过长时间训练也无法得到很好的改善。

原因在于GAN采用的是对抗训练的方式,G的梯度更新来自于D,所以当G生成的样本不是很真实,但D给出了正确的评价,这时G就会继续按照这样进行输出,这样G和D就会自我欺骗下去,导致最终生成结果特征不全。

 

3、训练GAN的一些技巧

(1)输入规范到(-1,1)之间,最后一层的激活函数使用tanh(BEGAN除外);

(2)使用wassertein GAN的损失函数;

(3)如果有标签数据,尽量使用标签,还可以使用标签平滑(单边标签平滑、双边标签平滑);

(4)使用BN、instance norm或weight norm;

(5)避免使用ReLU和pooling,减少梯度稀疏的可能性,可以使用Leaky ReLU;

(6)优化器尽量使用Adam,学习率初始值可以选择1e-4,随着训练进行不断减小学习率;

(7)给D的网络增加高斯噪声,相当于一种正则措施。


 

五、GAN的变体

在论文的future work部分,作者提出了5个可能扩展的方向:

1、DCGAN(Deep Convolutional GANs)

DCGAN提升了GAN训练的稳定性以及生成结果的质量,为GAN的训练提供了一个很好的网络拓扑结构,表明生成的特征具有向量的计算特性。

DCGAN使用fractional-strided步长卷积代替上采样层,从小的维度产生大的维度(上卷积),使用全卷积代替全连接层,不使用pooling层。D几乎和G是对称的,且几乎每一层都使用BN加速训练提升稳定性,D使用LeakkyReLU防止梯度稀疏,G使用ReLU、输出层使用tanh。使用Adam优化器训练,初始学习率为0.0002。

 

2、WGAN

自从2014年Ian Goodfellow提出以来,GAN就存在着训练困难、生成器和判别器的loss无法指示训练进程、生成样本缺乏多样性等问题。从那时起,很多论文都在尝试解决,但是效果不尽人意,比如最有名的一个改进DCGAN依靠的是对判别器和生成器的架构进行实验枚举,最终找到一组比较好的网络架构设置,但是实际上没有彻底解决问题。

        L_{D}^{WGAN}=E[D(x)]-E[D(G(z))]

        L_{G}^{WGAN}=E[D(G(z))]

        W_{D}\leftarrow clipByValue(W_{D},-0.01,0.01)

Wassertein 距离

用于衡量两个分布P、Q之间的距离:W(P,Q)=\underset{\gamma \sim \prod (P,Q)}{\inf} E_{(x,y)\sim \gamma }[||x-y||]

\prod (P,Q) 是P和Q分布组合起来的所有可能的联合分布的集合,对于每一个可能的联合分布γ,可以从中采样\gamma \sim \prod (P,Q) 得到一个样本x和y,并计算出这对样本的距离||x-y||、以及样本对距离的期望。在所有可能的联合分布中能够对这个期望值得到的下界就是Wasserstein距离。直观上可以把E理解为在γ这个路径规划下将土堆P挪到Q所需要的消耗,所以Wasserstein距离又称Earth-Mover距离(EM距离)。

Wasserstein距离比JS散度的优势在于,即使两个分布重叠的部分很少,仍然能够反映两个分布的远近。根据Kantorovich-Rubinstein对偶原理,可以得到Wasserstein距离的等价形式:

        W(P,Q)=\underset{||f||_{L}\leqslant 1}{\sup} E_{x\sim P}[f(x)]-E_{x\sim Q}[f(x)]

Lipschitz连续

是一个比通常连续更强的光滑性条件,Lipschitz连续函数限制了函数改变的速度,符合Lipschitz条件的函数的斜率,必小于一个Lipschitz常数的实数(该常数依函数而定):

对于在实数集的子集的函数f:D\subseteq R\rightarrow R,若存在常数K,使得|f(a)-f(b)|\leqslant |a-b|\; \; \forall a,b\in D,则称f符合Lipschitz条件,对于f最小的常数K称为f的Lipschitz常数。若K<1,f为收缩映射。

 

GAN的目标函数是最小化真实样本分布和生成样本分布之间的JS散度,但如果两个分布的样本空间往往不完全重合,是无法定义JS散度的。解决方案是使用Wasserstein距离代替JS散度,得到WGAN算法,相比GAN参数更加不敏感,训练过程更加平滑。WGAN对GAN的改进之处在于:

(1)D最后一层去掉sigmoid;

(2)G好D的loss不取log;

(3)对更新后的权重强制截断到不超过一个固定常数c,如[-0.01,0.01]内,以满足论文中提到的lipschitz连续性条件;

(4)优化器使用RMSProp、SGD等,不要使用基于动量的算法如Momentum、Adam等。

使用Wasserstein距离需要满足Lipschitz连续性条件,因此要将权重限制到一定范围内,这就造成了隐患,虽然理论证明很漂亮,但实际训练时生成结果并没有期待的那么好。

 

3、WGAN-GP

是WGAN的改进,改变了连续性的限制条件,因为将权重剪切到一定范围后,如[-0.01,0.01],大多数权重都集中到-0.01和0.01上,这就意味着网络大部分权重只有两个可能的数,不能充分发挥深度神经网络的拟合能力,而且强制剪切权重容易导致梯度消失或梯度爆炸。比WGAN收敛速度更快,并能生成更高质量的样本。训练方式稳定,几乎不需要调参,成功训练多种针对图片生成和语言模型的GAN架构。

为了解决这个问题、且满足lipschitz连续性条件,WGAN-GP使用梯度惩罚(gradient penalty)的方式,先求出D的梯度d(D(x)),然后建立它与梯度限制K之间的二范数的损失函数。

作者提出没有必要对整个数据集(真实的和生成的)做采样,只需要从每一个批次的样本中采样即可,比如可以产生一个随机数,在生成数据和真实数据上做一个插值 X'=X*\theta +(1-\theta )*X_{fake}

        L_{D}^{WGAN_GP}=L_{D}^{WGAN}+\lambda E[(|\triangledown D(\alpha x-(1-\alpha G(z)))|-1)^{2}]

        L_{G}^{WGAN-GP}=L_{G}^{WGAN}

 

4、LSGAN

使用最小二乘损失函数代替GAN的损失函数,缓解了GAN训练不稳定和生成图像质量差、多样性不足的问题。

使用JS散度并不能拉近真实分布和生成分布之间的距离,而使用最小二乘法可以将图像的分布尽可能的接近决策边界。

       L_{D}^{LSGAN}=E[(D(x)-b)^{2}]+E[(D(G(z))-a)^{2}]

       L_{G}^{LSGAN}=E[(D(G(z))-c)^{2}]

 

5、BEGAN

BEGAN的D使用auto-encoder的结构,输入是图片,输出是经过编码解码后的图片。BEGAN不直接估计生成分布与真实分布的差距,而是设计合理的损失函数拉近它们之间的距离,只要分布的误差分布相近则认为这些分布是相近的。即如果A和B相似,B和C相似,则认为A和C相似。

       L_{D}^{BEGEN}=D_{AE}(x)-k_{t}D_{AE}(G(z))

       L_{G}^{BEGEN}=D_{AE}(G(z))

       k_{t+1}=k_{t}+\lambda (\gamma D_{AE}(x)-D_{AE}(G(z)))

 

参考资料

https://arxiv.org/pdf/1406.2661.pdf

https://arxiv.org/pdf/1511.06434.pdf

https://arxiv.org/pdf/1701.07875.pdf

https://ask.julyedu.com/question/7668

https://blog.csdn.net/qq_25737169/article/details/78857788

https://baijiahao.baidu.com/s?id=1608234436964134667&wfr=spider&for=pc

https://mp.weixin.qq.com/s?__biz=MzUyMjE2MTE0Mw==&mid=2247484964&idx=1&sn=a859222f408a991dbade1909917595ae&chksm=f9d158bccea6d1aa5a7afb17d39c704d719a7b47613250bff50928343fe49a63a72c27e7bab0&scene=21#wechat_redirect

https://www.leiphone.com/news/201702/EU12GVIe2pNGtgEk.html?viewType=weixin

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值