目录

Zhao J., Mathieu M. & LeCun Y. Energy-based generative adversarial networks. ICLR, 2017.

基于能量的一个解释.

主要内容

本文采用了与GAN不同的损失, 判别器\(D\)和生成器\(G\)分别最小化下面的损失:

\[\mathcal{L}_D (x, z) = D(x) + [m-D(G(z))]^+ \\
\mathcal{L}_G(z) = D(G(z))
\]

需要注意的是, 这里的判别器\(D\)的输出已经不是普通GAN中判别器的真假概率了, 而是能量, 能量越低,即\(D(x)\)越小, 越真.

用\(V(G, D)= \int_{x, z} \mathcal{L}_D(x, z) p_{data}(x) p_g(z) \mathrm{d}x\mathrm{d}z\), 用\(U(G,D) = \int_{z} \mathcal{L}_G(z) p_g(z)\mathrm{d}z\), 考虑如下纳什均衡

\[V(G^*, D^*) \le V(G^*, D), \quad \forall D \\
U(G^*, D^*) \le U(G, D^*), \quad \forall G.
\]

第一个需要考虑的问题是, 这样的纳什均衡解会有什么好的性质呢?

定理1: \((G^*, D^*)\)为纳什均衡解, 则\(p_{G^*}=p_{data}, \: a.e.\), \(V(G^*, D^*)=m\).

proof:

\[V(G, D) = \int_{x} D(x) p_{data} (x)\mathrm{d}x + \int_z [m-D(G(z))]^+ p_G(z) \mathrm{d}z = \int_{x} D(x) p_{data} (x)\mathrm{d}x + \int_x [m-D(x)]^+ p_G(x) \mathrm{d}x.
\]

故需要考虑

\[\min \quad D(x) p_{data}(x) + [m-D(x)]^+ p_{G^*}(x),
\]

可得

