生成对抗网络(Generative Adversarial Networks,GANs),由2014年还在蒙特利尔读博士的Ian Goodfellow引入深度学习领域。2016年,GANs热潮席卷AI领域顶级会议,从ICLR到NIPS,大量高质量论文被发表和探讨。Yann LeCun曾评价GANs是“20年来机器学习领域最酷的想法”。

Generative Adversarial Nets(GAN)

Generative Adversarial Networks论文提出了一种通过对抗过程来评估生成模型。其训练两个模型:仿照原始数据分布生成数据的模型G和评估数据来源(原始数据/生成数据)的模型D。训练G的目标是最大化D犯错的概率,训练D的目标是最大化区分真实训练样本与G生成的样本的能力。

如果能够知道训练样本的分布\(p(x)\),那么就可以在分布中随机采样得到新样本,大部分的生成式模型都采用这种思路,GAN则是在学习从随机变量z到训练样本x的映射关系,其中随机变量可以选择服从正太分布,那么就能得到一个由多层感知机组成的生成网络\(G(z;\theta_g)\),网络的输入是一个一维的随机变量,输出是一张图片。

GAN的优化是一个极小极大博弈问题,公式如下:
\[
\underset{G}{\min} \: \underset{D}{\max}V(D,G) =\mathbb E_{x\sim p_{data}(x)}[logD(x)]+\mathbb E_{z\sim p_{z}(z)}[log(1-D(G(z)))]
\]
优化这个函数,使\(p_z(x)\)接近\(p_{data}\).下面首先去掉期望符号:
\[
\begin{align}
V(G,D)&=\int_x p_{data}(x)\log(D(x))dx+\int_zp_z(z)\log(1-D(g(z)))dz \\
&=\int_x [p_{data}(x)\log(D(x))+p_g(x)\log(1-D(x))]dx
\end{align}
\]
先固定G,求\(\underset{D}{\max}V(D,G)\),令其导数等于0,求得D的最优解
\[
D^*_G(x)={p_{data}(x)\over p_{data}(x)+p_g(x)}
\]
现在固定D,优化G:将\(D^*_G\)带入目标函数。
\[
\begin{align}
\underset{G}\min V(G,D^*_G) &= \int_x [p_{data}(x)\log{p_{data}(x)\over p_{data}(x)+p_g(x)}+p_g(x)\log{p_g(x)\over p_{data}(x)+p_g(x)}]dx \\
&= \mathbb E_{x\sim p_{data}}[\log{p_{data}(x)\over p_{data}(x)+p_g(x)}]+\mathbb E_{x\sim p_g}[\log{p_g(x)\over p_{data}(x)+p_g(x)}] \\
&= -\log 4+KL(p_{data}\|{p_{data}+p_g\over 2})+KL(p_g\|{p_{data}+p_g\over 2}) \\
&= -\log 4+2JS(p_{data}\|p_g)
\end{align}
\]
其中KL散度:\(KL(P\|Q)=\mathbb E_{x\sim P}\log{P\over Q}=\int_xP(x)\log{P(x)\over Q(x)}dx\)

JS散度:\(JS(P\|Q)={1\over 2}KL(P\|{P+Q\over 2})+{1\over 2}KL(Q\|{P+Q\over 2})\)

JS散度具有对称性,而KL没有。

只要P和Q没有一点重叠或者重叠部分可忽略,JS散度就固定是常数,而这对于梯度下降方法意味着——梯度为0!此时对于最优判别器来说,生成器得不到梯度信息;即使对于接近最优的判别器来说,生成器也有很大机会面临梯度消失的问题。

参考 WGAN的介绍

f-GAN

在GAN中可以使用任意的f-divergency,相关论文f-GAN(Sebastian Nowozin, Botond Cseke, Ryota Tomioka, “f-GAN: Training Generative Neural Samplers using Variational Divergence Minimization”, NIPS, 2016)

f-divergence

P和Q是两个分布,p(x),q(x)是x的分布概率
\[
D_f(P||Q)=\int_x q(x)f({p(x)\over q(x)})dx
\]
其中f是凸函数且f(1)=0,\(D_f(P||Q)\)衡量了P和Q之间的距离.

当\(\forall x,p(x)=q(x)\)时,\(D_f(P||Q)\)具有最小值0.

当\(f(x)=x\log x\)时,\(D_f(P||Q)=\int_xp(x)\log({p(x)\over q(x)})\),即KL divergence.

