作者丨苏剑林

单位丨广州火焰信息科技有限公司

研究方向丨NLP,神经网络

个人主页丨kexue.fm

前不久笔者通过直接在对偶空间中分析的思路,提出了一个称为 GAN-QP 的对抗模型框架,它的特点是可以从理论上证明既不会梯度消失,又不需要 L 约束,使得生成模型的搭建和训练都得到简化。

GAN-QP 是一个对抗框架,所以理论上原来所有的 GAN 任务都可以往上面试试。前面不用L约束又不会梯度消失的GAN,了解一下?一文中我们只尝试了标准的随机生成任务,而这篇文章中我们尝试既有生成器、又有编码器的情况:BiGAN-QP

BiGAN与BiGAN-QP

注意这是 BiGAN,不是前段时间很火的 BigGAN,BiGAN 是双向 GAN(Bidirectional GAN),提出于 Adversarial Feature Learning [1] 一文,同期还有一篇非常相似的文章叫做 Adversarially Learned Inference [2],提出了叫做 ALI 的模型,跟 BiGAN 差不多。

总的来说,它们都是往普通的 GAN 模型中加入了编码器,使得模型既能够具有普通 GAN 的随机生成功能,又具有编码器的功能,可以用来提取有效的特征。把 GAN-QP 这种对抗模式用到 BiGAN 中,就得到了 BiGAN-QP。

话不多说,先来上效果图(左边是原图,右边是重构):

▲ BiGAN-QP重构效果图

这是将 256 x 256 x 3 的图片降维到 256 维度,然后再重构出来的。可以看到,整体的重构效果是不错的,没有普通自编码器的模糊感。有一些细节缺失,相比 IntroVAE [3] 是差了一点,不过这是模型架构和调参的问题了,并不是我擅长的。不管怎样,这个效果图应该可以表明 BiGAN-QP 是可以跑通的,而且效果还行。

本文内容已经更新到 GAN-QP 的原论文,读者可以长按识别下方二维码下载最新版本。

BiGAN-QP简明推导

其实相比 GAN,BiGAN 的推导非常简单,只需要将原来的单输入 x 换成双输入 (x,z) 就行了。同样,有了 GAN-QP 基础的话,所谓 BiGAN-QP,也是非常简单的。具体来说,原来 GAN-QP 是这样的:

现在变成了:

理论上就这样行了,这就是 BiGAN-QP。但实际上这样很难学习到一个好的双向映射,因为这相当于从无数可能的映射中自动搜索出一个双向映射,比较困难。所以我们还需要一些“引导项”,我们用两个 mse 误差作为引导项:

其实生成器的三项 loss 都很直观,ΔT 是生成的图像更加真实,是希望能重构隐变量空间,是希望能重构显变量空间。后两项不能太大,尤其是最后一项,太大会导致图像的模糊。

其中这两个正则项可以看成是 G(z) 与 z 的互信息、x 与 E(x) 的互信息的一个上界,因此从信息的角度看,这两个正则项是希望 x,z 之间的互信息越大越好。相关的讨论可以参考 InfoGAN [4] 论文,这两个正则项代表着它也属于 InfoGAN 的特例。所以完整来说,这应该是一个 Bi-Info-GAN-QP。

互信息项可以在一定程度上稳定 GAN 的训练过程,减少模型坍缩(mode collapse)的可能性,因为一旦模型坍缩,那么互信息就不会大了。换句话说,如果模型坍缩,那么重构就不大可能了,重构 loss 会很大。

实验表明,再做一些小的调整,效果会更好。这个小的调整源于:两个 mse 项耦合起来还是过于强大了(loss 的具体值不一定大,但是梯度很大),导致模型还是有生成模糊图像的倾向,所以需要停止掉一半的梯度,变为:

Gng 和 Eng 指的是强行让这部分的梯度为 0,一般的框架都有这个算子,直接调用即可。这就是本文最终的 BiGAN-QP 模型。

代码与效果图

代码也已经补充到 Github 了:

https://github.com/bojone/gan-qp/tree/master/bigan-qp

再来一些效果图(左边是原图,右边是重构):

▲ BiGAN-QP重构效果图2

可以看到,重构并不模糊,而且很重要的一个特点是:因为是降维重构,模型并不是(也无法做到)学会了一个逐像素对应的一一映射,而是一个整体看上去差不多的清晰的重构结果。

