GAN 1
1. Introduction of Generative Adversarial Network (GAN)
在无监督学习方面有哪些最新的和潜在的突破?
在深度学习方面,最近有哪些潜在的突破?
各种各样的GAN,GAN的种类实在太多了,英文字母太少了,以至于出现了α-GAN
会话索引页上的关键字搜索,因此包含会话名称,标题中包含关键词的论文数量,可见GAN成为一项非常重要的技术
1.1 GAN的基本思想
希望机器生成(Generation)东西,图像生成:
句子生成:
似乎看起来没有什么用,但是我们将控制后面要生成的内容→ 条件生成
具体的例子,改变某个维度的数值,输出就会发生改变:
训练的时候会同时训练一个Discriminator,价值越大代表真,价值越小代表假:
Generator和Discriminator的关系就像是猎物和狩猎者一样:
他们像天敌,有对抗的意思,Generator就像假钞,Discriminator就想警察,这就是 "对抗性(adversarial) "一词的由来,你可以用不同的方式解释这个过程…
一个和平的比喻如下:
可以发现有两个问题,Generator为什么不自己学,Discirminator为什么不自己做?
Generator v.s. Discriminator——写作敌人,念做朋友
算法
- 初始化生成器和鉴别器
- 在每次训练迭代中:
- 固定生成器G,并更新鉴别器D
鉴别器学习将高分分配给真实对象,将低分分配给生成对象 - 固定鉴别器D,并更新生成器G,希望生成器学会 "欺骗"辨别器
- 固定生成器G,并更新鉴别器D
整个演算法如下:
动漫面孔生成,训练数据集来源,100次更新之后:
1000次更新之后:
2000次之后:
5000次更新结果:
10000更新:
20000更新:
50000更新:
实际上可以做得更好:
GAN也可以用在三维人脸上,而且可以产生没有看过的面孔,只需要看过很多真实的面孔:
1.2 GAN作为结构化学习
Structured Learning
机器学习就是要找到一个函数f,
f
:
X
→
Y
f:X→Y
f:X→Y
回归:输出一个标量
分类:输出一个 “类” (one-hot vector,例如100——Class1、010——Class2、001——Class3)
结构化学习/预测:输出一个序列、一个矩阵、一个图形、一棵树…
输出由具有依赖性的组件组成
输出是序列:
输出是矩阵:
为什么结构化学习具有挑战性?
- 一次性/零次性学习:
- 在分类中,每个类都有一些例子
- 在结构化学习中,
- 如果你把每一个可能的输出看作是一个 “类”…
- 由于输出空间巨大,大多数 "类 "没有任何训练数据,比如机器翻译中,测试集里的句子在训练时一次都没有见到过
- 机器必须在测试过程中创造新的东西
- 需要更多的智能
- 机器要学会做规划
* 机器生成的对象是逐个组件的,但它心中应该有一个全局
* 因为输出组件有依赖性,所以应该全局考虑
结构化学习法
- Bottom Up:学习在组件级生成对象(Generator)
- Top Down:评价整个对象,找到最好的一个(Discriminator)
把以上两种方法结合起来就是GAN
1.3 Generator可以自己学习吗?
Auto-encoder
其实NN Decoder就是Generator:
一个真实的例子:
Auto-encoder有什么问题?
Variational Auto-encoder(VAE)
Auto-encoder到底少了什么?
通常计算两张图片是否相似,计算两张图片的像素的位置,希望越小越好
如果生成器能真正复制目标图像就可以了,但是如果生成器犯了一些错误怎么办…有些错误是严重的,而有些则是好的
所以不能单纯的让输出和目标越像越好
输出层的每个神经都对应一个像素
各部分之间的关系至关重要,虽然高度相关,但不能相互影响,这需要深层次的结构来把握各部分之间的关系
(Variational) Auto-encoder,Generator产生的是蓝色的点,绿色的是目标:
1.4 鉴别器能生成吗?
Discriminator可能有不同的名字——评价函数、电位函数、能量函数…鉴别器是一个函数D(网络,可深层), D : X → R D:X→R D:X→R
- 输入x:对象x(如图像)
- 输出D(x):标量,表示对象x的 "好 "程度
我们可以使用判别器来生成对象吗?- 可以
通过自上而下的评价,更容易抓住各部分之间的关系
假设我们已经有一个很好的判别器D(x)…
如何训练?
我有一些真实的图像
鉴别器只学习输出 “1”(实数)
Discriminator训练需要一些反面例子,反面例子很关键
如何生成现实的负面例子?
一般算法
- 给定一组正例,随机生成一组负例
- 在每次迭代中
- 学习一个能分辨正例和反例的判别器D
- 通过判别器D生成负例
在实际工作中,除了实际的例子,你不能减少所有的x
和Graphical Model有关的技术:
Generator v.s. Discriminator
Generator
- 优点
- 即使是深度模型,也很容易生成
- 缺点
- 模仿外观
- 很难学习成分之间的相关性
Discriminator
- 优点
- 考虑到大局
- 缺点
- 生成并不总是可行的
- 特别是当你的模型是深
- 如何进行负向采样?
- 生成并不总是可行的
GAN的好处
- 从Discriminator的角度看
- 使用生成器生成阴性样品
- 使用生成器生成阴性样品
- 从Generator的角度来看
- 依然逐个组件生成对象
- 但它是从具有全球视野的辨析师那里学到的。
比较一下GAN和VAE的差别:
VAE很稳,但比较可以产生最好的结果,VAE比GAN还是差一点
1.5 一点理论
Generator
Discriminator
2. Conditional Generation by GAN
Text-to-Image
- 传统的监督方式,其存在问题:产生的图片是多张图片的平均
之前GAN中生成器将学会生成逼真的图像…但完全忽略了输入条件 ×
所以Discriminator需要同时看两个输入,有条件的GAN[Scott Reed, et al, ICML, 2016]:
演算法:
有条件的GAN——判别器,第二个网络理论上合理一些:
Stack GAN
先产生小张的图,再产生大的图
Han Zhang, Tao Xu, Hongsheng Li, Shaoting Zhang, Xiaogang Wang, Xiaolei Huang, Dimitris Metaxas, “StackGAN: Text to Photo-realistic Image Synthesis with Stacked Generative Adversarial Networks”, ICCV, 2017
Image-to-image
传统的监督方式:
它之所以模糊,是因为它是几幅图像的平均值
Patch GAN ,每次只让Discriminator只检查一个区域:
语音增强(Speech Enhancement)
有条件的GAN
视频生成
3. 无监督条件生成
在没有配对数据的情况下,将一个对象从一个域转换到另一个域(如风格转换)
所以只有两堆Data,能不能进行转换来生成
3.1 直接转换
通过学习,Discriminator能够分辨产生的是Domain X还是Domain Y,所以接下来Generator需要要想办法骗过Discriminator,但这会有一个问题,即
G
X
→
Y
G_{X→Y}
GX→Y只要总是产生同一张Domain Y的图片就行了,即使这和一开始的Domain X的图片毫无关系:
-
一个可能的做法是直接无视这个问题,这个问题可以通过网络设计来避免(把Generator设计的比较浅),更简单的生成器使输入和输出的关系更加紧密[Tomer Galanti, et al. ICLR, 2018]
-
拿训练好的Network(例如VGG),希望得到的两个向量不会差太多 [Yaniv Taigman, et al., ICLR, 2017]
-
Cycle GAN [Jun-Yan Zhu, et al., ICCV, 2017]
也可以做成双向的:
有人利用Cycle GAN把头发颜色转成银色头发
Cycle 一致性(Consistency)的问题,CycleGAN: 隐写术大师 [Casey Chu, et al., NIPS workshop, 2017] :
StarGAN
3.2 投射到公共空间
目标
如何训练?
也可以加上Discriminator一起训练,因为我们分别训练两个自动编码器…具有相同属性的图像可能不会投射到潜伏空间的同一位置,这样会产生截然不同的图片:
如何解决这个问题?
共享编码器(最后几层)和解码器的参数,这样的技术被用在:
- Couple GAN[Ming-Yu Liu, et al., NIPS, 2016]
- UNIT[Ming-Yu Liu, et al., NIPS, 2017]
最极端的例子,同一个Encoder权值完全一样,只是给不同的Flag,让他们知道现在是哪个Domain
其它的方法:领域判别器迫使 E N X EN_X ENX和 E N Y EN_Y ENY的输出具有相同的分布,现在可以期待不同的维度有不同的含义 [Guillaume Lample, et al., NIPS, 2017]
Cycle Consistency,用在ComboGAN[Asha Anoosheh, et al., arXiv, 017],和Cycle GAN的训练差不多:
Semantic Consistency,用在DTN [Yaniv Taigman, et al., ICLR, 2017] and XGAN [Amélie Royer, et al., arXiv, 2017]
世界二次元化,这不是cycle GAN, Disco GAN
也可以应用在语音转换
总结
- 简单了解生成对抗网络基本思想,Generator用来生成,Discriminator用来打分,GAN其实是一种结构化学习
- Generator也可以自己打分,这有点像Auto-encoder的概念,但是不能单纯的让输出和目标越像越好,需要把握各部分之间的关系
- Discriminator也可以自己生成,但实际中很难训练,很难穷举所有可能的负面的情况
所以将二者结合起来的GAN很好,Discriminator很容易得到负面例子,Generator的打分也很容易考虑全局,理论部分没有讲到
- 条件生成,数据成对的,这个比较好懂,就是在之前的Discriminator加上了一个条件的输入,以及讲到Stack GAN、Patch GAN…
- 无监督生成,这个应该就是实际中应用较多的
- 直接转换可以是不管毫无关系、拿训练好的Network使产生的向量尽可能近,但是重点还是Cycle GAN和Star GAN,其中Cycle GAN有一致性的问题
- 投射到公共空间,为了解决具有相同属性的图像可能不会投射到潜伏空间的同一位置的问题,训练的方式有很多:共享编码器参数、Domain判别器、Cycle Consistency、Semantic Consistency…