对偶学习的生成对抗网络 (DualGAN)

近年来,生成对抗网络(Generative Adversarial Networks, GAN)成为了人工智能领域最为炙手可热的研究方向。GAN 的想法最早由 Ian Goodfellow 在 2014 年提出。GAN 用对抗的方法,同时训练了一个「生成模型(G)」与一个「判别模型(D)」,在学习的过程中,生成模型的优化目标是尽可能地去生成伪造的数据,从而获得真实数据的统计分布规律;而判别模型则用于判别给出的一个输入数据到底来源于真实数据还是生成模型。最终,当一个判别模型无法准确分辨生成模型所生成的数据是否为伪造时,此时我们认为判别模型与生成模型都已经提高到了较高的水平,生成模型所生成的数据足以模仿真实世界中的数据。因此,当我们使用 GAN 来「识别」图片时,我们不但识别了图片的内容,还可以生成各种不同内容的图片。费曼曾经说过:“What I cannot create, I do not understand.”生成模型为人工智能的研究提供了一种“create” 的可能性,因而引起了广泛的关注。

值得注意的是,生成模型所生成的结果并非是凭空来产生,更多的时候,很多图像处理和计算机视觉的问题都可以被看成是一种「图片翻译」的问题,例如一张人脸的照片以及与之对应的一张素描之间的相互转换就可以看成是从一张图片「翻译」为另外一张图片。事实上,更一般的,边界探测,图像分割,图片的风格化和抽象化等等都可以被视为是这样一种「翻译」问题。

而说到「翻译」,我们很容易会想到其在自然语言处理领域中的一些应用。近年来在机器翻译领域也有许多有意思的新进展。其中一种新的做法是对偶学习(dual learning),这种学习的方式为解决无监督学习中遇到的困难提供了新的思路。简要介绍一下这种学习方法的基本思路:假如现在小明只能讲中文, Alice 只会讲英文,他们两个人虽然都不懂对方的语言,但是他们希望能够可以中英文之间的两个翻译模型(中译英,英译中)。怎样可以实现他们的这个目的呢?首先,对于一个英文的句子,Alice 先用翻译工具将其翻译为中文,由于她并不懂中文,于是她直接把句子发给了小明;但小明又不懂英文,于是小明只能按照中文的语言习惯判断这个句子是否通顺,这可以帮助小明判断这个「英译中」的系统是否做得很好,随后,小明把他修改过的句子再用「中译英」的系统翻译成英文,并把英文句子发给 Alice。Alice 虽然不懂中文,但她能比较经过这一大圈的翻译之后,得到的新句子与最初的版本是否相似。这一信息可以帮助判断是否两个翻译模型都表现良好。随着「对偶学习」过程的持续进行,未标注的数据也得到了充分的利用,利用这些信息,可以帮助提高对偶任务中的两个翻译模型。这种对偶学习的想法为进一步改进现有的翻译模型提出了崭新的思路。

如果把这种对偶学习的方法也用到基于 GAN 的图片的「翻译」上,会得到怎样的效果呢?这会是一个非常有趣的问题。不久前,我的本科同学易子立(@Maoren Liu)和他的合作者们借用了对偶学习的思路,设计了一种名为对偶 GAN(DualGAN)的算法。说来有趣的是,我今年年初在写电子书《人工智能是怎样设计的》时,当时也与易子立讨论过电子书有关内容的选择和组织,在组织里面的内容时,考虑到这两种算法表现出的无监督特性,我有意地将对偶学习和 GAN 的介绍相邻排列在一起。


如果说原来的 GAN 是将图片的「识别」问题扩展为「生成」和「判别」两个问题,那么 DualGAN 算法就是将基本的 GAN 再进一步扩展为两个相互耦合的的 GAN,其中存在着两个生成器和两个判别器。以素描与照片之间的相互「翻译」为例进行说明,其中第一个生成器 G_A 可以将素描(U)翻译为照片(V),G_A 所完成的任务正是我们最终想要完成的目的,与这个生成器对应的有一个判别器 D_A。与此同时,构建与之对偶的另一个生成器 G_B,将照片转换为素描,与这个生成器所对应的同样有一个判别器 D_B