比如我们看到第一行的第一张和最后一行的第二张,模型基本上把人重构出来了,但有趣的是眼镜,我们发现模型确实也重构了眼镜但是换了另外一个“款式”的眼镜。我们甚至可以认为,模型已经学到了“眼镜”这个概念,只不过是降维重构,隐变量的表达能力有限,所以尽管模型知道那是眼镜,但不能重构出一模一样的眼镜出来,就只好换一款常见的眼睛了。

这是普通的 VAE 所要求的“逐点一一对应重构”所无法实现的,“逐点一一对应重构”也是造成 VAE 模糊的主要原因了。如果要完全可逆重构,只有像 Glow 那样的可逆模型才有可能做到了。

另外,又有编码器又有生成器,我们就可以玩玩真实图片的隐变量插值了(左一、右一是真实图片,左二、右二是重构图片,其余是插值图):

▲ BiGAN-QP真实图片插值

还可以看看 BiGAN-QP 眼中的相似图片(算出所有真实图片的隐变量,然后用欧氏距离或者 cos 值算相似度,下图为欧氏距离的结果),第一行为输入,后两行为相似图片:

▲ BiGAN-QP眼中的相似

欢迎使用与分享

前面已经提到,GAN-QP 是一个理论完备的对抗框架,理论上所有的 GAN 任务都可以尝试一下。所以,如果读着您手头上正好有 GAN 任务,不妨尝试一下,然后你就可以去掉 L 约束,去掉谱归一化甚至去掉很多正则项,还不用担心梯度消失了。GAN-QP 就是笔者致力于去掉 GAN 各种超参数所得的结果。

如果你有新的基于 GAN-QP 的应用结果,欢迎在此分享。

参考文献

[1] Donahue, Jeff, Krähenbühl, Philipp, and Darrell, Trevor. Adversarial feature learning. In ICLR, 2017.

[2] Dumoulin, Vincent, Belghazi, Ishmael, Poole, Ben, Mastropietro, Olivier, Lamb, Alex, Arjovsky, Martin, and Courville, Aaron. Adversarially learned inference. In ICLR, 2017.

[3] H Huang, R He, Z Sun, T Tan. IntroVAE: Introspective Variational Autoencoders for Photographic Image Synthesis. Advances in Neural Information Processing Systems, 52-63.

[4] X Chen, Y Duan, R Houthooft, J Schulman, I Sutskever, P Abbeel. InfoGAN: Interpretable Representation Learning by Information Maximizing Generative Adversarial Nets. In NIPS 2016.

点击以下标题查看作者其他文章:

  • 变分自编码器VAE:原来是这么一回事 | 附开源代码

  • 再谈变分自编码器VAE:从贝叶斯观点出发

  • 变分自编码器VAE:这样做为什么能成?

  • 从变分编码、信息瓶颈到正态分布:论遗忘的重要性

  • 深度学习中的互信息:无监督提取特征

  • 全新视角:用变分推断统一理解生成模型

  • 细水长flow之NICE:流模型的基本概念与实现

  • 细水长flow之f-VAEs:Glow与VAEs的联姻

  • 深度学习中的Lipschitz约束:泛化与生成模型

#投 稿 通 道#

 让你的论文被更多人看到 

如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢? 答案就是:你不认识的人。

总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。

PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学习心得技术干货。我们的目的只有一个,让知识真正流动起来。

来稿标准:

• 稿件确系个人原创作品,来稿需注明作者个人信息(姓名+学校/工作单位+学历/职位+研究方向)

• 如果文章并非首发,请在投稿时提醒并附上所有已发布链接

• PaperWeekly 默认每篇文章都是首发,均会添加“原创”标志

? 投稿邮箱:

• 投稿邮箱:hr@paperweekly.site

• 所有文章配图,请单独在附件中发送

• 请留下即时联系方式(微信或手机),以便我们在编辑发布时和作者沟通

?

现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧

关于PaperWeekly

PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」,小助手将把你带入 PaperWeekly 的交流群里。

▽ 点击 | 阅读原文 | 查看作者博客

BiGAN-QP:简单清晰的编码 生成模型相关推荐

  1. SOLIDWORKS如何简单高效地自动生成模型视图和标注

    模型视图是零件或装配体的工程图视图,当我们设计完成后,需要下发到生产车间进行生产时,往往就需要有一份详细且直观的工程图来指导生产加工. 你在工作中是否会经常思考这些问题? 1.激活模型视图后,为什么要 ...

  2. 简单的UTF8编码生成

    用记事本建一个文件,用editplus打开,并转成UTF8格式 然后写中文字符 然后用ultraEdit打开,切换到16机制模式即可

  3. 大规模计算时代:深度生成模型何去何从

    ©PaperWeekly 原创 · 作者|Chunyuan Li 单位|Microsoft Research Researcher 研究方向|深度生成模型 人工智能的核心愿望之一是开发算法和技术,使计 ...

  4. EasyNLP 中文文图生成模型带你秒变艺术家

    导读 宣物莫大于言,存形莫善于画. --[晋]陆机 多模态数据(文本.图像.声音)是人类认识.理解和表达世间万物的重要载体.近年来,多模态数据的爆炸性增长促进了内容互联网的繁荣,也带来了大量多模态内容 ...

  5. EasyNLP中文文图生成模型带你秒变艺术家

    作者:汪诚愚.刘婷婷 导读 宣物莫大于言,存形莫善于画. --[晋]陆机 多模态数据(文本.图像.声音)是人类认识.理解和表达世间万物的重要载体.近年来,多模态数据的爆炸性增长促进了内容互联网的繁荣, ...

  6. [work] 生成模型和判别模型的理解

    转载自:https://blog.csdn.net/zouxy09/article/details/8195017 https://blog.csdn.net/lk7688535/article/de ...

  7. 【生成模型】关于无监督生成模型,你必须知道的基础

    大家好,小米粥销声匿迹了很长一段时间,今天又杀回来啦!这次主要是介绍下生成模型的相关内容,尤其是除了GAN之外的其他生成模型,另外应部分读者要求,本系列内容增添了代码讲解,希望能使大家获益,更希望大家 ...

  8. 机器学习中的生成模型与判别模型

    1.概述 在机器学习中,对于有监督学习,它的任务就是要学习一个模型,应用这个模型,对给定的输入预测相应的输出.监督学习方法可以分为生成方法(generative approach)和判别方法(disc ...

  9. 生成模型和判别模型的解释与举例

    文章目录 前言 一.生成模型和判别模型的概念? 二.个人理解 三,生成模型和判别模型举例 前言 在有监督学习中,不管是机器学习算法还是深度学习算法都可以分为生成学习和判别学习两种. 一.生成模型和判别 ...

最新文章

  1. 面试必问的 CAS ,要多了解
  2. 20张图,带你搞懂高并发中的线程与线程池!
  3. c语言08,标准C语言08_01.doc
  4. jquery ui tabs详解(中文) 【转载】
  5. 大数据技术之kafka (第 3 章 Kafka 架构深入) 分区策略在分析
  6. Cgroup 好文集合
  7. TCP/IP之免费arp分析
  8. 非因解读|Digital Spatial Profiler 新一代高维度空间组学技术
  9. VBA-save as xlsm
  10. 查找mysql.sock_找不到mysql.sock,我在哪里可以找到它?
  11. 用IE浏览器打开网址https显示不能访问怎么办
  12. 使用cmd打开任意软件
  13. 最新解决谷歌浏览器崩溃的方法
  14. 7-24 猜数字游戏
  15. Hack the box靶机 October
  16. 一份机器学习的自白书
  17. 图像去模糊(维纳滤波)
  18. catia锥齿轮cad三视图_catia直齿圆锥齿轮有限元分析
  19. 【行为管理篇】01. 恢复出厂及登录 ❀ 深信服上网行为管理
  20. 咱们老百姓,今儿个真高兴

热门文章

  1. 采药2_纪中2540_dp
  2. 重温SQL——行转列,列转行
  3. opentesty--luasocket 安装
  4. IOS-关闭(退)键盘事件--转
  5. jtree+mysql_Swing: JTree显示 图标 + 文字 | 学步园
  6. kuka程序备份_那智机器人系统备份步骤
  7. java collection join_java – @ElementCollection @CollectionTable在一对多映射中
  8. python 读取文件
  9. 云大计算机专业录取分数线,2016年云南大学艺术类专业录取分数线
  10. 父元素设置overflow: overlay; 或 overflow: scroll; 或 overflow: auto; 如果子元素超出父元素内容,父元素会被子元素超出部分撑大至子元素同样大小