最近一直在看GAN,我一直认为只有把博客看了一遍,然后再敲一遍。这样才会有深刻的感悟。

GAN(生成式对抗网络)(GAN, Generative Adversarial Networks )是一种深度学习模型,分布在无监督学习上。

分成两个模块:生成模型(Generative Model)和判别模型(Discriminative Model)。简单来说就是:两个人比赛,看是 A 的矛厉害,还是 B 的盾厉害。。

比如:我们有一些真实数据,同时也有随机生成的假数据。A把假数据拼命地模仿成真数据,B拼命地想把真实数据和假数据分开。

这里,A就是一个生成模型,类似于造假钞,一个劲的学习如何骗过B。B是一个判别模型,类似与警察,一个劲地学习如何分辨出A的造假技巧

然后,B的鉴别技巧越来越厉害,A的造假技术越来越逼真,成为一个一流的假币制造者。而GAN就是获得上述的两个模型。

我们需要同时训练两个模型。G:生成器。D:判别器。生成器G的训练过程是最大化判别器犯错误的概率,即判别器误以为数据是真实样本而不是生成器生成的假样本。因此,这一框架就对应于两个参与者的极小极大博弈。在所有可能的函数G和D中,我们可以求出唯一的均衡解,即G可以生成与训练样本相同的分布,而D判断的概率为1/2,意思就是D已经无法判别数据的真假。

为了学习到生成器在数据x上的分布P_g,我们先定义一个输入的噪声变量z,然后根据G将其映射到数据空间中,其中G为多层感知机所表征的可微函数。

同样要定义第二个多层感知机D,它的输出是单个标量。D(x)表示x是真实数据。我们训练D以最大化正确分配真实样本和生成样本的概率,引起我们就可以最小化log(1-D(G(z)))而同时训练G。也就是说判别器D和生成器对价值函数V(G, D)进行极小极大化博弈。

如上图所示,生成对抗网络会训练并更新判别分布(即D,蓝色的虚线),更新判别器后就能将数据真实分布(黑点组成的线)从生成分布P_g(G)(绿色实线)中判别出来。下方的水平线代表采样域Z,其中等距表示Z中的样本为均匀分布,上方的水平线代表真实数据X中的一部分。向上的箭头表示映射x = G(z)如何对噪声样本(均匀采样)施加一个不均匀的分布P_g.

(a) 考虑在收敛点附近的对抗训练:P_g和P_data已经十分相似,D是一个局部准确的分类器。

(b) 在算法内部循环中训练D,从数据中判别出真实样本,该循环最终会收敛到D(x) = P_data(x) / (P_data(x) + P_g(x))

(c) 随后固定判别器并训练生成器,在更新G后,D的梯度会引导G(z)流向更可能被D分类为真实数据的方向。

(d) 经过若干次训练后,如果G和D有足够的复杂度,那么他们就会到达一个均衡点,这时:P_g = P_data,即生成数据的概率密度函数等于真实数据的概率密度函数,生成数据 = 真实数据。在均衡点上D和G都不能进一步提升,并且判别器无法判断数据到底是来自真实样本还是伪造的数据,即D(x) = 1/2

公式推导(公式推导部分来自机器之心):

下面,我们必须证明该最优化问题也就是价值函数V(G, D),有唯一解并且该解满足P_G = P_data

将数学期望展开为积分形式:

其实求积分的最大值可以转化为求被积函数的最大值。而求被积函数的最大值是为了求得最优判别器D,因此不涉及判别器的项都可以被看做为常数项。如下所示:P_data(x)和P_G(x)都为标量,因此被积函数可表示为 a * D(x) + b * log(1 - D(x)).

若令判别器D(x)等于y,那么被积函数可以写为:

为了找到最优的极值点,如果a + b ≠ 0,我们可以用以下一阶导求解:

如果我们继续求表达式f(y)在驻点的二阶导:

最优生成器

当然GAN过程的目标是令P_G = P_data。

这意味着判别器已经完全困惑,它完全分辨不出P_date和P_G的区别,即判断样本来自P_data和P_G的概率都为1/2。基于这一观点,GAN的作者证明了G就是极小极大博弈的解。

