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的参数为 $\theta_d$,其损失函数的梯度为

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

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

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

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

生成对抗网络(GAN)的更多相关文章

  1. 用MXNet实现mnist的生成对抗网络(GAN)

    用MXNet实现mnist的生成对抗网络(GAN) 生成式对抗网络(Generative Adversarial Network,简称GAN)由一个生成网络与一个判别网络组成.生成网络从潜在空间(la ...

  2. TensorFlow从1到2(十二)生成对抗网络GAN和图片自动生成

    生成对抗网络的概念 上一篇中介绍的VAE自动编码器具备了一定程度的创造特征,能够"无中生有"的由一组随机数向量生成手写字符的图片. 这个"创造能力"我们在模型中 ...

  3. 人工智能中小样本问题相关的系列模型演变及学习笔记(二):生成对抗网络 GAN

    [说在前面]本人博客新手一枚,象牙塔的老白,职业场的小白.以下内容仅为个人见解,欢迎批评指正,不喜勿喷![握手][握手] [再啰嗦一下]本文衔接上一个随笔:人工智能中小样本问题相关的系列模型演变及学习 ...

  4. 生成对抗网络GAN介绍

    GAN原理 生成对抗网络GAN由生成器和判别器两部分组成: 判别器是常规的神经网络分类器,一半时间判别器接收来自训练数据中的真实图像,另一半时间收到来自生成器中的虚假图像.训练判别器使得对于真实图像, ...

  5. 生成对抗网络(GAN)

    基本思想 GAN全称生成对抗网络,是生成模型的一种,而他的训练则是处于一种对抗博弈状态中的. 譬如:我要升职加薪,你领导力还不行,我现在领导力有了要升职加薪,你执行力还不行,我现在执行力有了要升职加薪 ...

  6. 深度学习-生成对抗网络GAN笔记

    生成对抗网络(GAN)由2个重要的部分构成: 生成器G(Generator):通过机器生成数据(大部分情况下是图像),目的是“骗过”判别器 判别器D(Discriminator):判断这张图像是真实的 ...

  7. 深度学习框架PyTorch一书的学习-第七章-生成对抗网络(GAN)

    参考:https://github.com/chenyuntc/pytorch-book/tree/v1.0/chapter7-GAN生成动漫头像 GAN解决了非监督学习中的著名问题:给定一批样本,训 ...

  8. 科普 | ​生成对抗网络(GAN)的发展史

    来源:https://en.wikipedia.org/wiki/Edmond_de_Belamy 五年前,Generative Adversarial Networks(GANs)在深度学习领域掀起 ...

  9. 利用tensorflow训练简单的生成对抗网络GAN

    对抗网络是14年Goodfellow Ian在论文Generative Adversarial Nets中提出来的. 原理方面,对抗网络可以简单归纳为一个生成器(generator)和一个判断器(di ...

  10. 原始的生成对抗网络GAN

    论文地址:https://arxiv.org/pdf/1406.2661.pdf 1.简介: GAN的两个模型 判别模型:就是图中右半部分的网络,直观来看就是一个简单的神经网络结构,输入就是一副图像, ...

随机推荐

  1. 【学习笔记】sklearn数据集与估计器

    数据集划分 机器学习一般的数据集会划分为两个部分: 训练数据:用于训练,构建模型 测试数据:在模型检验时使用,用于评估模型是否有效 训练数据和测试数据常用的比例一般为:70%: 30%, 80%: 2 ...

  2. 向后台提交数据:通过form表单提交数据需刷新网页 但通过Ajax提交数据不用刷新网页可通过原生态Ajax或jqueryAjax。Ajax代码部分

    原生态Ajax提交表单:需要借助XMLHttpRequest对象的open,要收通过post发送请求还要setRequsetHeader,然后把数据发送给后端,代码如下 目录结构 index.py代码 ...

  3. Python importlib 动态加载模块

    # 创建一个 src 文件夹,里面有一个 commons.py 文件,内容如下 def add(): print("add ....") # 创建一个 app.py 文件,内容如下 ...

  4. css 样式表的书写顺序

    display || visibility list-style : list-style-type || list-style-position || list-style-image positi ...

  5. iphone投屏电脑 苹果x用无线充电好不好

    众所周知,苹果新发布的iPhone 8和iPhone X支持无线充电功能,简单说就是在充电时用户只需把它们放到充电板上即可,不再需要插入Lightning线缆.而且如今iphone投屏电脑也是比较受欢 ...

  6. <解决方法>Centos安装使用Chromedriver

    一.安装Chrome 我安装好Centos系统后,就在网上去找Chrome浏览器的安装方法,使用过yum,rpm都安装不上,会报错,然后询问公司的运维,他给我了个包,然后使用:yum localins ...

  7. Linux 中提高的 SSH 的安全性

    SSH 是远程登录 Linux 服务器的最常见的方式.且 SSH 登录的时候要验证的,相对来讲会比较安全.那只是相对,下面会介绍一些方式提高 SSH 的安全性 SSH 的验证 而SSH 登录时有两种验 ...

  8. Java代码优化总结(持续更新)

    1.对equals不熟 例子 if(user.get("s").equals("ss")){ //一堆代码 } 注:一旦前端页面传null值过来,就错了,nul ...

  9. aspectj 简单的模拟权限检查、事务、日志记录

    package com.ij34.service; public class Hello { public void he() { System.out.println("执行Hello的h ...

  10. [20181122]模拟ORA-08103错误.txt

    [20181122]模拟ORA-08103错误.txt $ oerr ora 810308103, 00000, "object no longer exists"// *Caus ...