CGAN和InfoGAN理解

article/2025/3/4 8:58:16

在一些比较经典的GAN模型中(像WGAN、LSGAN、DCGAN等等),往往都是从样本空间里随机采样得到输入噪声,生成的图像究竟属于哪一个类别也是随机的。通过这些模型,我们无法生成指定类别的数据。

举个不恰当的例子:在解放前夕,我们的目标就是填饱肚子,吃嘛嘛香;随着经济社会的不断发展和祖国的繁荣昌盛,我们变得越来越挑剔,比如今天只想吃波士顿龙虾,明天只想吃澳洲大螃蟹… GAN的发展也是一样,早期我们只关注GAN否生成清晰度高、类别丰富的图像数据,但是发展到一定的程度,我们就希望模型能够按照我们的要求生成出指定类别的数据。同时也可以一定程度上解决GAN训练太自由,以至于在一些复杂数据集上不稳定的弊病。

于是在早些时候,有两种比较经典的模型CGAN和InfoGAN,都可以生成指定模式的数据。下面对两种模型分别做一下简介。

CGAN

CGAN(Conditional GAN)模型是有监督的,即利用了数据集中的标签信息。在传统GAN中,Discriminator的打分非常简单粗暴,生成的图像比较真实打高分,比较模糊的打低分。但是当引入了标签信息以后,打分规则需要变得更加严格。也就是说,模糊的图像还是打低分;但是在清晰真实的生成图像中,如果该图像与他的标签不匹配,也是需要打低分的。

CGAN的结构与传统的GAN非常相似,其模型如下图所示:

在这里插入图片描述

根据上面的模型图,CGAN引入标签 y y y 的方法也非常直接,就是在Generator和Discriminator的输入层,加上一个额外的one-hot向量,也就是图像的标签信息。因此,整个优化目标就变为:

V ( G , D ) = E x ∼ P d a t a [ l o g ( D ( x ∣ y ) ) ] + E z ∼ P z [ 1 − l o g ( D ( G ( z ∣ y ) ) ) ] V(G,D)=E_{x \sim P_{data}}[log(D(x|y))]+E_{z \sim P_{z}}[1-log(D(G(z|y)))] V(G,D)=ExPdata[log(D(xy))]+EzPz[1log(D(G(zy)))]

根据公式可以看出,Generator和Discriminator都改造成了条件概率的形式,即在给定标签向量 y y y 的条件下进行计算。因此,可以看作是每一个类别 y y y 都对应一个隶属于自己的目标函数。有了这个约束,假如生成了清晰但是类别与标签不匹配的图像,也会当做fake来进行打分。因此可以通过调整标签的值,来改变生成数据的类别。

InfoGAN

相对于CGAN来说,InfoGAN是通过无监督学习来得到一些潜在的特征表示,这些潜在的特征就包括数据的类别。如果现在有一个数据集,里面的数据没有标签信息,但仍存在潜在的类别差异,此时InfoGAN就可以提供一种无监督的方法,来辨别出数据中潜在的类别差异,并且可以通过控制潜在编码 latent code 来生成指定类别的数据。

举个不恰当的栗子,现在摆在我面前有一卡车美食,但是我并不知道他们是什么(没有标签),只知道这些都是食物。现在我吃到一个带壳的、两个钳两条腿的、味道鲜美的东西,特别好恰,但由于没有(澳洲大螃蟹)这个标签,所以无法通过CGAN去得到它。但是呢,虽然有一卡车的美食,且没有标签信息区分他们的类别,但很显然他们是有潜在的类别区分的,螃蟹和狗不理包子就是不一样…因此这时候通过无监督的InfoGAN,即使是在没有标签信息的指导下,也可以学习到样本中潜在的类别差异,从而可以生成鲜美可口的澳洲大螃蟹。

在这里插入图片描述