当\(f(x)=-\log x\)时,\(D_f(P||Q)=\int_xq(x)\log({q(x)\over p(x)})\),即reverse KL divergence.

当\(f(x)=(x-1)^2\)时,\(D_f(P||Q)=\int_x{(p(x)-q(x))^2\over q(x)}dx\)为Chi Square divergence.

Fenchel Conjugate

每个凸函数f都有一个与之相对的conjugate function f*:

\(f^* (t)=\max_{x\in dom(f)}\{xt-f(x)\}\),且(f ) = f.

\(f(x)=\max_{t\in dom(f^*)}\{xt-f^*(t)\}\),带入\(D_f(P||Q)\)得:
\[
\begin{align}
D_f(P||Q) &=\int_x q(x)f({p(x)\over q(x)})dx \\
&=\int_xq(x)(\max_{t\in dom(f^*)}\{{p(x)\over q(x)}t-f^*(t)\})dx \\
&=\max_D\int_x p(x)D(x)dx-\int_x q(x)f^*(D(x))dx \\
&\text{(t=D(x))}
\end{align}
\]
因此GAN中
\[
D_f(P_{data}\|P_G)=\max_D\{E_{x\sim P_{data}}[D(x)]-E_{x\sim P_G}[f^*(D(x))]\}
\]
可以使用任何的f-divergence,如JS,Jeffrey,Pearson.

WGAN

原始版本:weight clipping,改进版本:gradient penalty.

论文:

  • Martin Arjovsky, Soumith Chintala, Léon Bottou, Wasserstein GAN, arXiv preprint, 2017
  • Ishaan Gulrajani, Faruk Ahmed, Martin Arjovsky, Vincent Dumoulin, Aaron Courville,“Improved Training of Wasserstein GANs”, arXiv preprint, 2017

主要思想:使用Earth Mover's Distance(Wasserstein Distance)来评估两个分布之间的距离.推土机距离表示将一个分布搬运变为另一个分布的最小搬运的量.

之前GAN所采用的JS divergence的缺点是当两个分布没有交集时,距离是0,梯度为0,网络很难学习.Earth Mover's Distance便可以解决这个问题.此时网络能够持续学习,但为了防止梯度爆炸,需要weight clipping等手段.

对抗样本(adversarial examples)

14年的时候Szegedy在研究神经网络的性质时,发现针对一个已经训练好的分类模型,将训练集中样本做一些细微的改变会导致模型给出一个错误的分类结果,这种虽然发生扰动但是人眼可能识别不出来,并且会导致误分类的样本被称为对抗样本,他们利用这样的样本发明了对抗训练(adversarial training),模型既训练正常的样本也训练这种自己造的对抗样本,从而改进模型的泛化能力[1]。如下图所示,在未加扰动之前,模型认为输入图片有57.7%的概率为熊猫,但是加了之后,人眼看着好像没有发生改变,但是模型却认为有99.3%的可能是长臂猿。

对抗样本跟生成式对抗网络没有直接的关系,对抗网络是想学样本的内在表达从而能够生成新的样本,但是有对抗样本的存在在一定程度上说明了模型并没有学习到数据的一些内部表达或者分布,而可能是学习到一些特定的模式足够完成分类或者回归的目标而已。

GAN生成的图片能否用于CNN训练?

现在来说,应当不可以。由于GAN是从较小的分布中采样生成的,是真实世界的极小的一部分,所以拿来训练没有广泛的适用性。另外,当前的GAN生成较大的图片比较困难(32x32以上)。

参考资料

