Ref:
1-1 Deep why
由于Universality Theory,理论上shallow能fit任何continuous function,到任何精准度ε都可以(只需要2L/ε个neuron就行,L的定义见)
但是!相同的参数下,deep能产生更多pieces:
如图在最佳情况下,八个neuron最多能产生28的pattern,即28个linear pieces,虽然某些pattern是不合理的,但也只是少部分不行而已。
3-1 Intro of GAN
如果GAN只用Generator的话就只能用VAE的做法,但需要考虑的东西会多很多,因为需要每一个pixel与隔壁的pixel有联系,这样就需要更深的network:
也有只用Discriminator的,相比只用Generator能识别的更好,但问题是生成图片比较麻烦…需要求解这个来训练:
虽然好像能实现,所以还是Generator和Discriminator分开会比较好。
GAN
Discriminator训练需要Realistic Negative Examples来进行训练,训练是一个迭代过程(通过对argmaxD(X)进行generation,然后输出后重新丢回去当negative examples):
用图像表示的话过程是这样的(学习的时候会有认为那些没有example的部分分数高(找弱点
),那么就生成那部分分数高的又不是real的来作为negative example):
这按理说Discriminator就可以自己生成图了,但实际上对argmaxD(X)进行Generation是比较复杂的过程(线性假设限制,非线性解不出),所以可以用Generator代替:
3-2 Conditional GAN
传统方法做Test-to-Image会出现典型问题(如输入train他输出的实际上是多张image的平均)
而且传统的GAN的D只能评分,不管他输出的是什么,这样会导致G产生的图片没有类别,只要求真实。
CGAN与GAN的区别分别在D和G上有了不同,G多了Condition为参数,D则从单纯的真实度打分器变成了还要考虑类别正误的打分器:
算法就是这样了:
如今有的D的设计有这两种,第一种用的比较多但第二种似乎更合理因为它能得出低分的原因:
StackGAN的做法:先train出小图,再拿小图train大…
Image-to-Image也是一样,用传统Supervised Learning的话会产生很模糊的图像。
用GAN能很好解决这个问题,但GAN由于产生出来的图太过真实反而没有符合原来输入的pattern,这时候如果再结合supervised learning的话效果会出奇的好。
生成图太大给D的话就会很慢很麻烦,可以做Patch GAN(不过需要自己调参,控制检查区域的大小
声音处理上的思路
影像处理的思路
3-3 Unsupervised Conditional Generation
Point: Transform an object from one domain to another without paired data.
两种方法:
- 还是会保留input的整体信息,只是在纹理以及色彩等方面进行改变
- input和output可能就完全不一样了
Direct Transformation方式
- 方法1:直接用GAN框架:
- 方法2:在直接产生的基础上,希望
G
X
→
Y
G_{X\to Y}
GX→Y的输出与输入经过Encoder Network之后的code尽可能接近(其中的Encoder Network可以直接使用类似VGG等训练好的模型)
- 方法3:CycleGAN,即通过
G
X
→
Y
G_{X\to Y}
GX→Y和
G
Y
→
X
G_{Y\to X}
GY→X能够将"变化"转回去
CycleGAN会有将一些细节隐藏,藏信息在G生成的图片里且肉眼看不出来,来让还原出来的图与原来更像,但那样偷懒并不是我们想要的。
- 方法4:用StarGAN实现不同的风格转换(一般来说如下图(a)可能就需要设计
C
k
2
C_{k}^2
Ck2个CycleGAN来实现,但StarGAN只用一个统一的架构就完成了!
他是这样实现的:
Projection to Common Space方式
这种方法的思想在于希望两个Domain经过转换可以有一个"公共的code域",即希望
E
N
X
EN_X
ENX和
E
N
Y
EN_Y
ENY(两者参数是不一样的)产生的Code具有相同的域(比如第一维代表同一个特征—如戴眼镜等等)
- 方法1:共用参数,即将
E
N
X
EN_X
ENX和
E
N
Y
EN_Y
ENY的后面部分参数,以及
D
E
X
DE_X
DEX和
D
E
Y
DE_Y
DEY的前面部分参数共享—这样带来的好处就是,强制code变成同一个域了,且不共享的参数部分又允许各个域之间确实能够存在差异;而共享的部分又能够提取出公共的特点。
这种方法有用在了CoupleGAN里。
- 方法2:加一个Domain Discriminator,望
E
N
X
EN_X
ENX产生的code能够被Domain Discriminator误以为是
E
N
Y
EN_Y
ENY产生的
- 方法3:Cycle Consistency
这种方法有用在了ComboGAN里。
- 方法4:Semantic Consistency,其实和方式3基本一样的,只是在比较的时候采用:
E
N
X
EN_X
ENX产生的code1和经过
D
E
Y
+
E
N
Y
DE_Y+EN_Y
DEY+ENY产生的code2尽可能相近
然后这个又用在了XGAN里。
名言警句
Hungyi Lee:学这个有什么用?到时候外星人来了时候会对我们进行降维打击啊!我们学会这个技术就能先把自己二维化就能躲开外星人的降维打击。
声音转换的思路
Supervised的方式,我们必须收集一堆两个人讲的一一对应的话;可是Unsupervised的方式则完全不需要,只需要有一堆两个人的话就好,我们就可以运用类似CycleGAN等上面介绍的方式达到一句话从一个人的声音转为另一个人的声音