InfoGAN 将 Generator 的输入拆分成两个部分,一部分是 latent code,一般记作 c c c,另一部分和传统 GAN 的输入一样,是一个噪声向量 z z z。其中, c c c 通常包括两个部分,一部分是离散的,一部分是连续的。这个latent code是可以服从于某种分布的。对于MNIST数据集来说,离散的部分可以服从一个多项分布(Multinomial Distribution),取值空间是0-9内的随机数字;连续的部分可以服从某个连续的分布(如均匀分布、正态分布),每一个维度代表着某种潜在的数据特征(如笔画的粗细、倾斜程度等)。

InfoGAN的精髓在于,在原始GAN的基础上,加入 latent code生成数据 之间的互信息作为约束,使两者之间产生一定的关联。因为隐变量 c c c 携带着某种可以解释生成数据 G ( z , c ) G(z,c) G(z,c) 的信息。如果两者的相关性强,那么 c c c G ( z , c ) G(z,c) G(z,c) 之间的互信息 I ( c ; G ( z , c ) ) I(c;G(z,c)) I(c;G(z,c)) 就比较大(互信息简而言之,是描述两个随机变量相关程度的一种度量)。所以InfoGAN的优化目标可以改写为:

m i n G m a x D V I ( G , D ) = V ( G , D ) − λ I ( c ; G ( z , c ) ) min_{G}max_{D}V_{I}(G,D)=V(G,D)-\lambda I(c;G(z,c)) minGmaxDVI(G,D)=V(G,D)λI(c;G(z,c))

但是这个互信息 I ( c ; G ( z , c ) ) I(c;G(z,c)) I(c;G(z,c)) 并不能直接计算,因为:

I ( c ; G ( z , c ) ) = H ( c ) − H ( c ∣ G ( z , c ) ) = H ( c ) + E x ∼ G ( z , c ) [ E c ′ ∼ P ( c ∣ x ) [ l o g P ( c ′ ∣ x ) ] ] I(c;G(z,c))=H(c)-H(c|G(z,c))=H(c)+E_{x \sim G(z,c)} [E_{c' \sim P(c|x)}[logP(c'|x)]] I(c;G(z,c))=H(c)H(cG(z,c))=H(c)+ExG(z,c)[EcP(cx)[logP(cx)]]

上式中隐变量的后验 P ( c ∣ x ) P(c|x) P(cx) 是无法得到的,所以这里采取变分推断,利用一个可控的辅助分布 Q ( c ∣ x ) Q(c|x) Q(cx) 来近似这个无法得到的后验概率 P ( c ∣ x ) P(c|x) P(cx),于是互信息可以进一步写为:

I ( c ; G ( z , c ) ) = H ( c ) + E x ∼ G ( z , c ) [ E c ′ ∼ P ( c ∣ x ) [ l o g P ( c ′ ∣ x ) Q ( c ′ ∣ x ) Q ( c ′ ∣ x ) ] ] I(c;G(z,c))=H(c)+E_{x \sim G(z,c)} [E_{c' \sim P(c|x)}[log\frac{P(c'|x)}{Q(c'|x)}Q(c'|x)]] I(c;G(z,c))=H(c)+ExG(z,c)[EcP(cx)[logQ(cx)P(cx)Q(cx)]]

= H ( c ) + E x ∼ G ( z , c ) [ E c ′ ∼ P ( c ∣ x ) [ l o g P ( c ′ ∣ x ) Q ( c ′ ∣ x ) + l o g Q ( c ′ ∣ x ) ] ] =H(c)+E_{x \sim G(z,c)} [E_{c' \sim P(c|x)}[log\frac{P(c'|x)}{Q(c'|x)}+logQ(c'|x)]] =H(c)+ExG(z,c)[EcP(cx)[logQ(cx)P(cx)+logQ(cx)]]

= H ( c ) + E x ∼ G ( z , c ) [ K L ( P ( ⋅ ∣ x ) ∣ ∣ Q ( ⋅ ∣ x ) ) + E c ′ ∼ P ( c ∣ x ) l o g Q ( c ′ ∣ x ) ] ] =H(c)+E_{x \sim G(z,c)} [KL(P(\cdot|x)||Q(\cdot|x))+E_{c' \sim P(c|x)}logQ(c'|x)]] =H(c)+ExG(z,c)[KL(P(x)Q(x))+EcP(cx)logQ(cx)]]

≥ H ( c ) + E x ∼ G ( z , c ) [ E c ′ ∼ P ( c ∣ x ) l o g Q ( c ′ ∣ x ) ] ] \geq H(c)+E_{x \sim G(z,c)} [E_{c' \sim P(c|x)}logQ(c'|x)]] H(c)+ExG(z,c)[EcP(cx)logQ(cx)]]

由于KL散度非负,这里将极大化互信息的问题,转化为极大化互信息的下界,令:

L 1 ( G , Q ) = H ( c ) + E x ∼ G ( z , c ) [ E c ′ ∼ P ( c ∣ x ) l o g Q ( c ′ ∣ x ) ] ] L_{1}(G,Q) = H(c)+E_{x \sim G(z,c)} [E_{c' \sim P(c|x)}logQ(c'|x)]] L1(G,Q)=H(c)+ExG(z,c)[EcP(cx)logQ(cx)]]

这里又发现一个问题, P ( c ∣ x ) P(c|x) P(cx) 我们还是不知道,所以作者在论文中证明了一个引理,即:
$$$$
通过上述引理,可将互信息下界 L 1 ( G , D ) L_{1}(G,D) L1(G,D)改写为:

L 1 ( G , Q ) = H ( c ) + E c ∼ P ( c ) , x ∼ G ( z , c ) [ l o g Q ( c ∣ x ) ] L_{1}(G,Q) = H(c)+E_{c \sim P(c), x \sim G(z,c)} [logQ(c|x)] L1(G,Q)=H(c)+EcP(c),xG(z,c)[logQ(cx)]

这里感兴趣的话可以证明一下。通过这个转换,避免了从隐变量后验分布中进行采样,因此可以直接通过蒙特卡洛进行采样即可。因此最终的优化目标为:

m i n G m a x D V I ( G , D , Q ) = V ( G , D ) − λ I ( G ; Q ) min_{G}max_{D}V_{I}(G,D,Q)=V(G,D)-\lambda I(G;Q) minGmaxDVI(G,D,Q)=V(G,D)λI(G;Q)

InfoGAN的理论到这里就差不多了,下面浅谈一下实验环节。

Github上看过几个实验,也跑通了程序,基本思路大致是:假设是在MNIST上训练,输入的向量分为三个部分,10维的离散特征(服从多项分布),2维的连续特征(可以服从(-1,1)均匀分布),62维的噪声(后面两个维度都可以更改)。分别对三者进行采样,然后进行拼接组成输入向量,通过Generator生成图像。和传统的GAN一样,对Generator和Discriminator进行辨别图像真假的训练。

不同的是,InfoGAN需要加入互信息的约束。在这里引入一个额外的网络Q,该网络除最后一层以外都与鉴别器D共享权值(D和Q只有最后一层全连接不一样,D最后的维度是1,而Q最后是离散特征和连续特征个数的总和,上例中是10+2)。

这样一来,生成器G与额外引进的网络Q,两者一起相当于构成了一个AutoEncoder。首先通过G,将一些潜在特征编码到生成图像中,再通过Q进行解码得到 latent code,这种“特征-数据-特征”的 AutoEncoder,虽然与传统意义的“数据-特征-数据”的 AutoEncoder 相反,但也可以通过 Reconstruction Error 来进行约束。因为通过重构误差就可以知道生成图像中究竟携带了多少 c c c 的特征,如果在 encoder 过程中失去了输入的特征,那么在 decode 以后也不会得到相近的 latent code。

