目录

Chen X., Duan Y., Houthooft R., Schulman J., Sutskever I., Abbeel P. InfoGAN: Interpretable Representation Learning by Information Maximizing Generative Adversarial Nets. arXiv preprint arXiv 1606.03657, 2016.

既然都能生成图片了, 那至少得能够抓住数据的特征信息, 解耦.

主要内容

一些GAN的输入会包括\((z, c)\), 其中\(z\)是噪声, 而\(c\)是一些别的信息, 比如标签信息, 一个很自然的问题是, 怎么保证GAN会利用这部分信息呢? 换言之, 怎么保证生成器生成的图片\(G(z, c)\)与\(c\)有不可否认的关联呢?

衡量两个随机变量关联性的指标, 经典的便是互信息

\[I(X, Y) = H(X) - H(X|Y),
\]

在这个问题里就是

\[I(c,G(z,c)) = H(c) - H(c|G(z,c)).
\]

直接估计互信息是很困难的, 利用变分方法可以得到一个有效的下界(这也是VAE的灵魂):

\[\begin{array}{ll}
I(c,G(z,c)) & = \mathbb{E}_{x \sim P_G} \mathbb{E}_{P(c|x)} \log P(c|x) + H(c) \\
& = \mathbb{E}_{x \sim P_G} [\mathrm{KL}(P(c|x) \| Q(c|x)) + \mathbb{E}_{P(c|x)}\log Q(c|x)] + H(c) \\
& \ge \mathbb{E}_{x \sim P_G}\mathbb{E}_{P(c|x)}\log Q(c|x) + H(c)=: L_{I}(G, Q).
\end{array}
\]

其中\(Q\)是我们用来近似\(P(c|x)\)的. 上述还是存在一个问题, 即\(P(c|x)\)依然无法处理, 不过注意到

\[L_I(G, Q) = \mathbb{E}_{c \sim P(c), x \sim G(z, c)}[\log Q(c|x)] + H(c).
\]

我们可以给出一个合理的先验分布.

当\(c \in \mathcal{C}\)是离散的时候, 令\(Q\)的输出向量的长度为\(|\mathcal{C}|\), 可直接令该向量的softmax后的向量为概率向量;

当\(c\)是连续的时候, 倘若\(x=G(z, c^*)\), 则可以假设\(Q(c|x) \sim \mathcal{N}(c^*, \sigma^2 I)\), 此时

\[\log Q(c|x) \propto \log \exp(-\frac{\|c-c^*\|_2^2}{2\sigma^2}) \propto -\|c-c^*\|_2^2.
\]

最后的损失便为

\[\min_{G, Q} \max_D V_{\mathrm{InfoGAN}} (D, G, Q) = V(D, G) - \lambda \cdot L_I(G, Q).
\]

其中\(V(D, G)\)是普通的GAN的损失.

看一些InfoGAN的实现: \(z\)服从[0, 1]均匀分布, 类别标签服从均匀分布(\(1/K\)), 其他的用于描述角度宽度的\(c\)服从[-1, 1]的均匀分布.

实际上, 应该还是有一个超参数\(\sigma^2\)的, 但是当我们假设其与\(x\)无关的时候, 在损失部分其为一常数, 所以就不用管了(这和VAE在decoder部分的处理也是一致的).

估计是没弄好啊, 这没看出变化来.

