GAN-生成对抗网络原理
最近一直在看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-生成对抗网络原理的更多相关文章
- 用MXNet实现mnist的生成对抗网络(GAN)
用MXNet实现mnist的生成对抗网络(GAN) 生成式对抗网络(Generative Adversarial Network,简称GAN)由一个生成网络与一个判别网络组成.生成网络从潜在空间(la ...
- 生成对抗网络(GAN)
GAN的全称是 Generative Adversarial Networks,中文名称是生成对抗网络.原始的GAN是一种无监督学习方法,巧妙的利用“博弈”的思想来学习生成式模型. 1 GAN的原理 ...
- 不到 200 行代码,教你如何用 Keras 搭建生成对抗网络(GAN)【转】
本文转载自:https://www.leiphone.com/news/201703/Y5vnDSV9uIJIQzQm.html 生成对抗网络(Generative Adversarial Netwo ...
- 生成对抗网络(GAN)相关链接汇总
1.基础知识 创始人的介绍: “GANs之父”Goodfellow 38分钟视频亲授:如何完善生成对抗网络?(上) “GAN之父”Goodfellow与网友互动:关于GAN的11个问题(附视频) 进一 ...
- 生成对抗网络(Generative Adversarial Networks,GAN)初探
1. 从纳什均衡(Nash equilibrium)说起 我们先来看看纳什均衡的经济学定义: 所谓纳什均衡,指的是参与人的这样一种策略组合,在该策略组合上,任何参与人单独改变策略都不会得到好处.换句话 ...
- 使用生成对抗网络(GAN)生成手写字
先放结果 这是通过GAN迭代训练30W次,耗时3小时生成的手写字图片效果,大部分的还是能看出来是数字的. 实现原理 简单说下原理,生成对抗网络需要训练两个任务,一个叫生成器,一个叫判别器,如字面意思, ...
- 深度学习-生成对抗网络GAN笔记
生成对抗网络(GAN)由2个重要的部分构成: 生成器G(Generator):通过机器生成数据(大部分情况下是图像),目的是“骗过”判别器 判别器D(Discriminator):判断这张图像是真实的 ...
- GAN生成式对抗网络(一)——原理
生成式对抗网络(GAN, Generative Adversarial Networks )是一种深度学习模型 GAN包括两个核心模块. 1.生成器模块 --generator 2.判别器模块--de ...
- 人工智能中小样本问题相关的系列模型演变及学习笔记(二):生成对抗网络 GAN
[说在前面]本人博客新手一枚,象牙塔的老白,职业场的小白.以下内容仅为个人见解,欢迎批评指正,不喜勿喷![握手][握手] [再啰嗦一下]本文衔接上一个随笔:人工智能中小样本问题相关的系列模型演变及学习 ...
- 生成对抗网络GAN介绍
GAN原理 生成对抗网络GAN由生成器和判别器两部分组成: 判别器是常规的神经网络分类器,一半时间判别器接收来自训练数据中的真实图像,另一半时间收到来自生成器中的虚假图像.训练判别器使得对于真实图像, ...
随机推荐
- struts文件下载机制
Struts2 中使用 type="stream" 的 result 进行下载即可.只用提供一个输入流inputStream,剩下的输出工作struts帮我们做. 例子一: 1.可 ...
- FAT文件系统规范v1.03学习笔记---1.保留区之 Fat32 FSInfo扇区结构和备份启动扇区
1.前言 本文主要是对Microsoft Extensible Firmware Initiative FAT32 File System Specification中文翻译版的学习笔记. 每个FAT ...
- 普通函数跟箭头函数中this的指向问题
箭头函数和普通函数的区别如下. 普通函数:根据调用我的人(谁调用我,我的this就指向谁) 箭头函数:根据所在的环境(我再哪个环境中,this就指向谁) 一针见血式总结: 普通函数中的this: 1. ...
- leetcode 307 Range Sum Query
问题描述:给定一序列,求任意区间(i, j)的元素和:修改任意一元素,实现快速更新 树状数组 树状数组的主要特点是生成一棵树,树的高度为logN.每一层的高度为k,分布在这一层的序列元素索引的二进制表 ...
- CF55D: Beautiful Number
传送门 一句话题意 求 l~r 之间有多少个数能整除自己各位上的数(排除 0 ) 分析 然后我们一看就知道数位 dp ,但是状态很难设计啊 QWQ 我们可以发现所有数位的 lcm 最大为 2520 ( ...
- List<> of struct with property. Cannot change value of property. why?
这个返回如下错误:"Cannot modify the return value of 'System.Collections.Generic.List<MyStruct>.th ...
- zabbix常用的python类api
zabbix自带api #!/usr/bin/python #coding:utf-8 import requests import json url = "http://192.168.9 ...
- hue报错StructuredException: timed out (code THRIFTSOCKET): None的处理
通过hue的web界面进行hive的sql查询,无法显示结果并报错timeout 报错如下:[28/Jul/2017 11:23:29 +0800] decorators ERROR error ru ...
- 持续集成①安装部署jenkins从git获取代码
持续集成①安装部署jenkins从git获取代码 一:持续集成的概念: 1.1:总体的概括 持续集成Continuous Integration 持续交付Continuous Delivery 持续部 ...
- T-SQL DISTINCT子句 去重复
语法 以下是DISTINCT关键字的基本语法,用于删除重复记录. SELECT DISTINCT column1, column2,.....columnN FROM table_name WHERE ...