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 和 ej ,然后比较其余弦相似度,希望这个相似性越小越好。
这个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变大。γ调整如下: