GAN有不少未解决的问题:1、虽然在DCGAN和improveGAN中提出了不少训练GAN的tricks,但是GAN还是很难训练。2、很难控制G网络的多样性。3、D网络和G网络之间的平衡性很难控制,大部分情况下D网络在训练之初能力会更强。
而BEGAN提出了能够使得训练过程快又稳定的方法;解决了D网络和G网络能力平衡问题;有能力控制生成图片的多样性和质量平衡问题以及衡量收敛性的近似方法。
BEGAN
上图是BEGAN在mnist数据上设计的一个模型,借助了EBGAN的encoder-decoder作为D网络结构的思想。一共有三个网络,分别是G网络,以及D网络中的encoder和decoder。其中G网络和decoder的网络结构是一样的,这两个网络旁边灰色部分是可选的优化结构(跳跃连接和加入h0信息)。
看完模型结构例子,我们在看看began的损失函数:
其中 表示重构误差:
是一个超参数。值越低表示生成的样本的多样性越低。 是 的更新步长。
另外论文还提出了衡量模型训练收敛性的公式:
其实到这边BEGAN的内容就差不多了。但由于论文的大部分内容都是在讲损失函数是怎么来的,所以我们接着看看上面的损失函数的由来。
BEGAN损失函数的由来
由上面的介绍我们知道 是一个自编码器的重构误差函数。现在我们假设自编码有两个重构误差的分布函数分别是,并用
表示 的所有可能集合, 为 的期望。这样我可以将Wasserstein 距离定义为:
其中, 分别为从 采样出来的两个损失函数值。
要真正优化上面的公式是不可能的,因为 的样本空间太大了。但是使用Jensen不等式我们可以得到:
是Wasserstein距离的一个更低的界。
在BEGAN里,我们令 为 的分布, 为 的分布。又因为最大化,只有两种情况:
同时我们目标是让G网络生成的图片更接近真实。因此我们选择(b),于是有:
这就是BEGAN的损失函数了。为了控制G网络和D网络之间能力的平衡,以及G网络生成样本多样性和质量之间的平衡,作者还引入一开始介绍的BEGAN损失函数最终形式中的k和 两个参数。
实验结果
看一个就好了,简直惊人。