接下来将会有系列博客介绍GAN网络。

生成模型与判别模型

首先,需要搞清楚什么是生成模型,什么是判别模型。

生成模型是指模型学习得到 给定数据集 上的一个联合分布。这里的随机变量是模型中所有可能的随机变量。举个例子来说,对于28x28的图片来说,生成模型会学习到28x28个像素组成的随机变量的联合分布。对于带标签的28x28的图片来说,生成模型会学习到28x28+1 个随机变量的联合分布。后续的推断过程都是基于这个联合分布来完成的,典型的生成模型有 受限玻尔兹曼机、概率图模型。

而判别模型则是指模型学习得到 给定数据集 上的一个条件分布。拿带标签的28x28的图片来说,判别模型会学习到 给定28x28个像素点的条件下10个标签的条件概率。这种模型一般是带着标注数据的。

GAN基本原理

GAN 起源于博弈论中的两人零和博弈,零和博弈是指博弈的双方必须分出胜负,不可以出现和棋平局的局面。在GAN的第一篇论文中,作者拿了假币制造和识别的博弈过程来介绍GAN的思想。

有一个假币制造团队,他们是生成模型,他们的任务是生成越来越多的让警察无法识别出来的假币已达到以假乱真的目的。

还有一个是警察团队,他们是判别模型,他们的任务是给定一张纸币能够分辨出来这张纸币是真的还是假的。换句话说,他们会给一张纸币打分,如果这张纸币出自假币制造团队之手,那么这个分就低。如果这张纸币是出自中央银行,那么这个分就给的高。满分是100分。

他们双方之间的竞争使得两个团队不断改进他们的方法直到警察再也分辨不出来假币和真币。这个时候,再给警察一张假币团结制造的纸币,他已经无法区分这张纸币到底是真的,还是假的,于是给了一个50分,表示他们分不出来。

GAN模型


GAN由两部分组成:生成模型、判别模型

生成模型

生成模型用于捕捉样本数据的分布,用服从某一分布的随机噪声zzz作为输入生成一个类似真实训练数据的样本。

  • pz(z)p_z(z)pz​(z) 表示输入噪声zzz的分布函数
  • pg(x)p_g(x)pg​(x) 表示生成模型学习到的,潜在的 样本xxx的分布,注意GAN不会给出一个显式的概率分布来表示pg(x)p_g(x)pg​(x)是多少,它是通过给定噪声zzz 生成得到的假样本xxx 来体现的。显然,pg(x)p_g(x)pg​(x) 值越大 通过噪声zzz 生成相应的xxx 就越可能。
  • G(z,θg)G(z,\theta_g)G(z,θg​) 表示生成模型,生成模型可以是MLP,也可是CNN,RNN等等。

判别模型

判别模型是一个二分类器,用于评价一个样本来自真实数据集的概率(其实这种说法是有些欠妥的,我们后面再讲)。

  • D(x;θd)D(x;\theta_d)D(x;θd​) 表示判别模型
  • D(x)D(x)D(x) 表示样本xxx来自真实数据而不生成数据的概率。

目标函数


符号解释:

  • zzz :生成模型输入的噪声。
  • G(z)G(z)G(z):输入噪声,产生一个样本。即x^=G(z)\hat x=G(z)x^=G(z),xxx 可以是一个点,一个向量,一个矩阵,或者一张图片。xxx的含义随着数据集的变化而变化。可以认为x^∼pg(x)\hat x \sim p_g(x)x^∼pg​(x)
  • D(x)D(x)D(x) : 判别器,输入样本xxx,判断它是否来自真实数据集。
  • pdata(x)p_{data}(x)pdata​(x): 数据集的真实联合分布,这是我们想到去学习得到的,但是这个东西只有天知道到底是个啥。
  • pz(z)p_z(z)pz​(z) :噪声zzz的分布
  • pg(x)p_g(x)pg​(x): 生成器潜在学习到的样本的分布,生成器的目标就是让pg(x)p_g(x)pg​(x)无限的接近真实分布 pdata(x)p_{data}(x)pdata​(x)