所以,通过连续部分和离散部分的重构误差的加权和,就可以间接估计 latent code 与生成数据之间的互信息。

还有的实现代码是从分布的角度进行描述,假设 c c c 的连续部分服从标准正态分布 N ( 0 , I ) N(0,I) N(0,I),通过 Q(x) 得到的是高斯分布的均值和方差,通过让 Q(x) 得到的均值和方差向 Standard Normal Distribution 靠拢,来实现互信息的约束。

上面的两种方法都以一个共性,就是把 InfoGAN 的网络架构看作“传统GAN + AutoEncoder”,其中 G 和 Q 组成的自动编码器胜任了互信息的约束。AutoEncoder 属于无监督学习模型,因此通过InfoGAN就可以无监督的学习到潜在的类别特征及一些其他可解释性的特征。

刚接触InfoGAN,学识尚浅,如有不当之处,还望交流指正。

参考:

https://www.jiqizhixin.com/articles/2018-10-29-21

https://blog.csdn.net/u011699990/article/details/71599067


http://chatgpt.dhexx.cn/article/nuH2xRQe.shtml

相关文章

InfoGAN

InfoGAN: Interpretable Representation Learning by Information Maximizing Generative Adversarial Nets Xi Chen, Yan Duan, Rein Houthooft, John Schulman, Ilya Sutskever, Pieter Abbeel https://arxiv.org/abs/1606.03657 一、从GAN到InfoGAN 1.GAN存在的问题 GAN通…

InfoGAN 生成时序序列

InfoGAN 生成时序序列 简介 完整代码:https://github.com/SongDark/timeseries_infogan 本文介绍用InfoGAN生成多维时序序列。 数据 数据集下载地址 NameClassDimensionTrain SizeTest SizeTruncatedCharacterTrajectories20314221436182 样本介绍 CharacterTr…

InfoGAN详解与实现(采用tensorflow2.x实现)

InfoGAN详解与实现(采用tensorflow2.x实现) InfoGAN原理InfoGAN实现导入必要库生成器鉴别器模型构建模型训练效果展示 InfoGAN原理 最初的GAN能够产生有意义的输出,但是缺点是它的属性无法控制。例如,无法明确向生成器提出生成女…

InfoGAN论文笔记+源码解析

论文地址:InfoGAN: Interpretable Representation Learning by Information Maximizing Generative Adversarial Nets 源码地址:InfoGAN in TensorFlow GAN,Generative Adversarial Network是目前非常火也是非常有潜力的一个发展方向&#…

InfoGAN(基于信息最大化生成对抗网的可解释表征学习)

前言: 这篇博客为阅读论文后的总结与感受,方便日后翻阅、查缺补漏,侵删! 论文: InfoGAN: Interpretable Representation Learning by Information Maximizing Generative Adversarial Nets 解决的问题: In…

InfoGAN学习笔记

InfoGAN: Interpretable Representation Learning by Information Maximizing Generative Adversarial Nets Xi Chen, Yan Duan, Rein Houthooft, John Schulman, Ilya Sutskever, Pieter Abbeel https://arxiv.org/abs/1606.03657 一、从GAN到InfoGAN 1.GAN存在的问题 GAN…

生成对抗网络(十)----------infoGAN

一、infoGAN介绍 infoGAN采用的是无监督式学习的方式并尝试实现可解释特征。原始数据不包含任何标签信息,所有的特征都是通过网络以一种非监督的方式自动学习得到的。使用了信息论的原理,通过最大化输入噪声和观察值之间的互信息来对网络模型进行优化。…

InfoGAN详细介绍及特征解耦图像生成

InfoGAN详细介绍及特征解耦图像生成 一.InfoGAN框架理解特征耦合InfoGANInfoGAN论文实验结果 二.VAE-GAN框架理解VAE-GAN算法步骤 三.BiGAN框架理解四.InfoGAN论文复现使用MNIST数据集复现InfoGAN代码编写初始化判别器初始化生成器初始化分类器训练InfoGAN网络 总结参考文献及博…