GAN-生成对抗网络原理的更多相关文章

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

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

  2. 生成对抗网络(GAN)

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

  3. 不到 200 行代码,教你如何用 Keras 搭建生成对抗网络(GAN)【转】

    本文转载自:https://www.leiphone.com/news/201703/Y5vnDSV9uIJIQzQm.html 生成对抗网络(Generative Adversarial Netwo ...

  4. 生成对抗网络(GAN)相关链接汇总

    1.基础知识 创始人的介绍: “GANs之父”Goodfellow 38分钟视频亲授:如何完善生成对抗网络?(上) “GAN之父”Goodfellow与网友互动:关于GAN的11个问题(附视频) 进一 ...

  5. 生成对抗网络(Generative Adversarial Networks,GAN)初探

    1. 从纳什均衡(Nash equilibrium)说起 我们先来看看纳什均衡的经济学定义: 所谓纳什均衡,指的是参与人的这样一种策略组合,在该策略组合上,任何参与人单独改变策略都不会得到好处.换句话 ...

  6. 使用生成对抗网络(GAN)生成手写字

    先放结果 这是通过GAN迭代训练30W次,耗时3小时生成的手写字图片效果,大部分的还是能看出来是数字的. 实现原理 简单说下原理,生成对抗网络需要训练两个任务,一个叫生成器,一个叫判别器,如字面意思, ...

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

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

  8. GAN生成式对抗网络(一)——原理

    生成式对抗网络(GAN, Generative Adversarial Networks )是一种深度学习模型 GAN包括两个核心模块. 1.生成器模块 --generator 2.判别器模块--de ...

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

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

  10. 生成对抗网络GAN介绍

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

随机推荐

  1. RabbitMQ简单应用の轮训分发

    MQ连接工厂还是之前的那个Connection package com.mmr.rabbitmq.util; import java.io.IOException; import com.rabbit ...

  2. python,栈的小例子

    ''' 1.首先确认栈的概念,先进后出 2.初始化的时候如果给了一个数组那么就要将数组进栈 ''' class Stack: def __init__(self,start=[]): self.sta ...

  3. hadoop-1.2.1集群搭建

    继续上一篇:http://www.cnblogs.com/CoolJayson/p/7430654.html 首先需要安装上台虚拟机, 分别为: master, salve1, slave2 1.复制 ...

  4. ASP.NET Core中使用Autofac

    ⒈添加相关依赖 Install-Package Autofac ⒉扫描项目接口实现类 using Autofac; using System; using System.Collections.Gen ...

  5. Python全栈(第一部分)day1

    计算机基础 cpu:相当于人的大脑,用于计算. 内存:储存数据,4G,8G,16G,32G,成本高,断电即消失. 硬盘:1T,固态硬盘,机械硬盘,储存数据,应该长久保持数据,重要文件,小电影等等. 操 ...

  6. Deep Learning Tutorial - Multilayer perceptron

    Multilayer perceptron:多层感知器 本节实现两层网络(一个隐层)作为分类器实现手写数字分类.引入的内容:激活函数(双曲正切.L1和L2正则化).Theano的共享变量.grad.f ...

  7. Liunx之KVM搭建图形化的WEB

    作者:邓聪聪 我们常在Windowns下使用VMware,当然在Liunx中也有这样的软件供我们使用.生产环境的KVM宿主机越来越多,需要对宿主机的状态进行调控.这里用webvirtmgr进行管理.图 ...

  8. 判断鼠标进入容器的方向小Demo

    参考资料: 贤心博客:http://sentsin.com/web/112.html, Math.atan2(y,x) 解释 :http://www.w3school.com.cn/jsref/jsr ...

  9. Docker从0开始之部署一套2048小游戏

    本文记录一下在docker部署一套2048小游戏的过程,在娱乐中熟悉docker的应用部署.docker 安装不在本文讲述之中,参考我的其它博客. 1.获取image镜像. 方法一:daocloud. ...

  10. CSS集锦

    div内容自动换行:word-wrap:break-word;word-break:break-all;