2020李宏毅机器学习笔记-Generative Adversarial Network - Unsupervised Conditional Generation

目录

摘要

1. Unsupervised Condition GAN

 2. Unsupervised Conditional Generation

2.1 Direct Transformation

 2.1.1 利用判别网络

 2.1.2 利用预训练网络

 2.1.3 Cycle GAN

2.2 Projection to Common Space

 2.2.1 共享参数

 2.2.2 增加判别网络

 2.2.3 Combo GAN(Cycle Consistency)

3. Voice Conversion

 结论与展望


摘要

对于cGan中的无监督学习部分,可以理解为一种“风格迁移”的技术。但是我们收集不到不同风格间有 link 的数据。对于 Unsupervised Conditional Generation ,将其分为两类:Direct Transformation 与 Projection to Common Space。

首先来讨论第一个类别 Direct Transformation(直接转),直接学习一个生成器,可以将domainX转换为domainY的东西 。接下来讨论了第二个类别 Projection to Common Space(投影到公共空间),先学习一个domain X的encoder,将特征抽出来;之后输入domain Y的decoder,将特征转换为想要的东西。而无监督的cGan主要用于做图片的风格迁移和语音转换等应用上。

1. Unsupervised Condition GAN

上节课讲的是CGAN都是有监督学习,那能不能无监督学习呢?当然可以啦,大多数情况我们很难弄到一个个对应匹配的数据,比如做图片风格转换,你很难弄到同一个图片的不同种风格,里面东西还是一模一样的,再比如,你很难把一个人的声音风格转换到另外一个人声音上,因为可能你说的是中文,另外一个人说英文,找不到一模一样的发音,所以我们需要研究无监督学习,只需要两堆数据,可将某种特征从一堆转到另一堆。

 2. Unsupervised Conditional Generation

有两大类的做法:

  1. 直接转:直接学习一个生成器,可以将domainX转换为domainY的东西
  2. 投影到公共空间:你先学习一个domain X的encoder,将特征抽出来;之后输入domain Y的decoder,将特征转换为想要的东西

2.1 Direct Transformation

我们要learn一个生成器,他可以将X domain的东西转换为 Y domain的东西;现在我们X domain的东西有一堆,Y domain的东西有一堆,但是合起来的pair没有。那生成器怎么知道给定X domain的东西输出Y domain的东西呢?

  • 这个时候就需要一个Y domain的判别器,这个判别器他看过很多Y domian的图片,所以给它一张image,他可以鉴别这个image是不是Y domian的image
  • 生成器要做的就是想办法去骗过判别器,这样就生成Y domain的东西
  • 但是还要注意生成器生成的东西要与输入有关

 2.1.1 利用判别网络

这种方法利用一个判别器,判断生成器输出的图片属于 x domain 或者 y domain,从而训练 生成器使得其输出的图片尽可能贴近于 y domain。但这样的问题是生成器可能输出和输入不相关的图像。

有很多种方法可以解决这个问题,最简单粗暴的方法就是直接无视,因为直接转换下,生成器的深度不足以产生和输入图像相差过大的输出结果。也就是说如果你的生成器网络很浅,输入和输出会特别像,这时候就不需要额外的处理;如果你的生成器网络很深,输入和输出会真的很不一样,这时候就需要额外的处理;

 2.1.2 利用预训练网络

用一个已训练好的网络,如VGG;把生成器的输入和输出image,统统丢给这个pre-train好的网络,就会输出两个embedding vector;接下来在训练的时候,一方面生成器要骗过判别器,同时希望两个embedding的vector不要差太多。

 2.1.3 Cycle GAN

  •  如果你想train一个X domain到Y domain的生成器,你需要同时train一个Y domain到X domain的生成器;第一个生成器用于将风景画变成复古画,第二个用于将复古画还原为原来一模一样的图;然后目标是两次转换以后的图越接近越好。(这个路径叫做cycle consistency)
  • 同时训练Y domain的判别器;
  • 重复上面的X domain转换为Y domain;我们再训练一个Y domain到X domain同样的结构;
     

2.2 Projection to Common Space

 我们想要做到:

真人图片丢到ENx,可以抽出真人的特征到latent vector(橙色),然后经过二次元的DEx,得到对应的二次元图片;二次元图片丢到ENy,可以抽出二次元的特征到latent vector(橙色),然后经过真人的DEy得到对应的真人图片。

一般的结构为,分别训练两个编码器以编码实际图片和风格图片,再训练两个解码器以解码实际图片和风格图片,最终即可得到一条路径,可以将实际图片转换为风格图片。

由于两个auto-encoder是分开train的,所以两者之间是没有关联的;例如当你丢个X domain的人脸进去,变成一个vector,当输入Y domain的encoder中时,可能出现一个截然不同的卡通人物。因为是分开训练的,所以在latent space中每个维度的表示属性是不一样的,如上面的auto-encoder用第一维代表性别,而下面一组则用其他代表性别;

 2.2.1 共享参数

让不同domain的decoder的最后几个hidden layer和encoder的最前面几个hidden layer的参数是共用的;通过共享参数,可能会是不同domain的image压缩到同一个latent space(潜在的空间),即同样的dimension 表示同样的属性。这样的技术被用在couple GAN 和UNIT里面。

 2.2.2 增加判别网络

原来X domain和Y domain都是自己搞自己的东西,现在,用一个domain 判别器来判断这个vector是来自于X domain的image还是来自于Y domain的image。两个encoder的作用是骗过这个domain 判别器。当无法判断的时候,就是说明两者被encode到同一个空间。

 2.2.3 Combo GAN(Cycle Consistency)

将一张image经过X encoder变成code;再经过Y docoder把它解回来;然后再丢给Y domain的encoder,再透过X domain的decoder把它解回来;然后希望input和output越接近越好。

 

3. Voice Conversion

过去,用的监督学习的方法,要有一堆对应的声音:然后训练一个seq2seq的模型就可以了,但是这个模型是有缺陷的,例如我想要变声为张学友,那很难请到张学友跟我一起念同样的句子,然后来训练,很麻烦。那如果我想要变声为尼古拉斯凯奇,那就很难搞了,因为他不会中文,就算请到他也讲不来相同的句子。

如今,我们只要收集两组声音,不用讲一样的内容就可以进行训练。

 结论与展望

研究无监督CGAN很有意义,因为大多数情况我们很难弄到一个个对应匹配的数据,比如做图片风格转换,你很难弄到同一个图片的不同种风格,里面东西还是一模一样的,所以我们需要研究无监督学习,只需要两堆数据,可将某种特征从一堆转到另一堆。

对于方法一,Direct Transformation(直接转),具体步骤:

  • 需要一个Y domain的判别器,这个判别器他看过很多Y domian的图片,所以给它一张image,他可以鉴别这个image是不是Y domian的image
  • 生成器要做的就是想办法去骗过判别器,这样就生成Y domain的东西
  • 但是还要注意生成器生成的东西要与输入有关

对于方法二,Projection to Common Space(投影到公共空间),具体步骤:

  • 分别训练两个编码器以编码实际图片和风格图片
  • 再训练两个解码器以解码实际图片和风格图片
  • 最终即可得到一条路径,可以将实际图片转换为风格图片
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值