学习笔记是根据李宏毅老师的CycleGAN课:(https://www.youtube.com/watch?v=wulqhgnDr7E)整理的。
- 从非成对数据中学习,指的是我们有部分特征X和部分标签y,这些X和y并非完全一一匹配,学习目标是通过多层神经网络学习从X到y的映射关系。这种任务有区别于psudo labelling和 back translation问题, 这两类问题对应的网络在训练过程中仍需要一定的标签,可看作是semi-supervised learning问题,它的训练资料中仍包括了匹配的数据X和y。
问题描述
尝试学习一个网络,使得网络可以学习从domain X 到 domain y 的映射,尝试的办法为套用原始GAN的思想,将input noise改成从domain X采样得到的数据,得到generated image,Discriminator分辨来自生成的图片是否属于domain y.
但是,按照上述做法生成图片并不能保证学到从domain X到domain y的映射,原因在于Generator的作用是基于采样得到的照片学习y上的另一张图,这里缺乏任何可能的约束使得生成的图片与输入图片是强相关(即匹配)的。为了强化输出于输入间的关系,基于以上做以下改进:
问题解决
训练两个Generator
G
1
G_1
G1?,
G
2
G_2
G2?:
G
1
:
X
→
y
G_1: X \rightarrow y
G1?:X→y
G
2
:
y
→
X
G_2: y \rightarrow X
G2?:y→X
G
1
G_1
G1?尝试将domain X上的图片转变为domain y上的图片,将
G
1
G_1
G1?的输出作为
G
2
G_2
G2?,使
G
2
G_2
G2?做从domain y到domain X的映射,并在损失函数中设计一项,使
G
1
G_1
G1?的输入与
G
2
G_2
G2?的输出越接近越好。
就实验结果来看,神经网络都是有惰性的,给定输入,网络不会刻意去学习比较复杂的分布(例如,
G
1
G_1
G1?通过学习,具备了将“眼镜”特征转化为"一颗痔"特征的本领, 相应地,
G
2
G_2
G2?通过学习,具备了将“一颗痔”特征转化为"眼镜"特征的本领),它在大部分时候直接传递原始特征。
以上仅仅为单边CycleGAN,其作用为约束了在生成和判别的过程中,domain X的初始状态应该和cycle过程之后的输出保持一致,如下图所示: 同理,将X和y视成是等价的两类数据,我们可以构造出另一边CycleGAN,即将y作为原始输入,然后构造
G
3
G_3
G3?和
G
4
G_4
G4?分别学习
y
→
X
y \rightarrow X
y→X 和
X
→
y
X \rightarrow y
X→y 的映射,中间生成的向量X交由判别器D,观察其是否来自于domain X. 如下图所示。
合起来即为CycleGAN模型,如下图:
|