D表示判别器,G表示生成器。
训练GAN模型的时候,判别模型希望目标函数越大越好。为什么呢?因为它希望logD(x)logD(x)logD(x)大,而log(D(x^))log(D(\hat x))log(D(x^))小,x^\hat xx^是G生成的假样本。于是它也就希望log(1−D(G(z))log(1- D(G(z))log(1−D(G(z)) 也大。

而对于生成模型来说,它想让目标函数越小越好。因为它追求 log(D(x^))log( D(\hat x))log(D(x^))越大越好,log(1−D(x^))log(1-D(\hat x))log(1−D(x^))越小越好,同时 log(D(x))log(D(x))log(D(x)) 越小越好。于是反映到目标函数就是前后两部分越小越好。

实际操作中,生成模型的目标函数是maxmaxmax Ez∼pz(z)[log(D(G(z))]E_{z\sim p_z(z)}[log(D(G(z))]Ez∼pz​(z)​[log(D(G(z))],因为一般生成模型不要去干扰log(D(x))log( D(x) )log(D(x))。

GAN训练

GAN的训练过程是个交替进行的过程,训练过程中先固定其中一方最优化另外一方,然后再固定另外一方来最优化自己。交替训练的过程中,两个模型会不断的优化,直到最后双方达到一个平衡。

GAN论文给出的训练方法如上。
其中超参数K表示 在训练G之前,先训练K轮的D。
先训练D,对于D的每一次训练:

  1. 首先先根据pz(z)p_z(z)pz​(z) 采集m 个噪声点。
  2. 从训练数据集随机采集m个样本。
  3. 根据采样的噪声,生成m个假的样本 x^\hat xx^ ,然后固定住生成模型的所有参数。
  4. 把采集的训练集样本和生成的假样本同时输入到判别器网络里面,对判别器进行反向传播。

然后再固定D的所有参数,训练G。

  1. 首先采集m个噪声
  2. 通过噪声,生成样本,然后优化G的目标函数,更新参数。

此时生成模型的数据分布无限接近训练数据的分布(造出了和真实数据一模一样的样本),判别模型再也判别不出来真实数据和生成数据,准确率为 50%。

GAN的使用

为了可以生成一些新的样本,只需先生成噪声zzz,然后输入到生成器中进行前向传播,获取生成器的输出G(z)G(z)G(z) 就可以啦~~~~~~

下篇博客将用GAN生成一个圆周上的点。

参考文献

Generative Adversarial Nets
http://papers.nips.cc/paper/5423-generative-adversarial-nets.pdf

GAN 生成对抗网络(一)相关推荐

  1. 54_pytorch GAN(生成对抗网络)、Gan代码示例、WGAN代码示例

    1.54.GAN(生成对抗网络) 1.54.1.什么是GAN 2014 年,Ian Goodfellow 和他在蒙特利尔大学的同事发表了一篇震撼学界的论文.没错,我说的就是<Generative ...

  2. 深度学习(九) GAN 生成对抗网络 理论部分

    GAN 生成对抗网络 理论部分 前言 一.Pixel RNN 1.图片的生成模型 2.Pixel RNN 3.Pixel CNN 二.VAE(Variational Autoencoder) 1.VA ...

  3. 深度学习 GAN生成对抗网络-1010格式数据生成简单案例

    一.前言 本文不花费大量的篇幅来推导数学公式,而是使用一个非常简单的案例来帮助我们了解GAN生成对抗网络. 二.GAN概念 生成对抗网络(Generative Adversarial Networks ...

  4. 使用PyTorch构建GAN生成对抗网络源码(详细步骤讲解+注释版)02 人脸识别 下

    文章目录 1 测试鉴别器 2 建立生成器 3 测试生成器 4 训练生成器 5 使用生成器 6 内存查看 上一节,我们已经建立好了模型所必需的鉴别器类与Dataset类. 使用PyTorch构建GAN生 ...

  5. 使用PyTorch构建GAN生成对抗网络源码(详细步骤讲解+注释版)02 人脸识别 上

    文章目录 1 数据集描述 2 GPU设置 3 设置Dataset类 4 设置辨别器类 5 辅助函数与辅助类 1 数据集描述 此项目使用的是著名的celebA(CelebFaces Attribute) ...

  6. GAN (生成对抗网络) 手写数字图片生成

    GAN (生成对抗网络) 手写数字图片生成 文章目录 GAN (生成对抗网络) 手写数字图片生成 Discriminator Network Generator Network 简单版本的生成对抗网络 ...

  7. GAN -- 生成对抗网络

    GAN -- 生成对抗网络 生成对抗网络(英语:Generative Adversarial Network,简称GAN)是非监督式学习的一种方法,通过让两个神经网络相互博弈的方式进行学习.该方法由伊 ...

  8. 【轩说AI】生成模型(2)—— GAN生成对抗网络 + WGAN + Conditional GAN + Cycle GAN

    文章目录 GAN生成对抗网络(Generative Adversarial Network) 神经网络的本质就是一个函数,一个用于拟合的函数 生成模型面临的前所未有的问题 GAN解决这一问题的思想 O ...

  9. Pytorch:GAN生成对抗网络实现二次元人脸的生成

    github:https://github.com/SPECTRELWF/pytorch-GAN-study 网络结构 最近在疯狂补深度学习一些基本架构的基础,看了一下大佬的GAN的原始论文,说实话一 ...

  10. Pytorch:GAN生成对抗网络实现MNIST手写数字的生成

    github:https://github.com/SPECTRELWF/pytorch-GAN-study 个人主页:liuweifeng.top:8090 网络结构 最近在疯狂补深度学习一些基本架 ...

最新文章

  1. 利用BP神经网络教计算机识别语音特征信号(代码部分SLR)
  2. 内存屏障linux,Linux内存屏障
  3. Leetcode 240.剑指 Offer 06. 从尾到头打印链表 (每日一题 20210728)
  4. [SQL Server]树形结构的创建
  5. 错误:在keystone中无法找到默认角色user_第四章 keystone认证组件安装1
  6. 未来编程语言的走向_在编程方面我从失败走向成功的过程以及让我成功的原因
  7. IBatisNet 升级到 .Net Framework 4.0 时发现 IBatisNet 一小BUG
  8. 给妹子讲python-S01E01好用的列表
  9. 理解多线程(四)--原子量和原子操作
  10. gitbook生成目录toc
  11. PS入门(1-7) HSB色彩模式
  12. Windows 2008 R2 标准版 ie提示 当前安全设置不允许下载该文件 解决办法
  13. Noisy machines: understanding noisy NNs and enhancing robustness to analog hardware errors
  14. PostgreSQL B+树索引---页面删除
  15. Win7 IE浏览器的降级和升级
  16. Android APP中保持屏幕不自动灭屏的一种方法
  17. RK3229 android9.0 按刷机按键进入loader
  18. ZigBee-CC2530单片机 - 实现计算机串口通讯控制LED发光二极管
  19. mac book 华为C8815不能debug
  20. python中import string是什么意思_Python之string模块(详细讲述string常见的所有方法)...

热门文章

  1. Linux笔记(27)用户与组(8)groupadd命令
  2. 也许是得益于快播案,电子证物的程序正义问题终于有了保障
  3. JD消费者行为分析——漏斗转化
  4. 将POLY-YOLO代码跑起来的环境配置,poly-yolo训练自己的数据集
  5. Harbor: Harbor卸载安装及基本使用教程
  6. 分享一个开源的Springboot博客系统,界面简洁精致,拿来即用
  7. 找论文的几个实用网站
  8. 太阳能灭蚊灯方案评估
  9. Javascript对象相加
  10. 【Iass Saas Paas】