最近一直在看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. java ==、equals、hashcode有什么区别

    1.== 用来比较两个对象的存储空间 2.equals是Object类提供的方法之一,每个java类都继承Object类,所以每一个对象都具有equals方法,所以在没有覆盖equals方法的情况下, ...

  2. P4001 [ICPC-Beijing 2006]狼抓兔子

    题目地址:P4001 [ICPC-Beijing 2006]狼抓兔子 平面图 边与边只在顶点相交的图. 对偶图 对于一个平面图,都有其对应的对偶图. 平面图被划分出的每一个区域当作对偶图的一个点: 平 ...

  3. FAT32文件格式示例解析

    1.前言 本文主要以一个示例来分析FAT32文件系统的格式,对FAT32文件系统的各个区域详细分析. 2.FAT32文件系统典型分区 3.FAT32文件系统示例 按如下步骤在ubuntu下创建FAT3 ...

  4. 函数-->指定函数--->默认函数--->动态函数--> 动态参数实现字符串格式化-->lambda表达式,简单函数的表示

    #一个函数何以接受多个参数#无参数#show(): ---> 执行:show() #传入一个参数 def show(arg): print(arg) #执行 show(123) #传入两个参数 ...

  5. java乱码问题解决

    1.通过统一的过滤器进行了页面过滤(问题排除) 2.通过debug功能发现页面传到servelet和DAO中文都是OK的,可以说明在web程序端没有问题 问题就可能出现在数据库上面 首先查看数据库编码 ...

  6. sqlserver2008r2还原完整备份和差异备份及自动删除过期备份

    本文主要内容: 还原完整和差异备份 删除超过1个月的备份 注:保证SQL Server代理服务启动,并把服务设置为自动启动 完整备份和差异备份还原原理: 差异备份是完整备份的补充,只备份上次完整备份后 ...

  7. RGB、YUV和HSV颜色空间模型

    一.概述 颜色通常用三个独立的属性来描述,三个独立变量综合作用,自然就构成一个空间坐标,这就是颜色空间.但被描述的颜色对象本身是客观的,不同颜色空间只是从不同的角度去衡量同一个对象.颜色空间按照基本机 ...

  8. use Swig to create C/C++ extension for Python

    SWIG is a software development tool that simplifies the task of interfacing different languages to C ...

  9. linux /proc目录

    1. /proc目录Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构.改变内核设置的机制.proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间.它以文 ...

  10. Android ADT 离线下载

    网上很多的Android在IDE eclipse的开发环境教程,ADT的就安装肯定也在里面啦 ADT的安装都是一个在线安装地址: https://dl-ssl.google.com/android/e ...