GAN笔记

作者: zhouycoriginal | 来源:发表于2019-12-16 20:03 被阅读0次

    GAN 的 基础框架--original GAN

    Generative Adversarial Nets(GAN) 由Goodfellow于2014年提出。这是一种对抗学习框架,它由2个网络组成:

    • 生成器Generator(G):用于学习数据的分布。
    • 判别器Discrimonator(D):判断数据是来自于真实的样本或是由G生成的样本。

    这两个网络是同时训练的,尽力训练G,使其生成的样本让D尽可能的犯错,也就是让D无法分辨样本究竟是来自于G还是来自于真实的数据;对于D,其同时也学习判别样本究竟来自何方。
    这两个网络的形式化定义如下:
    \min\limits_{G} \max\limits_{D}V(D,G)=E_{x-p_{data(x)}}[\log(D(X))]+E_{z-p_{z}}[\log(1-D(G(z))] \quad(1)
    这个公式也是GAN的损失,此处使用\log(1-D(G(z)))的原因可以理解为D在这里,理想情况下对G(z)的反馈输出是假样本,也就是0,那么这部分的值就等于0,证明很好,如果分错,那就是1,这会导致这部分的值变得很大,于最小化的优化目标相差甚远。
    在这个定义中:

    • p_z(z): 输入G的随机噪声
    • G(z;\theta_g): 代表多层神经网络构成的生成器。
    • D(x,\theta_d): 代表多层神经网络组成的判别器。
    • p_g:生成器从真实数据x中学习到的数据分布

    其中,D(x)表示变量x(数据分布)来自于真实数据的概率,而非来自于p_g。这样的训练方式旨在于训练D,使其最大限度的给真实数据样本和生成数据样本打上标签。同时训练G来最小化\log(1-D(G(z))).
    分析:
    最小化G:
    \min\limits_{G}=E_{z-p_{z}}[1-\log(D(G(z))]
    等价于:
    \max\limits_{G}=E_{z-p_{z}}[\log(D(G(z))]
    等价于增大\log(D(G(z))\uparrow\quad\Longrightarrow D(G(z))\uparrow \quad\Longrightarrow G(z)=p_g \sim p_x

    最大化D
    \max\limits_{D}=E_{x-p_{data(x)}}[\log(D(X))]+E_{z-p_{z}}[1-\log(D(G(z))]
    D最大话意味着:D要尽可能的识别真样本D(X)和假样本D(G(z)), 即将真样本识别为1,假样本识别为0,否则第一部分的公式将趋于负无穷,第二部分也将趋于负无穷:
    D(X)\uparrow\space\Rightarrow\space\log(D(X))\uparrow
    D(G(z))\downarrow\space\Rightarrow\space\log(D(G(z)))\downarrow\space\Rightarrow\space (1-\log D(G(z)))\uparrow
    如何训练?
    直接根据(1)训练的话,也许不能为G的训练提供足够的梯度,所以训练G的过程可以从最小化\log(1-D(G(z)))改为最大化\log(D(G(z)))
    作者提供了训练的算法如图:

    GAN training architecture
    下面来逐步理解每一步的过程
    每一轮迭代(epoch)都经历如下的过程:
    • 练(更新)判别器:
    • 在原始数据上训练判别器: D(x^{i}),标签应设置为1,表示数据来自于真实的数据
    • 在生成的的数据上训练判别器,标签应设置为0,表示数据来自于假数据
    • 此时,生成器参数此时固定
    • 损失函数可以是分类损失
    • 训练(更新)生成器:
    • 通过最大化 D(G(z^{i})) 更新生成器的参数。
    • 这一步判别器固定,生成器参数反传
    • 损失函数可以是分类损失

    GAN的最优情况:

    • For D:
      D_{G}=\frac{P_{data}(x)}{P_{data}(x)+P_{g}(x)}
      当P_g(x)=P_{data}(x)的时候,证明生成器所能生成的数据已经和原始数据非常的相似,所以,当生产器损失为 0.5 的时候,可以认为GAN达到了一种平衡状态
    • For G:
      G的目标就是生成和真实数据一样的分,故G的最优情况为:
      P_{data} = \frac{P_{data}+P_{G}}{2}
      P_{data}=P_{fake}

    下面推导(1)式及GAN的最优情况:

    首先式中E表示的是数学期望,在概率论和统计学中,数学期望(mean)(或均值,亦简称期望)是试验中每次可能结果的概率乘以其结果的总和,是最基本的数学特征之一。它反映随机变量平均取值的大小。注意平均数是根据实际结果统计得到的随机变量样本计算出来的算术平均值,和实验本身有关,而数学期望是完全由随机变量的概率分布所确定的,和实验本身无关。
    随机变量(连续性)的数学期望可以用积分表示,那么:
    V(D,G)=\int_x p_{data}(x)\log(D(x))d_x+\int_zp_z(z)\log(1-D(G(z)))d_z
    因为z是关于G生成的关于x的分布,所以可以将z替换为x, p_z(z)定义为:p_g(x),
    V(D,G)=\int p_{data}(x)\log(D(x))+p_g(x)\log(1-D(x))d_x
    现在想知道G关于D的最大值,函数没有解析解的时候,应用梯度下降得到:
    \frac{\partial V(D,G)}{D(x)}=\frac{\partial[P_{data}(x)\log(D(x))+P_g(x)(log(1-D(x)]}{\partial D(x)}
    应用对数函数求导法则,且一般机器学习中没有特别声明的话,感觉对数的底树都是e
    \frac{\partial f}{x}=\frac{1}{x-1}
    \frac{\partial V(D,G)}{D(x)}=\frac{P_{data}(x)}{D(x)}+\frac{P_g(x)}{D(x)-1}
    令其为0可得:
    P_{data}=x, P_g=y,D(x)=a, 同分计算:
    \frac{x}{a}+\frac{y}{a-1}=0 \Longrightarrow a=\frac{x}{x+y}\Longrightarrow D(x)=\frac{P_{data}(x)}{P_g(x)+P_{data}(x)}
    显然,当P_g(x)=P_{data}(x)的时候,证明生成器所能生成的数据已经和原始数据非常的相似,所以,当生产器损失为 0.5 的时候,可以认为GAN达到了一种平衡状态。

    最后,提到GAN就不得不提KL散度,本人感觉,作者引入KL散度是为了证明GAN的可收敛性。

    DCGAN

    UNSUPERVISED REPRESENTATION LEARNING WITH DEEP CONVOLUTIONAL GENERATIVE ADVERSARIAL NETWORKS
    paper作者提出了良好的深度卷积GAN,生成器反卷积得到图片,判别器使用卷积。
    生成器的结构如下:

    DCGAN-Generator
    其他方面,DCGAN的训练,理论都和原始GAN是一致的

    WGAN

    Wasserstein GAN
    WGAN同样是一篇比较经典的文章,作者探讨并解决了GAN存在的几个问题:

    • GAN 的训练存在不稳定的问题
    • 模型坍塌问题
      与原始的GAN相比,WGAN改进了一下几点:
    • 判别器最后一层去掉了sigmoid
    • 生成器和判别器的loss 不取log
    • 每次更新判别器的参数之后把它们的绝对值截断到不超过一个固定常数c (参数截断)

    相关文章

      网友评论

          本文标题:GAN笔记

          本文链接:https://www.haomeiwen.com/subject/tfrdnctx.html