GAN学习笔记

GAN生成模型学习笔记

GAN算是现阶段生成模型里最好的model。通过判别器和生成器的反复对抗,能够不断更新判别器和生成器。本文从整体结构出发,系统的讲述GAN的流程和算法,并介绍当前较火的DCGAN,将卷积网络引入到生成式模型当中来做无监督的训练,利用卷积网络强大的特征提取能力来提高生成网络的学习效果。

GAN整体结构

由上图可以看出,GAN首先把噪声数据 z(也就是我们说的假数据)通过生成模型 G,伪装成了真实数据 x。之后将x输入到判别器中,由判别器判别是真实图片或虚假图片。我们最终想得到的结果是判别器的输出无限接近1/2.换句话说,判别器无法分辨出真伪数据的差别。这时候,我们就可以说我们训练出了一个造假能力一流的生成模型。

GAN算法流程

初始化判别器D的参数 Θ d \Theta_{d} Θd和生成器G的参数 Θ g \Theta_{g} Θg。输入m个真实样本和m个噪声样本,并通过生成器得到m个生成样本。固定生成器G,训练判别器D尽可能好地准确判别真实样本和生成样本,尽可能大的区分正确样本和生成的样本。
训练的过程也非常直观,你可以选择任何随机梯度下降的方法并且你要同时训练两组数据:一组真实的训练数据和一组由噪声 生成的数据。当然,你也可以一组训练每跑一次时,另一组则跑 K 次,这样可以防止其中一个跟不上节奏。

同样,我们就需要一个目标函数(objective function)来判断和监视学习的成果。在这里,J(D) 代表判别网络(也就是警察 B)的目标函数——一个交叉熵(cross entropy)函数。其中左边部分表示 D 判断出 x 是真 x 的情况,右边部分则表示 D 判别出的由生成网络 G(也就是骗子)把噪音数据 z 给伪造出来的情况。

这样,同理,J(G) 就是代表生成网络的目标函数,它的目的是跟 D 反着干,所以前面加了个负号。

这其实就是我们熟悉的最小最大博弈(minimax game):两个人的零和博弈,一个想最大,另一个想最小。那么,我们要找的均衡点(也就是纳什均衡)就是 J(D) 的鞍点(saddle point)。

对这个过程的更直观解释是这样的:

如图所示,我们手上有真实数据(黑色点,data)和模型生成的伪数据(绿色线,model distribution,是由我们的 z 映射过去的)(画成波峰的形式是因为它们都代表着各自的分布,其中纵轴是分布,横轴是我们的 x)。而我们要学习的 D 就是那条蓝色的点线,这条线的目的是把融在一起的 data 和 model 分布给区分开。写成公式就是 data 和 model 分布相加做分母,分子则是真实的 data 分布。

我们最终要达到的效果是:D 无限接近于常数 1/2。换句话说就是要 Pmodel 和 Pdata 无限相似。这个时候,我们的 D 分布再也没法分辨出真伪数据的区别了。这时候,我们就可以说我们训练出了一个炉火纯青的造假者(生成模型)。

于是,最终我们得到的应该是如下图的结果:
蓝色断点线是一条常数线(1/2),黑色与绿色完美重合了。

但是,这也是有问题的:当判断器D完美了之后,因为G是和D绑定的,所以D也无法继续被优化了。为了解决这个问题,除了把两者对抗做成最小最大博弈,还可以把它写成非饱和(Non-Saturating)博弈:

也就是说用 G 自己的伪装成功率来表示自己的目标函数(不再是直接拿 J(D) 的负数)。这样的话,我们的均衡就不再是由损失(loss)决定的了。J(D) 跟 J(G) 没有简单粗暴的相互绑定,就算在 D 完美了以后,G 还可以继续被优化。

GAN算法总结

论文中的GAN算法流程,通过上面的介绍,这里应该非常好理解了。

GAN

DCGAN的原理和GAN是一样的,这里就不在赘述。它只是把上述的G和D换成了两个卷积神经网络(CNN)。但不是直接换就可以了,DCGAN对卷积神经网络的结构做了一些改变,以提高样本的质量和收敛的速度,这些改变有:

  • 取消所有pooling层。G网络中使用转置卷积(transposed convolutional layer)进行上采样,D网络中用加入stride的卷积代替pooling。
  • 在D和G中均使用batch normalization
  • 去掉FC层,使网络变为全卷积网络
  • G网络中使用ReLU作为激活函数,最后一层使用tanh
  • D网络中使用LeakyReLU作为激活函数

总结

GAN的概念和方法还是比较好理解的。我觉得重要的是GAN的扩展以及实践,这个还需要我后续多学习。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值