InfoGAN介绍

今天给大家分享的是NIPS2016的InfoGAN。这篇paper所要达到的目标就是通过非监督学习得到可分解的特征表示。使用GAN加上最大化生成的图片和输入编码之间的互信息。最大的好处就是可以不需要监督学习,而且不需要大量额外的计算花销就能得到可解释的特征。 通常&#…

10.可视化、可视分析、探索式数据分析

前言:基于人大的《数据科学概论》第十章。主要内容为可视化的定义、可视化的意义、可视化的一般过程、科学可视化与信息可视化、可视化的原则、可视化实例、可视化的挑战和趋势、可视分析技术、探索式数据分析、可视化工具。 一、可视化的定义 可视化是数据的可视表…

国内外大数据可视化分析产品点评

一、KINETICA Kinetica 利用图像处理芯片提供计算支持,允许企业使用机器学习,商业智能分析和可视化技术更快速地分析海量数据; 点评:它的核心技术能力是类MapD的GPU数据库,功能性能较强大,非开源&#xf…

数据分析可视化之模型介绍

一 前言 “数据分析可视化”这条术语实现了成熟的科学可视化领域与较年轻的信息可视化领域的统一。 数据分析可视化:是指将大型数据集中的数据以图形图像形式表示,并利用数据分析和开发工具发现其中未知信息的处理过程。 数据可视化已经提出了许多方法&…

5个最受欢迎的大数据可视化软件

数据可视化的本质是视觉对话,数据可视化将数据分析技术与图形技术结合,清晰有效地将分析结果信息进行解读和传达。 大数据可视化是进行各种大数据分析解决的最重要组成部分之一。 一旦原始数据流被以图像形式表示时,以此做决策就变得容易多了…

软件架构-可视化

软件架构-可视化 当我们在讨论系统时,往往都会说这个系统的架构是什么样的,在你口述的同时,如果能借助某些图表,效果会更好,传统的uml建模比较复杂,目前的软件工程大家更关注效率(这里我不谈敏捷…

48 款数据可视化分析工具大集合

作者:DC君 来源:DataCastle数据城堡 本篇专门推荐48款数据可视化工具,全到你无法想象。 1、Excel 作为一个入门级工具,是快速分析数据的理想工具,也能创建供内部使用的数据图,但是Excel在颜色、线条和样式上…

爬取某小说榜单爬虫及可视化分析

爬取某小说榜单爬虫及可视化分析(仅用于学习) gitee代码链接:https://gitee.com/huang_jia_son/duoduo.git 介绍 GUI界面python爬虫数据清洗与处理pyecharts可视化展示软件架构 (1)通过tkinter制作GUI界面&#xf…

咖啡PowerBI可视化实例

目录 一、导入数据 二、构建指标 1、构架表之间的关系 ​ 2、完善表 3、构建指标 三、可视化 1、整体分析 2、省份业务 3、产品维度 4、地区维度 5、客户维度 6、价格分析 7、利润分析 8、其它分析 一、导入数据 二、构建指标 1、构架表之间的关系 软件会…

CodeScene - 软件质量可视化工具

CodeScene - 软件质量可视化工具 CodeScene https://codescene.com/ https://codescene.io/ The powerful visualization tool using Predictive Analytics to find hidden risks and social patterns in your code. 使用 Predictive Analytics 的功能强大的可视化工具&#x…

使用excel、python、tableau对招聘数据进行数据处理及可视化分析

招聘数据数据分析及可视化 数据来源前言一、观察数据删除重复值数据加工 二、利用python进行数据分析和可视化1.引入库2.读入数据观察描述统计,了解数据大概信息 3.数据预处理3.1数据清洗3.1.1 删除重复值3.1.2缺失值处理 3.2数据加工 4.数据可视化4.1城市岗位数量4…