生成式模型之 GAN的更多相关文章

  1. 生成式对抗网络(GAN)实战——书法字体生成练习赛

    https://www.tinymind.cn/competitions/ai 生成式对抗网络(GAN)是近年来大热的深度学习模型. 目前GAN最常使用的场景就是图像生成,作为一种优秀的生成式模型,G ...

  2. 生成式对抗网络GAN 的研究进展与展望

    生成式对抗网络GAN的研究进展与展望.pdf 摘要: 生成式对抗网络GAN (Generative adversarial networks) 目前已经成为人工智能学界一个热门的研究方向. GAN的基 ...

  3. 预测学习、深度生成式模型、DcGAN、应用案例、相关paper

    我对GAN"生成对抗网络"(Generative Adversarial Networks)的看法: 前几天在公开课听了新加坡国立大学[机器学习与视觉实验室]负责人冯佳时博士在[硬 ...

  4. 【神经网络与深度学习】生成式对抗网络GAN研究进展(五)——Deep Convolutional Generative Adversarial Nerworks,DCGAN

    [前言]      本文首先介绍生成式模型,然后着重梳理生成式模型(Generative Models)中生成对抗网络(Generative Adversarial Network)的研究与发展.作者 ...

  5. 机器学习 —— 基础整理(三)生成式模型的非参数方法: Parzen窗估计、k近邻估计;k近邻分类器

    本文简述了以下内容: (一)生成式模型的非参数方法 (二)Parzen窗估计 (三)k近邻估计 (四)k近邻分类器(k-nearest neighbor,kNN) (一)非参数方法(Non-param ...

  6. AI 判别式模型和生成式模型

    判别式模型(discriminative model) 生成式模型(generative model) 对于输入x,类别标签y:产生式模型估计它们的联合概率分布P(x,y)判别式模型估计条件概率分布P ...

  7. 生成式模型 VS 判别式模型

    1 定义 1.1 生成式模型 生成式模型(Generative Model)会对x和y的联合分布p(x,y)建模,然后通过贝叶斯公式来求得 p(yi|x),然后选取使得p(yi|x) 最大的 yi,即 ...

  8. 判别式模型 vs. 生成式模型

    1. 简介 生成式模型(generative model)会对\(x\)和\(y\)的联合分布\(p(x,y)\)进行建模,然后通过贝叶斯公式来求得\(p(y|x)\), 最后选取使得\(p(y|x) ...

  9. 产生式模型(生成式模型)与判别式模型<转载>

    转自http://dongzipnf.blog.sohu.com/189983746.html 产生式模型与判别式模型 产生式模型(Generative Model)与判别式模型(Discrimiti ...

随机推荐

  1. Spring cloud oauth2.0 access_token 永不失效设置方法

    在AuthorizationServerConfigurerAdapter,重写一个TokenServices,注意这里的@Primary 非常重要,否则会有3个同类型的Bean,无法注入,会抛出以下 ...

  2. AndroidStudio中导入module(简单版)

    1.把要导入成Mudle的项目修改成符合Library的格式 修改该项目中bulid.gradle文件中第一行代码 把 apply plugin: 'com.android.application' ...

  3. 使用IntelliJ IDEA 和 Maven创建Java Web项目

    1. Maven简介 相对于传统的项目,Maven 下管理和构建的项目真的非常好用和简单,所以这里也强调下,尽量使用此类工具进行项目构建, 它可以管理项目的整个生命周期. 可以通过其命令做所有相关的工 ...

  4. nginx笔记3-负载均衡算法

    1.nginx测试:先从官网下载nginx 官网网址为:http://nginx.org/  然后找到stable version的版本下载,因为这版本是最稳定的,不要去下载最新,因为不稳定,如下图: ...

  5. 从零开始学习前端JAVASCRIPT — 14、闭包与继承

    一.闭包 1 . 概念:闭包就是能够读取其他函数内部变量的函数.在JS中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解为”定义在一个函数内部的函数”. 2 . 闭包的特点 1)可以读取 ...

  6. probabilistic robotics_Kalman filter(一)

    码农生活告一段落,继续.... 多元正态分布 协方差矩阵,为正定对称矩阵.det表示行列式 协方差反应随机样本变量各分量之间的相关性. 当变量的假设模型不一致时,不适合用高斯滤波. 叠加高斯噪声的线性 ...

  7. UnicodeDecodeError: 'utf-8' codec can't decode byte 0xce in position 52: invalid continuation byte

    代码: df_w = pd.read_table( r'C:\Users\lab\Desktop\web_list_n.txt', sep=',', header=None) 当我用pandas的re ...

  8. [JCIP笔记] (一)多线程的起源

    在很久很久以前,那时的计算机还没有操作系统这种东西,所以只能有一个程序,从头到尾地跑.于是这个程序要负责使用所有的资源,还得响应外部请求.想想这个程序得多复杂啊--为了做成一件事,可能要先把内存啊.I ...

  9. (七)java类和对象

    一个类定义一个新的数据类型,也就是定义了一个逻辑框架,定义了它的成员之间的关系.可以通过这种类型来声明该类型的对象,通过new关键词来实例化对象,也就是为该类型的对象动态的分配物理内存空间,这个分配过 ...

  10. Java中的StringBuffer

    Java中的StringBuffer /** * */ package com.you.model; /** * @author YouHaidong * */ public class StrFoo ...