参考资料:

1、https://github.com/dragen1860/TensorFlow-2.x-Tutorials

2、《Adversarial Feature Learning》

本次是对阅读BiGAN论文的一个记录,包含我自己对于BiGAN的一些理解

因为BiGAN在代码实现上没有很大的不同,甚至类似经典GAN(详见:https://www.cnblogs.com/DAYceng/p/16365562.html),所以这里不做介绍

参考1中有源码

依然是免责声明:水平有限,有错误请各位指正,谢谢了

注:图片刷不出来可能需要fq,最近jsdelivr代理好像挂了。

双向GAN网络(BiGAN)

BiGAN相较于GAN更多的是结构上的改进,除了标准GAN框架中的生成器G,BiGAN还新增了一个编码器E

结构

整个结构包括三部分:Encode网络(编码器E),G网络(生成器G),D网络(判别器D)

  • Encode网络,提取原始图片的隐变量

  • G网络,将噪声生成图片

  • D网络,判断这个数据对(原始图片和隐变量 生成图片和噪声)是来自编码器E还是生成器G

根据论文的说法:“编码器E将数据x映射到潜在表征z”

结合结构图,“潜在表征z”应该对应E(x),也就是“真实数据在对应噪声域下的映射

文章认为,编码器E给出的对应编码具有某种语义特征,因此E(x)可以被认为是数据x的某种标签

判别器D在判断什么?

这个问题刚开始想会有点奇怪,因为经典的GAN是去判别“输入数据是不是真实数据”。

而BiGAN中不太一样,这里的输入变成了数据对(【数据,数据在噪声域下的变换】)

并且在BiGAN中,真实数据从始至终没有直接输入过判别器D,也就是说判别器D从来也没见过真实数据

判别器D所学习到的真实数据的特征都是编码器E“告诉”它的

而编码器E在干什么呢?它在学习(提取)真实数据的特征,这些特征有可能是更高维度的更抽象的特征,有可能有助于刻画原来的真实数据,有可能也没什么效果。但是编码器E是不知道这些的,它只有尽可能的去提取特征(这就是我们训练编码器E的过程)

并且由于我们的生成器G也会生成图片,这些图片也有对应的所谓特征,因为假图片是由随机噪声生成的,那么随机噪声就是这些假图片的特征。因此,编码器E提取的真实图片的特征也需要落到与随机噪声相同的空间域内,这样才可以去进行判别。(计算相似度)

那么现在可以总结一下了:

BiGAN中的判别器D在"区分"当前的输入究竟是编码器E给的真实数据的特征,还是此时生成器G用来生成假图片的随机噪声

编码器E与生成器G的目的

明白了判别器D在做什么,现在要理解一下编码器E和生成器G在干嘛了

我们会很自然地类比经典GAN得出结论:编码器E和生成器G在尽可能的欺骗判别器D

为了达到这个目的,编码器E与生成器G需要不断接近对方的形式,对应原文中的就是:

we will both argue intuitively and formally prove that the encoder and generator must learn to invert one another in order to fool the BiGAN discriminator.

"编码器E与生成器G需要学会互相反转"

通俗一点解释就是:对于编码器E来说,虽然它真的是从真实数据中提取特征,但在不断训练的过程中,它也逐渐学习到了生成器G生成图片的特征,所以编码器E会故意模仿假图片的特征输送给判别器D,测试判别器能否分辨出来。

这就是BiGAN的结构图为什么把编码器E和生成器G的输入输出框在一起的原因,因为他们之间互相联系(是有可能互换的)

【生成对抗网络学习 其三】BiGAN论文阅读笔记及其原理理解的更多相关文章

  1. 【生成对抗网络学习 其一】经典GAN与其存在的问题和相关改进

    参考资料: 1.https://github.com/dragen1860/TensorFlow-2.x-Tutorials 2.<Generative Adversarial Net> ...

  2. 生成对抗网络(GAN)相关链接汇总

    1.基础知识 创始人的介绍: “GANs之父”Goodfellow 38分钟视频亲授:如何完善生成对抗网络?(上) “GAN之父”Goodfellow与网友互动:关于GAN的11个问题(附视频) 进一 ...

  3. 生成对抗网络(Generative Adversarial Network)阅读笔记

    笔记持续更新中,请大家耐心等待 首先需要大概了解什么是生成对抗网络,参考维基百科给出的定义(https://zh.wikipedia.org/wiki/生成对抗网络): 生成对抗网络(英语:Gener ...

  4. 深度学习-生成对抗网络GAN笔记

    生成对抗网络(GAN)由2个重要的部分构成: 生成器G(Generator):通过机器生成数据(大部分情况下是图像),目的是“骗过”判别器 判别器D(Discriminator):判断这张图像是真实的 ...

  5. 深度学习框架PyTorch一书的学习-第七章-生成对抗网络(GAN)

    参考:https://github.com/chenyuntc/pytorch-book/tree/v1.0/chapter7-GAN生成动漫头像 GAN解决了非监督学习中的著名问题:给定一批样本,训 ...

  6. 人工智能中小样本问题相关的系列模型演变及学习笔记(二):生成对抗网络 GAN

    [说在前面]本人博客新手一枚,象牙塔的老白,职业场的小白.以下内容仅为个人见解,欢迎批评指正,不喜勿喷![握手][握手] [再啰嗦一下]本文衔接上一个随笔:人工智能中小样本问题相关的系列模型演变及学习 ...

  7. 不到 200 行代码,教你如何用 Keras 搭建生成对抗网络(GAN)【转】

    本文转载自:https://www.leiphone.com/news/201703/Y5vnDSV9uIJIQzQm.html 生成对抗网络(Generative Adversarial Netwo ...

  8. 生成对抗网络(Generative Adversarial Networks,GAN)初探

    1. 从纳什均衡(Nash equilibrium)说起 我们先来看看纳什均衡的经济学定义: 所谓纳什均衡,指的是参与人的这样一种策略组合,在该策略组合上,任何参与人单独改变策略都不会得到好处.换句话 ...

  9. GAN实战笔记——第七章半监督生成对抗网络(SGAN)

    半监督生成对抗网络 一.SGAN简介 半监督学习(semi-supervised learning)是GAN在实际应用中最有前途的领域之一,与监督学习(数据集中的每个样本有一个标签)和无监督学习(不使 ...

随机推荐

  1. IDEA 2022.2.1 Beta 2发布:新增支持Java 18、增强JUnit 5的支持

    近日,IDEA 2022.1的Beta 2版本发布了!下面我们一起来看看对于我们Java开发者来说,有哪些重要的更新内容. Java增强 随着Java 18的正式发布,IDEA也在该版本中迅速跟进.目 ...

  2. 美团动态线程池实践思路开源项目(DynamicTp),线程池源码解析及通知告警篇

    大家好,这篇文章我们来聊下动态线程池开源项目(DynamicTp)的通知告警模块.目前项目提供以下通知告警功能,每一个通知项都可以独立配置是否开启.告警阈值.告警间隔时间.平台等,具体代码请看core ...

  3. select下拉框获取下拉项值的问题

    新发现: select option如果里面不写value值,默认提交<option></option>中间的值. 切记:真正提交的值写在value属性里面,option之间只 ...

  4. GRPC-go版本

    GRPC-go版本 1.安装GO,protobuf 只适合有梯子的 GO的安装没必要说了 protobuf :https://github.com/protocolbuffers/protobuf/r ...

  5. NodeJs学习日报day6——路由模块

    const express = require('express') const app = express() app.get('/user', function(req, resp) { resp ...

  6. 【直播回顾】OpenHarmony知识赋能第四期第二课——GPIO驱动开发

    3月17日晚上19点,​知识赋能第四期直播的第二节课<OpenHarmony标准系统HDF框架之GPIO驱动开发>​,在OpenHarmony开发者成长计划社群内成功举办. 本期课程,由​ ...

  7. 3.SRE.操作手册:基础篇

    SRE的根基起码应该包括:SLO.监控.告警.减少琐事和简单化. SLO(服务质量目标):用于描述服务可靠性的程度. SRE的职责并不只是将"所有工作"都自动化,并保持" ...

  8. 计算机系统5-> 计组与体系结构2 | MIPS指令集(上)| 指令系统

    系列的上一篇计算机系统4-> 计组与体系结构1 | 基础概念与系统评估,学习了一些计算机的基础概念,将一些基本的计算机组成部分的功能和相互联系了解了一下,其中很重要的一个抽象思想就是软硬件的接口 ...

  9. 『现学现忘』Git基础 — 8、Git创建本地版本库

    目录 1.Git版本库介绍 2.创建本地版本库 场景一:创建一个空的本地版本库. 场景二:项目中已存在文件时,创建该项目的本地版本库. 场景三:在GitHub网站上创建仓库,克隆到本地. 1.Git版 ...

  10. 从零搭建Pytorch模型教程(三)搭建Transformer网络

    ​ 前言 本文介绍了Transformer的基本流程,分块的两种实现方式,Position Emebdding的几种实现方式,Encoder的实现方式,最后分类的两种方式,以及最重要的数据格式的介绍. ...