zoukankan      html  css  js  c++  java
  • 生成对抗网络(GAN)

    生成对抗网络(GAN)

    一、总结

    一句话总结:

    GAN的全称是 Generative Adversarial Networks,中文名称是生成对抗网络。原始的GAN是一种无监督学习方法,巧妙的利用“博弈”的思想来学习生成式模型。

    1、GAN的原理(从博弈方面)?

    在训练过程中,生成网路G的目标是尽量生成真实的图片去欺骗判别网络D。而判别网络D的目标就是尽量把G生成的图片和真实的图片区分开来。这样G和D就构成了一个动态的博弈过程。

    2、GAN损失函数?

    A、根据交叉熵损失,可以构造下面的损失函数:$$ V(D,G) = E_{x~p_{data}(x)} [ln D(x)] + E_{z~p_z(z)} [ln(1-D(G(z)))] $$
    B、其实从损失函数中可以看出和逻辑回归的损失函数基本一样,唯一不一样的是负例的概率值为 $ 1-D(G(z))$。
    C、损失函数中加号的前一半是训练数据中的真实样本,后一半是从已知的噪声分布中取的样本。下面对这个损失函数详细描述:

    3、GAN损失函数说明:$$ V(D,G) = E_{x~p_{data}(x)} [ln D(x)] + E_{z~p_z(z)} [ln(1-D(G(z)))] $$?

    1)、整个式子有两项构成。 $x$表示真实图片,$z$表示输入G网络的噪声,而$G(z)$ 表示G网络生成的图片。
    2)、$D(x)$ 表示D网络判断真实图片是否真实的概率 ,即 $P(y=1 | x)$。而$D(G(z))$ 是D网络判断$G$生成的图片是否真实的概率。
    3)、G的目的:G应该希望自己生成的图片越真实越好。也就是说G希望 $D(G(z))$ 尽可能大,即$P(G(z) = 1 | x)$,这时 $V(D, G)$ 尽可能小。
    4)、D的目的:D的能力越强,$D(x)$ 就应该越大,$D(G(x))$应该越小(即假的图片都被识别为0)。因此D的目的和G的目的不同,D希望 $V(D, G)$ 越大越好。

    4、GAN建模流程?

    (A)、从已知的噪声分布 $p_z(z)$中选取一些样本:${z_1, z_2, ......, z_m}$
    (B)、从训练数据中选出同样个数的真实图片:${x_1, x_2, ......, x_m}$
    (C)、设判别器D的参数为 $ heta_d$,其损失函数的梯度为:$$ abla frac{1}{m} sum_{i=1}^m [lnD(x_i) + ln(1-D(G(Z_I)))] $$
    (D)、设生成器G的参数为 $ heta_g$,其损失函数的梯度为:$$ abla frac{1}{m} sum_{i=1}^m [ln(1-D(G(Z_I)))] $$

    二、生成对抗网络(GAN)

    转自或参考:生成对抗网络(GAN)
    https://www.cnblogs.com/jiangxinyang/p/10156138.html

      GAN的全称是 Generative Adversarial Networks,中文名称是生成对抗网络。原始的GAN是一种无监督学习方法,巧妙的利用“博弈”的思想来学习生成式模型。

    1 GAN的原理

      GAN的基本原理很简单,其由两个网络组成,一个是生成网络G(Generator) ,另外一个是判别网络D(Discriminator)。它们的功能分别是:

      生成网络G:负责生成图片,它接收一个随机的噪声 $z$,通过该噪声生成图片,将生成的图片记为 $G(z)$。

      判别网络D:负责判别一张图片是真实的图片还是由G生成的假的图片。其输入是一张图片 $x$ ,输出是0, 1值,0代表图片是由G生成的,1代表是真实图片。

      在训练过程中,生成网路G的目标是尽量生成真实的图片去欺骗判别网络D。而判别网络D的目标就是尽量把G生成的图片和真实的图片区分开来。这样G和D就构成了一个动态的博弈过程。这是GAN的基本思想。

      在最理想的状态下,G可以生成足以“以假乱真”的图片 $G(z)$。对于D来说,它难以判断G生成的图片究竟是不是真实的,因此 $D(G(z)) = 0.5$ (在这里我们输入的真实图片和生成的图片是各一半的)。此时得到的生成网络G就可以用来生成图片。

    2 GAN损失函数

      从数学的角度上来看GAN,假设用于训练的真实图片数据是 $x$,图片数据的分布为 $p_{data}(x)$,生成网络G需要去学习到真实数据分布 $p_{data}(x)$。噪声 $z$ 的分布假设为$p_z(z)$,在这里 $p_z(z)$是已知的,而 $p_{data}(x)$ 是未知的。在理想的状态下$G(z)$ 的分布应该是尽可能接近$p_{data}(x)$,G将已知分布的$z$ 变量映射到位置分布 $x$ 变量上。

      根据交叉熵损失,可以构造下面的损失函数:

      $ V(D,G) = E_{x~p_{data}(x)} [ln D(x)] + E_{z~p_z(z)} [ln(1-D(G(z)))] $

      其实从损失函数中可以看出和逻辑回归的损失函数基本一样,唯一不一样的是负例的概率值为 $ 1-D(G(z))$。

      损失函数中加号的前一半是训练数据中的真实样本,后一半是从已知的噪声分布中取的样本。下面对这个损失函数详细描述:

      1)整个式子有两项构成。 $x$表示真实图片,$z$表示输入G网络的噪声,而$G(z)$ 表示G网络生成的图片。

      2)$D(x)$ 表示D网络判断真实图片是否真实的概率 ,即 $P(y=1 | x)$。而$D(G(z))$ 是D网络判断$G$生成的图片是否真实的概率。

      3)G的目的:G应该希望自己生成的图片越真实越好。也就是说G希望 $D(G(z))$ 尽可能大,即$P(G(z) = 1 | x)$,这时 $V(D, G)$ 尽可能小。

      4)D的目的:D的能力越强,$D(x)$ 就应该越大,$D(G(x))$应该越小(即假的图片都被识别为0)。因此D的目的和G的目的不同,D希望 $V(D, G)$ 越大越好。

    3 GAN建模流程

      在实际训练中,使用梯度下降法,对D和G交替做优化,具体步骤如下:

      1)从已知的噪声分布 $p_z(z)$中选取一些样本

        ${z_1, z_2, ......, z_m}$

      2)从训练数据中选出同样个数的真实图片

        ${x_1, x_2, ......, x_m}$

      3)设判别器D的参数为 $ heta_d$,其损失函数的梯度为

        $ abla frac{1}{m} sum_{i=1}^m [lnD(x_i) + ln(1-D(G(Z_I)))] $

      4)设生成器G的参数为 $ heta_g$,其损失函数的梯度为

        $ abla frac{1}{m} sum_{i=1}^m [ln(1-D(G(Z_I)))] $

      在上面的步骤中,每更新一次D的参数,紧接着就更新一次G的参数,有时也可以在更新 $k$ 次D的参数,再更新一次G的参数。

     
    我的旨在学过的东西不再忘记(主要使用艾宾浩斯遗忘曲线算法及其它智能学习复习算法)的偏公益性质的完全免费的编程视频学习网站: fanrenyi.com;有各种前端、后端、算法、大数据、人工智能等课程。
    博主25岁,前端后端算法大数据人工智能都有兴趣。
    大家有啥都可以加博主联系方式(qq404006308,微信fan404006308)互相交流。工作、生活、心境,可以互相启迪。
    聊技术,交朋友,修心境,qq404006308,微信fan404006308
    26岁,真心找女朋友,非诚勿扰,微信fan404006308,qq404006308
    人工智能群:939687837

    作者相关推荐

  • 相关阅读:
    iOS身份证号码识别
    GPS定位开发
    Xcode8注释有时会失效的解决方法
    本地缓存FMDB的使用(iOS)
    iOS蓝牙开发
    极光推送
    查找当前数据库服务器中某张表存在于哪个数据库中
    redis安装配置记录
    python 之生成器
    python之迭代
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/13475124.html
Copyright © 2011-2022 走看看