简介
Generative Adersarial Networks ,简称GANs,是一个训练生成模型的新框架。GANs的变种有很多,如WGAN、infoGAN、f-GANs、BiGAN、DCGAN、IRGAN等。(把GANs看作是一幅太极图,“太极生两仪”,两仪就类似生成器和判别器。生成器负责生,判别器负责灭。一生一灭即万物。)
GANs的基本思想和训练过程
基本思想
GANs采用对抗策略进行模型训练。一方面生成器通过调节自身参数,使生成的样本尽量难以被判别器识别出是真实样本还是模拟样本;一方面又让判别器调节自身参数,使其尽可能准确判别出输入样本的来源。具体训练时,采用生成器和判别器交替优化的方式。
训练过程
(1)训练判别器时,先固定生成器。利用生成器随机模型产生样本作为负样本,从真实数据集中采集正样本,将这些样本输入判别器,根据判别器输出和样本标签来计算误差,利用误差反向传播算法来更新判别器参数。
(2)训练生成器时,先固定判别器。利用当前生成器随机模拟产生样本,并输入到判别器,根据判别器输出和样本标签来计算误差,利用误差反向传播算法来更新生成器参数。
GANs如何避免大量概率推断计算?
传统过程
传统概率生成器模型要定义一个概率分布表达式P(X),通常是一个多变量联合概率分布的密度函数p(x1,x2,x3,,,xn),并基于此做最大似然估计。(此过程中涉及了边缘概率,条件概率等,随机变量很多时,模型会很复杂,改变推断很困难)
GANs过程
如果随机变量Z和X之间满足某种映射关系X=f(Z),则其概率分布Px(X)和Pz(Z)间也存在某种映射关系,所以:
当X,Z属于一维随机变量时,;
当X,Z属于高维随机变量时,导数变成雅克矩阵,即.
因此,已知Z的分布,对随机变量间的转换函数f直接建模,就唯一确定了X的分布。这样就不用大量复杂的概率计算了。若用神经网络来进行训练,可以给f更大的发挥空间。
常用的优化网络结构操作有:Relu激活函数,批量归一化,Dropout,卷积神经网络和循环神经网络等操作。都可加到生成器的网络中,增强表达能力。
GANs在实际训练中会遇到什么问题?
问题
在实际训练中,早期阶段生成器G很差,生成的模拟样本很容易被判别器D识别,使得D回传给G的梯度极其小,达不到训练目的。即优化饱和现象。
原因
假设将D的sigmoid输出层的前一次层记为o,那么,D(x)=sigmoid(o(x)),此时有
因此,训练G的梯度为
当D很容易认出模拟样本时,意味认错模拟样本的概率几乎为0,即,若,C为常量,则可推出:
即G获得的梯度基本为0,说明D强大后对G没用什么帮助。
解决方案
对于上诉问题的分析,我们可以将变成,即让后者最大,而在最优时解相同。但是更改后,目标函数梯度发生了变化,如下:
这样之后,即使趋近于0,也不会小声,仍能给生成器提供有效的梯度。
相关资料
生成对抗网络原文链接:https://arxiv.org/abs/1406.2661
目前与生成对抗网络(GAN)相关的论文和对应的代码链接:
https://github.com/zhangqianhui/AdversarialNetsPapers
不错相关博文:
https://blog.csdn.net/c2a2o2/article/details/54408072
https://www.cnblogs.com/zijunlearningclanguage/p/9644034.html