1. Basic Thoery of GAN

GAN要做的事情就是找出这个像人脸的data distribution

调整变量θ使PG(xi;θ)这个distribution产生特定data的几率(total likelyhood)越大越好, 而这些data是来自于样本distribution Pdata(x)

KL散度的概念需要补一下, 直观讲, Maximum Likelyhood等同于最小化Pdata和PG之间的KL散度

一个Network怎么被看做是一个probability distribution??
G网络就是在从一个Prior distribution(可能是Gaussian/Normal/...)转化成另一个distribution PG, 而引入D网络就是优化这个PG使其和Pdata的divergence越小越好, 人话就是越像越好, 所以, 问题就变成了, 怎么计算这个divergence, 因为PG和Pdata是没有formula的, 这就是GAN的神奇之处

从PG做sample的意思就是从Prior distribution中产生input数据, 经过G网络生成PG的sample


这个时候D网络出场了, GAN的神奇之处就在这儿, 是用Discriminator来量两个没有formula的distribution之间的JS divergence, 这个JS divergence是用我们训练的Objective Function来体现的




数学证明, max objective value和JS divergence的关系, 当我们在train一个discriminator的时候, 我们想要做的事情就是量PG和Pdata之间的JS divergence, 如果objective function和原始的GAN不一样, 比如WGAN, 那我们就是在量别的divergence


我们要找一个G来使生成的图像越接近target越好, 就是在解这个散度优化的问题, 过程就是第二张图展示的, 就是先固定G, 找一个可以使objective value最大的D, 直观讲就是最挑剔的D, 然后到外层来换G, 来让刚才找到的这个D产生的objective value最小化
第二张图要visualization的事情就是在只有三个G的情况下, 假设我们的D已经找到了, 把D简化到一维信号就是下面那三条蓝线, 那最优的G解就是G3, 就是最挑剔的D产生的object value(红点最大值)最小的情况, 然后GAN的问题就变成了如何解这个max-min的problem

iteration training的意义也就是说, 用来量度divergence的D并不是固定的, 根据G的不同要通过optimize objective function来求这个D, 那求到的D根据之前那个复杂的数学证明, max{D}V(G,D)就是用来量度PG和Pdata之间divergence的D, 然后再更新G, 让这个divergence尽量小, 也就是PG和Pdata之间divergence的差距尽量小, G换了之后再去做optimize objective function去求现在固定的G条件下求divergence的D长什么样, 这样来循环往复
那我的问题是, divergence是客观存在的, 如果G变了, 那PG就会变, Pdata肯定是一直不变的, 既然量度divergence的D和G是相关的, 只要G变了, 量度的方法(D)就要变, 那怎么能保证这个过程一定是收敛的, 也就是说, 虽然你告诉我update G是在固定D的条件下, 但你最小化max{D}V(G,D)得到的那个G已经不能用之前的那个D来量度这个时候的divergence了, 那这个时候我怎么知道我在优化G的时候, 是一定朝向divergence最小的方向进行的???是不是WGAN会解掉我这个疑惑???
网友评论