• Theory behind GAN


    假如要生成一些人脸图,实际上就是想要找到一个分布,从这个分布内sample出来的图片像是人脸,分布之外生成的就不像人脸。而GAN要做的就是找到这个distribution。

    在GAN之前用的是Maximum Likelihood Estimation。

    Maximum Likelihood Estimation(最大似然估计)

    最大似然估计的思想是,假设数据的分布是 Pdata(x) ,定义一个分布为PG(x;θ) ,求得一组参数θ,使得PG(x;θ)Pdata(x) 越接近越好。具体步骤如下:

    1. Pdata(x) 中sample出一些样本;
    2. 对于sample出来的样本,可以计算出它们的likelihood;
    3. 计算总分likelihood L,并找到一组参数θ*  使得L最大。

    MLE=Minimize KL Divergence

    最大似然估计就相当于最小化的KL散度

    如果使用最大似然估计,采用高斯混合模型定义PG  ,生成的图片会非常模糊,现在使用generator产生PG 。优化的目标就是使PGPdata 越接近越好,即使得G* 越小越好,但是不知道PGPdata 的公式。

    虽然不知道PGPdata 的公式,但是可以从这两个分布中做sample。可以用Discriminator来衡量PGPdata 的Divergence。训练出来的maxV(G,D) 就相当于JS divergence。

    证明过程

    要求V(G,D)的最大值,就是求 的最大值。

    因为PGPdata 都是固定的,所以设为常数,然后通过求导求出最大值。

    将求出的D* 回带入V(G,D),然后化简。

    Generator 的训练目标就是,找到一个G* 去最小化PGPdata 之间的差异,即 ,由于不知道PGPdata 的具体公式,所以无法直接计算divergence。于是通过一个discriminator来计算两个分布之间的差异, 。所以最终优化目标为

    假设已经把Generator固定住了,红点表示固定住G后的 ,也就是PGPdata  的差异。现在的目标是最小化这个差异,所以下图的三个网络中,G3 是最优秀的。

    具体的做法就是:

    1. 首先固定G,找到一个能够使V最大的D;
    2. 然后固定D,找到能够使这个最大D情况下V最小的G。不停的迭代。

    虽然L(G)中有求最大值,但是它依然可以做微分,即分段求微分。

    具体算法如下:

    1. 给定一个G0
    2. 求解出使得V(D,G) 最大的D0*
    3. 利用梯度下降求解出G1 ;
    4. 利用G1 求解出使得V(D,G) 最大的D1* ,不断迭代。

    其实在训练过程中不是真正的minimize JS散度,因为G在训练时变化时,V(D,G) 也会发生改变;此时由于D固定,所以JS散度会变得不再是此刻G下的JS散度了。所以要保证V(D,G0) 和V(D,G1)  很像,即G的参数变化很小。

    Algorithm for GAN(Review

    首先训练D,多训练几次直至收敛;之后训练G:其中第一项是与生成器无关的,由于G不能训练太多,否则会导致D无法evaluate JS,所以update一次就好。

    • In practice

    理论上V是要取期望值,但是实际上是不可能的,只能用样本的均值进行估计。

    论文原文在实作的时候把log⁡(1-D(x)) 换成-log⁡(D(x)) ,蓝色曲线刚开始的值很大,适合做梯度下降。其实后来实验证明两种结果都差不多。

  • 相关阅读:
    2024年Nano编辑器最新使用教程
    Java 转型问题(向上转型和向下转型)
    网站制作定制标准有哪些?什么是网站制作定制?
    面试:ANR原因及排查
    Spring与Web环境集成
    片内总线在cpu扮演什么角色?他为什么能实现高效,不同的CPU为什么采用不同的总线协议?
    LLaMA Adapter和LLaMA Adapter V2
    刷题记录:牛客NC20242[SCOI2005]最大子矩阵
    野火 STM32MP157 开发板内核和设备树的编译烧写
    迅为RK3588开发板Android12单摄方案设备树修改
  • 原文地址:https://blog.csdn.net/qq_51426525/article/details/134456002