EB-GAN系(Energy-based GAN)

学习总结于国立台湾大学 :李宏毅老师

EB-GAN: Energy-based Generative Adversarial Network

MA-GAN:MAGAN: Margin Adaptation for Generative Adversarial Networks

LS-GAN: Loss-Sensitive Generative Adversarial Networks on Lipschitz Densities

BE-GAN:   BEGAN: Boundary Equilibrium Generative Adversarial Networks

首先回顾GAN的工作:

Discriminator引导Generator使其分布趋于原始数据的分布。

 

1. Evaluation Function

我们想找到一个评估函数F(x), 输入为x, 输出为一个实数F(x),表示这个输入“有多好”:

例如如果是一合理的图片那么F(x)值较大,反之较小。那么我们就可以根据F(x)来产生图片。那怎么找这个F(x)呢?

例如下图将高维的图片空间视为一维的点,那么真实的数据对应的函数值就很大:

   

但这样有个问题:real data可以是你数据库中所有的图片,然而不是real data的图片你无法穷举啊。所以引入:

Structured Perceptron:

 F为两者的内积

以下为迭代算法:

 

对于每个样本对,算法要找一个可以使F值最大的y,如果这个y和原来样本中的y不同则更新w。目的就是为了:

 

在这个过程中找令F最大的y值这一过程是困难的。那回头看看GAN是怎么做的?

generator是一种寻找negative examples的很好的方式:

    

 

                   

 

 

 EBGAN

 特点:

  • 将Discriminator视作一个energy function(negative evaluation function),即这个函数值越小代表data越真实。
  • 利用自编码器AE作为discriminator(energy function)。
  • 可以从ImageNet数据集中生成256*256的图片。

 EBGAN的generator与其他gan网络都一样,不同的是其discriminator是一个AE。那我们知道discriminator都是要输出一个scalar,而AE的输入输出都是一张图片啊,那么EBGAN就是将discriminator的输入输出求一个rescontruction error,那这个error就是discriminator的输出,也即所说的energy。

我们希望对于真实data的重建误差小,即energy小,即discriminator的输出小,而同时希望由generaor生成的图片的energy小。这与之前的gan的判别器希望真图输出大,假图大正好相反。

那么EB-GAN的损失函数如下:

Discriminator:  

Generator:        

那么D的损失函数中要最小化 -D(G(z)),就是最大化D(G(z)), 也就是要抬高下图中的蓝色点对应的曲线,但是如果没有margin的约束,可以无限制的抬高,所以我们需要一个m,即margin,就是当抬高到m这个距离后就没有惩罚了,所以此时loss就将不再忙着抬高,而是去将real对应的曲线也即D(x)拉小。generator做的事情就很好理解了,因为real对应的energy是小的,所以希望生成的图片的energy也是小的。

 

More about EBGAN

Pulling-away 用于训练生成器,希望它可以生成多样性的output。 具体来说对于一个batch中的样本 xi 和 xj ,我们将其带入discriminator的编码器得到编码后的结果 ei 和 e,然后比较其余弦相似度,希望这个相似性越小越好。

       

这个auto-encoder不仅仅要最小化真实图片的reconstruction error,而且要给假图以较大的如reconsturction error。

 

Margin Adaptation GAN

      

上图红、绿线分别表示EBGAN中m取值为70和30的情况。横轴为迭代次数,纵轴为energy取对数。左图为真图energy,右图为假图energy。右图中上下两条黑线分别为m=log70和m=log30结果。Discriminator希望假图的energy高,而从右图看出EBGAN确实做到了这件事,使得假图的energy在黑线的上下游走。然后观察左图在前面几个epoch中energy并没有下降太多,MAGAN中的做法是m为一个浮动的值,即margin设置越来越小,即随着训练使generate的图片可以有较小的energy,从上图中可看到不论是真图还是假图,其energy都是在不断下降的。

 

Loss-sensitive GAN 

 LSGAN使得generator关注于提升远离真实图片的data。 假设D(x)为energy function。Discriminator要最小化下面的式子:

希望给真实的data有较小的energy(D(x)),而fake的data是最小化上式第二项,怎么理解呢?

 

我们希望真图的energy很小,而对于假图来说希望它们的energy大过一个margin就好,如果真图与假图的差异比较大(可以用hidden layer来量相似度),就将假图的energy顶的高一些。如果假图与真图很接近了,就不需要将其energy顶的很高。

 

 BE GAN

 Discriminator也是AE结构。

 

最开始Kt 为0,machine只想把真图的energy下降,那什么时候想把假图的energy拉高呢?即当的时候,γ是一个超参数。就是说当假图的energy / 真图的energy 小于γ时,Discriminator才想要将假图的energy变大。所以不会一直考虑假图的reconstruction error,而是当假图的reconstruction error太小的时候,discriminator才考虑将假图的reconstruction error变大。γ调整如下:

 

posted @ 2018-03-13 11:26  三年一梦  阅读(2645)  评论(0编辑  收藏  举报