\[D(x) = \left \{
\begin{array}{ll}
m, & p_{data} < p_{G^*} \\
0, & p_{data} > p_{G^*} \\
[0, m], & else.
\end{array} \right.
\]

所以

\[\begin{array}{ll}
V(G^*, D^*) & = \int_{p_{data} < p_{G^*}} m p_{data}(x) \mathrm{d}x + \int_{p_{data} > p_{G^*}} mp_{G^*}(x)\mathrm{d}x + \int_{p_{data}=p_{G^*}} G^*(x) p_{data}(x) \mathrm{d}x \\
& \le m + m \int_{p_{data} < p_{G^*}} m [p_{data}(x) - p_{G^*}(x)] \mathrm{d}x \le m.
\end{array}
\]

另一方面,

\[U(G,D^*) = \int_x D^*(x) p_{G}(x) \mathrm{d} x \ge \int_{x} D^* (x) p_{G^*}(x) \mathrm{d}x
\]

所以

\[V(G^*, D^*) \ge \int_x (D^*(x) + [m-D^*(x)]^+)p_{G^*}(x) \mathrm{d}x \ge m.
\]

所以\(V(G^*, D^*)=m\), 且\(p_{G^*}=p_{data}, \: a.e.\)

下一个问题是, 这个纳什均衡存在吗, 文中的定理二给出了这个答案, 不过需要一个额外的条件, 这里不多赘述.

文中最后采用的是下面的框架:

即能量函数\(D\)的选择为

\[D(x) = \|Dec(Enc(x)) - x\|.
\]

EBGAN的更多相关文章

  1. Generative Adversarial Nets[EBGAN]

    0. 背景 Junbo Zhao等人提出的"基于能量的GAN"网络,其将判别器视为一个能量函数而不需要明显的概率解释,该函数可以是一个可训练的损失函数.能量函数是将靠近真实数据流形 ...

  2. EB-GAN系(Energy-based GAN)

    学习总结于国立台湾大学 :李宏毅老师 EB-GAN: Energy-based Generative Adversarial Network MA-GAN:MAGAN: Margin Adaptati ...

  3. (转) How to Train a GAN? Tips and tricks to make GANs work

    How to Train a GAN? Tips and tricks to make GANs work 转自:https://github.com/soumith/ganhacks While r ...

  4. Generative Adversarial Nets[BEGAN]

    本文来自<BEGAN: Boundary Equilibrium Generative Adversarial Networks>,时间线为2017年3月.是google的工作. 作者提出 ...

  5. Generative Adversarial Nets[content]

    0. Introduction 基于纳什平衡,零和游戏,最大最小策略等角度来作为GAN的引言 1. GAN GAN开山之作 图1.1 GAN的判别器和生成器的结构图及loss 2. Condition ...

  6. AI人工智能顶级实战工程师 课程大纲

    课程名称    内容    阶段一.人工智能基础 — 高等数学必知必会     1.数据分析    "a. 常数eb. 导数c. 梯度d. Taylore. gini系数f. 信息熵与组合数 ...

  7. TensorFlow练习24: GANs-生成对抗网络 (生成明星脸)

    http://blog.topspeedsnail.com/archives/10977 从2D图片生成3D模型(3D-GAN) https://blog.csdn.net/u014365862/ar ...

  8. (转) GAN应用情况调研

    本文转自: https://mp.weixin.qq.com/s?__biz=MzA5MDMwMTIyNQ==&mid=2649290778&idx=1&sn=9816b862 ...

  9. GANS 资料

    https://blog.csdn.net/a312863063/article/details/83512870 目 录第一章 初步了解GANs 3 1. 生成模型与判别模型. 3 2. 对抗网络思 ...

随机推荐

  1. 大数据学习day36-----flume02--------1.avro source和kafka source 2. 拦截器(Interceptor) 3. channel详解 4 sink 5 slector(选择器)6 sink processor

    1.avro source和kafka source 1.1 avro source avro source是通过监听一个网络端口来收数据,而且接受的数据必须是使用avro序列化框架序列化后的数据.a ...

  2. 大数据学习day14-----第三阶段-----scala02------1. 元组 2.类、对象、继承、特质 3.函数(必须掌握)

    1. 元组 映射是K/V对偶的集合,对偶是元组的最简单的形式,元组可以装着多个不同类型的值 1.1 特点 元组相当于一个特殊的数组,其长度和内容都可变,并且数组中可以装任何类型的数据,其主要用处就是存 ...

  3. 利用python代码获取文件特定的内容,并保存为文档

    说明:有段时间需要读取上百个文件的单点能(sp),就写了下面的代码(计算化学狗努力转行中^-^) import os.path import re # 1 遍历指定目录,显示目录下的所有文件名 def ...

  4. 【Reverse】每日必逆0x01

    附件:https://files.buuoj.cn/files/7458c5c0ce999ac491df13cf7a7ed9f1/SimpleRev 题解 查壳 64位ELF文件,无壳 IDApro处 ...

  5. 【leetocde】922. Sort Array By Parity II

    Given an array of integers nums, half of the integers in nums are odd, and the other half are even.  ...

  6. 容器之分类与各种测试(四)——unordered-multiset

    unordered-multiset是不定序关联式容器,其底部是通过哈希表实现功能. (ps:黑色框就是bucket,白色框即为bucket上挂载的元素) 为了提高查找效率,bucket(篮子)的数量 ...

  7. 如何让Linux 机器CPU使用率变高

    如何让Linux 机器CPU使用率变高 一.实现 1.单行命令搞定 for i in `seq 1 $(cat /proc/cpuinfo |grep "physical id" ...

  8. SpringBoot让测试类飞起来的方法

    单元测试是项目开发中必不可少的一环,在 SpringBoot 的项目中,我们用 @SpringBootTest 注解来标注一个测试类,在测试类中注入这个接口的实现类之后对每个方法进行单独测试. 比如下 ...

  9. 【Java】【IDE】【Jetbrain Idea】Intellij IDEA 快捷键整理

    [常规] Ctrl+Shift + Enter,语句完成 "!",否定完成,输入表达式时按 "!"键 Ctrl+E,最近的文件 Ctrl+Shift+E,最近更 ...

  10. 【Linux】【Shell】【text】awk

    基本用法:gawk [options] 'program' FILE ...             program: PATTERN{ACTION STATEMENTS}               ...