【李宏毅2020 ML/DL】P76 Generative Adversarial Network | Unsupervised Conditional Generation
我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的、自己不知道的东西。
这是我的李宏毅老师 GAN 系列第3
篇笔记,GAN 系列:
本节内容综述
- 可以理解为一种“风格迁移”的技术。但是我们收集不到不同风格间有 link 的数据。
- 对于 Unsupervised Conditional Generation ,李老师将其分为两类:Direct Transformation 与 Projection to Common Space 。
- 首先来讨论第一个类别 Direct Transformation 。提到了 Cycle GAN ,还由此提及了 StarGAN 。
- 接下来讨论第二个类别 Projection to Common Space。提到了不少的GAN,主要解决的问题是将不同风格的编码-解码器连接起来,都适用于其中间产生的 code 。
文章目录
小细节
Unsupervised Conditional Generation
如上,我们希望机器可以“独立地”完成图片/语音风格的转换。
如上,李老师将其分为两类:Direct Transformation 与 Projection to Common Space 。
Direct Transformation
如何让机器知道,是否是这个风格的图片呢?如同上天,让 D 见过这个风格的图片,之后,再争取让 G 生成的图片骗过 D ,让 D 觉得也是这个风格的图片。
但是问题是,G可能产生与 input 完全不相关的东西。怎么办呢?
- 无视这个问题,其实也可以;
- 还有一些其他方法比如下图(对G的输入输出进行编码,力求编码相似)。
Cycle GAN
此外,G可能产生与 input 完全不相关的东西
还有别的思路如 Cycle GAN 。
如上,我们希望生成的图片可以转回其本身。
此外,如上图,我们可以把两种风格一起训练,相互转换。
Issue of Cycle Consistency
如上,中间产物的红框部分是没有黑点的,但是其利用中间产物生成回去还会有黑点。
因此,可以推测Cycle GAN是可以“藏”信息的,那这样Cycle GAN就没有意义了,因为我们使用Cycle GAN的初衷就是 的输入输出差别不要太大。但是现在发现其能将信息“藏”起来,这样可能 Cycle GAN 意义就不大了。
如上,这是不同的人在同一时间提出了相同的方法,只不过发在了不同的会议而已。
StarGAN
如上,做了一个 Generator ,希望能在多个领域互相转换。
上面 (a) 中还要判断图片来自哪个 Domain 组合。
如上 (b) 与 © 步骤:
- 输入
目标领域
与图片
,得到假的图片
; - 再将
假的图片
与目标领域
输入回同一个 Generator ,要求其能生成原来的真图片
。
这类似 CycleGAN 。
如上,这里的 Domain 其实是一个向量组合:[是否年轻,头发黑色,...]
类似如此的特征描述。
Projection to Common Space
如上,在这种转换中,我们希望有不同领域的编码器与解码器。
但是,如上这种模式中,上下两组 GAN 是没有关联的。输入一个 X 领域的数据,编码,通过 Y 领域解码器解码后,得到的可能是截然不同的图片。
如何解决呢?
Couple GAN / UNIT
如上,可以对所有的 编码器 EN ,在最后几层都共用参数。
Domain Discriminator
如上,我们还可以设置一个 Domain Discriminator,让不同的编码器都能骗过这个 Discriminator 。这样,就会强迫不同的编码器生成的 code 服从同一分布,或者说,使用相同的信息表示方法,相当于做了特征排序
。
Cycle Consistency / ComboGAN
如上,也可使用 Cycle Consistency 的方法。
DTN / XGAN
如上,使用 Semantic Consistency 的方法。
举例
使用 GitHub 的链接:
此外,也可以进行语音的转换。这样对数据样本也降低了不少要求。