在这样的基本框架下,接下来我们来考虑怎样利用对偶学习的思路训练 GAN。首先我们介绍「生成」的思路,通过生成器 G_A 可以对素描图片 u 进行翻译,最终得到类似照片的图片,其中包含的噪声为 z,翻译的结果即为 G_A(u,z) ,把这个翻译的结果扔给另一个专门用于生成素描图片的生成器 G_B,得到的结果 G_B(G_A(u, z),z') 即为对原有的素描图片的一次重构,这里的 z' 同样是噪声。接下来考虑与这一过程对偶的一个过程,首先将照片 v 用生成器 G_B翻译为素描图 G_B(v,z') ,然后再用生成器 G_A 对生成的素描图进行翻译,得到 G_A(G_B(v,z'),z)


接下来介绍「判别」的思路,与生成器 G_A 对应的判别器 D_A 判断一张图片是否像一张照片,而与生成器 G_B 对应的判别器 D_B 则判断一张图片是否像一张素描图。对应于上面提到的对偶的生成过程,系统最终希望最小化重构误差,即希望最小化在两次迭代后得到的结果与原始图片之间的误差|| G_A(G_B(v,z'),z)-v |||| G_B(G_A(u,z),z')-u ||

根据这一基本思路,我们就可以真的来对图片做各种处理了。下面了展示这一算法得到的一些结果。这些相关结果分别与真实情况(ground truth)和其它算法得到的结果进行了比较,可以发现这一算法的确有着不错的表现。

(1)日景图片与夜景图片之间的转换

(2)图片和图片标签之间的相互「翻译」:对图片加标签和通过图片标签重建图片

(3)素描与照片之间的相互「翻译」

(4)地图与卫星图片之间的相互「翻译」

然而,还有一些情况,我们仅仅只能进行一些「翻译」,而无法找到正确的结果(ground truth)进行比较,例如图片风格的改变就属于这一类问题,然而这些问题本身就是一种没有正确答案的问题。这些问题尤为重要,因为这些问题涉及到真正的无监督学习。尽管「风格」的转换本身无法找到很好的度量方式,然而在某些特殊的问题上,仍然有一些检测的方法,例如用 AMT 材质感知测试,可以对图片中物品的材质进行一些「客观的」检验,这可以作为衡量「翻译」效果的一种度量。在这些应用方面,DualGAN 有着明显比 GAN 更好的无监督学习表现。

(5)中国画—油画之间的翻译

(6)金属、石头、木料、皮革、织物等材质之间的转换

这种基于对偶学习的 GAN 为图片与图片之间的「翻译」提供了新的思路,尤为重要的是,通过将 GAN 进一步进行扩充,这种方法把无监督学习的性质利用到了极致,因而在理论上具有很重要的意义。尽管这一算法目前的表现仍然有有待提高,然而与其它 GAN 的变形算法相比,例如与条件 GAN(conditional GAN, cGAN)相比,DualGAN 即使是面对完全没有加标签的数据,也可以产生足以与之相比的表现,这暗示了无监督学习的巨大潜力。考虑到 cGAN 等算法的训练需要引入大量的人工标签,DualGAN 等无监督学习的算法很可能可以大大降低加标签的成本,在进一步提高稳定性之后,值得相信其在未来有着重要的应用前景。

这篇论文的思路与最近很火的工作 Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks 非常类似,但其实是独立的、来源于不同出发点的工作。在看到那个工作的有关介绍后,我觉得应该特别有必要站出来介绍一下易子立的这个工作。目前,这篇关于 DualGAN 算法的论文已经投稿到 ICCV 会议,原论文的 arXiv 地址为:Unsupervised Dual Learning for Image-to-Image Translation ,这个项目的程序可以到以下 GitHub 链接获取: duxingren14/DualGAN

编辑于 2017-04-11

文章被以下专栏收录

    本专栏将讨论各种生命现象中的「设计原则(Design Principle)」问题,即讨论那些在进化中可能影响重大的一些「优化」。