GAN的Loss的比较研究(5)——能量Loss

上一篇文章讲的是《BEGAN: Boundary Equilibrium Generative Adversarial Networks》将能量函数(Energy)与Wasserstein Distance相结合,再辅之以比例反馈控制,让GAN迅速收敛,并保持了多样性。具体是:

  • 让Auto-Encoder作为Discriminator,将原图与重建图的逐点差异(pixel-wise error)作为能量。
  • 将D输出的能量看成是一个概率分布,用Wasserstein Distance作为衡量概率分布的距离:真图能量概率分布、假图能量概率分布。
  • 对Wasserstein Distance简化处理,真正衡量的是两个能量分布重心的距离

    由Auto-Encoder重建差异构成的能量作为Discriminator的输出其出处是在《ENERGY-BASED GENERATIVE ADVERSARIAL NETWORKS》中,文中提到EBGAN模型,比较EBGAN与BEGAN差异在哪里呢?
    BEGAN与EBGAN的模型(D-G)是相似的,如图:
    这里写图片描述

    BEGAN的Loss:

    L ( x ) = | x D ( x ) | ( 1 ) L D = L ( x ) k t L ( G ( z D ) ) ( 2 ) L G = L ( G ( z G ) ) ( 3 ) k t + 1 = k t + λ k ( γ L ( x ) L ( G ( z G ) ) ) ( 4 )

    而EBGAN的Loss:
    D ( x ) = D e c ( E n c ( x ) ) x ( 5 ) L D ( x , z ) = D ( x ) + [ m D ( G ( x ) ) ] + ( 6 ) L G ( z ) = D ( G ( z ) ) ( 7 )

    其中, [ x ] + 表示max(0,x),即就是x大于0的部分,(6)被称为margin loss(边沿损失),是能量学习的一种Loss定义方式。
    比较BEGAN和EBGAN:(5)与(1)是一样的,(2)和(6)相对应,(3)和(7)相对应。通过比较,可以发现只是(2)、(7)有差异,(2)是 D ( G ( z ) ) 乘以一个幅度控制量 k t ,而(7)则是将 D ( G ( z ) ) 控制在一个范围内。若 k t 为一个常数(如:1),而 0 D ( G ( z ) ) m 时,(6)和(2)在求导时就是一样的。Auto-Encoder之所以有效,是因为Encoder时将真图空间与假图空间的流形在编码时统一在了一个低维空间上(Encoder生成的Code的空间),然后再通过梯度后向调整生成器,使生成器所形成的空间与真实空间接近。以下是EBGAN实验效果:
    生成图的效果如下:
    这里写图片描述 这里写图片描述
    (a)未经训练G生成的图像 (b)BEGAN训练后G的输出
    若对BEGAN的训练步骤做以下调整,过程和效果如下:
    1、先训练好Discriminator
    这里写图片描述 这里写图片描述
    (c)原图 (d)训练好的Discriminator恢复出来的重建图

2、固定Discriminator参数,训练生成器。Discriminator产生Fake Image的能量,最小化该能量,让生成器生成的假图落在真图流形之中。
这里写图片描述 这里写图片描述
(e)固定最优D后,未对G进行训练时,由噪声序列生成的重建图 (f)固定最优D后,对G进行训练后,由噪声序列生成的重建图
从图中可见(d)并未出现数字,但却比(c)离目标近。
3、在前两步的基础上,再次执行完整的EBGAN训练。(G-D)
这里写图片描述
(g)联合调整D-G实现EBGAN的生成
(g)图与数字有些相似了,但仍无法收敛到目标数字。
以下(h)是另一次实验(与上面实验,设置相同,只是重新开始)的G生成图像,生成效果好多了。
这里写图片描述
(h)另一次实验效果
小结:从两次实验上看,能量学习并不一定能够得到我们预期的效果(g图和h图),但可以直观地判断g图较f图的确是与a图更接近了。能量学习还是有效果的,《A tutorial on energy based learning》对能量学习有完整的介绍。
所谓能量模型(Energy model)就是赋予每一个状态一个能量,所谓能量就是一个非负实数。模型学习的目标:对一个正确状态(Correct state)能给出一个低的能量( E c ),对一个错误状态(Incorrect state)给出一个高的状态( E i )。学习的过程,必须完成两方面任务:一方面,拉低正确的状态能量,另一方面,抬高错误的能量,如图所示:
这里写图片描述
上图中 Y i 是正确状态,能量应该低,而 Y ~ i 是错误状态,能量应该高,学习过程就是一个“一拉一抬”的过程。一般可认为,Ground-Truth的状态 ( X , Y ) 是正确状态,与之不同的是错误状态。《A tutorial on energy based learning》给出的Loss方程有如下一些:
这里写图片描述

EBGAN所采用的margin loss是hinge loss的一个调整,它将max()中的 E ( W , Y i , X i ) 拿到了外面,是让Discriminator在
$E(W,\tilde Y^i,X^i) \$
时也能对Auto-Encoder进行调整。

猜你喜欢

转载自blog.csdn.net/StreamRock/article/details/81192408
今日推荐