InfoGAN的更多相关文章

  1. 学习笔记GAN003:GAN、DCGAN、CGAN、InfoGAN

    ​GAN应用集中在图像生成,NLP.Robt Learning也有拓展.类似于NLP中的Actor-Critic. https://arxiv.org/pdf/1610.01945.pdf . Gen ...

  2. 深度学习-InfoGAN论文理解笔记

    在弄清楚InfoGAN之前,可以先理解一下变分推断目的以及在概率论中的应用与ELBO是什么,以及KL散度 https://blog.csdn.net/qy20115549/article/detail ...

  3. InfoGan笔记

    InfoGAN: Interpretable Representation Learning by Information Maximizing Generative Adversarial Nets ...

  4. 0.读书笔记之The major advancements in Deep Learning in 2016

    The major advancements in Deep Learning in 2016 地址:https://tryolabs.com/blog/2016/12/06/major-advanc ...

  5. 深度|OpenAI 首批研究成果聚焦无监督学习,生成模型如何高效的理解世界(附论文)

    本文经机器之心(微信公众号:almosthuman2014)授权转载,禁止二次转载,原文. 选自 Open AI 作者:ANDREJ KARPATHY, PIETER ABBEEL, GREG BRO ...

  6. (转) The major advancements in Deep Learning in 2016

    The major advancements in Deep Learning in 2016 Pablo Tue, Dec 6, 2016 in MACHINE LEARNING DEEP LEAR ...

  7. [译]2016年深度学习的主要进展(译自:The Major Advancements in Deep Learning in 2016)

    译自:The Major Advancements in Deep Learning in 2016 建议阅读时间:10分钟 https://tryolabs.com/blog/2016/12/06/ ...

  8. 一些相关的github

    https://github.com/LTS4/DeepFool 貌似是说可以愚弄深度神经网络? https://github.com/tflearn/tflearn TF学习指南 http://gi ...

  9. (转)【重磅】无监督学习生成式对抗网络突破,OpenAI 5大项目落地

    [重磅]无监督学习生成式对抗网络突破,OpenAI 5大项目落地 [新智元导读]"生成对抗网络是切片面包发明以来最令人激动的事情!"LeCun前不久在Quroa答问时毫不加掩饰对生 ...

随机推荐

  1. vue-baidu-map相关随笔

    一,使用vue-baidu-map 1.下载相关包依赖 npm i vue-baidu-map   2.在main.js中import引入相关包依赖,在main.js中添加如下代码: import B ...

  2. java中类实现Serializable接口的原因

    背景:一个java中的类只有实现了Serializable接口,它的对象才是可序列化的.如果要序列化某些类的对象,这些类就必须实现Serializable接口.Serializable是一个空接口,没 ...

  3. transient关键字和volatile关键字

    看到HashSet的源代码的时候,有一个关键字不太认识它..transient,百度整理之: Java的Serialization提供了一种持久化对象实例的机制,当持久化对象时,可能有一些特殊的对象数 ...

  4. 神器Tampermonkey的安装使用

    Tampermonkey是一款基于浏览器的神奇插件,在国内称为油猴,开发者可以在上面开发满足自己需求的各类浏览器应用脚本.不过经过全球各地无数开发者数年的积累现在其官网已经有一大把的优秀的现成脚本,完 ...

  5. SpringColud微服务-微服务概述

    一.什么是微服务架构 微服务架构是一种架构模式,它提倡讲单一应用程序划分为一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.每个服务运行在单独的进程当中,服务与服务之间采用轻量级的通信机制 ...

  6. synchronized底层浅析(二)

    一张图了解锁升级流程:

  7. Nginx LOCATOIN块配置

    1 匹配模式优先级 location = /uri =开头表示精确匹配,只有完全匹配上才能生效. location ^~ /uri ^~ 开头对URL路径进行前缀匹配,并且在正则之前.无正则普通匹配( ...

  8. java中栈,堆,方法区

    最近在看面试题复习javaee,所以在这里对栈,堆,方法区做一下整理 参考了https://www.cnblogs.com/hqji/p/6582365.html 1.栈 每个线程包含一个栈区,栈中只 ...

  9. CF17A Noldbach problem 题解

    Content 若一个素数可以用比它小的相邻的两个素数的和加 \(1\) 表示,那么称这个素数为"好素数". 给定两个正整数 \(n,k\),问从 \(2\) 到 \(n\) 的好 ...

  10. Nginx 编译数格式化输出

    printf "%s\n" `nginx -V 2>&1` nginx -V 2>&1 | sed 's/ /\n/g'