理解生成对抗网络的关键在于理解GAN的损失函数
JS散度
GAN实际是通过对先验分布施加一个运算G, 来拟合一个新的分布
如果从传统的判别式网络的思路出发,只要选定合适的loss,就可以使生成分布和真实分布之间的距离尽可能逼近
KL散度经常用来衡量分布之间距离
但KL散度是不对称的。不对称意味着,对于同一个距离,观察方式不同,获取的loss也不同,那么整体loss下降的方向就会趋向于某个特定方向。这在GAN中非常容易造成模式崩塌,即生成数据的多样性不足
JS散度在KL散度的基础上进行了修正,保证了距离的对称性:
实际上,无论KL散度还是JS散度,在直接用作loss时,都是难以训练的:由于分布只能通过取样计算,这个loss在每次迭代时都几乎为零
GAN loss的推导
GAN的训练方法,能够巧妙的解决这个问题:
先训练D,再训练G,二者相互对抗,直到收敛
在原始的GAN中,提出的loss是:
当G固定且运算可逆时(实际上这一点一般不成立,但不影响了解GAN的思想):
</