10.5.1  机器学习的生成式

有人把机器学习根据其功用分为判别式和生成式两种。判别式机器学习,当然是帮助我们进行判断、预测、分类,解决具体问题,这时的机器就像是兢兢业业的工人。而生成式机器学习,像是艺术家,比如写小说的作家、天才的画家、拉小提琴的音乐家……

把梵高名画《星夜》运用在一张图像上进行风格迁移的结果

AI发展到一定的阶段,才开始进入这些“文艺”领域,这算是一种巨大的进步。

生成式深度学习的成功范例之一是Google工程师Alexander Mordvintsev用卷积神经网络开发出来的Deep Dream。它通过在输入空间内梯度上升将卷积神经网络的层激活最大化,在内容图像和风格图像之间风格迁移,产生夸张的梦境效果。

还有人通过循环神经网络根据对文字和序列数据的学习生成文本、创作音乐,实现智能性的聊天活动等。

例如,一个LSTM网络学习了《爱丽丝梦游仙境》的文本之后,如果输入种子:

herself lying on the bank, with her

head in the lap of her sister, who was gently brushing away s

神经网络就可以继续自主创作出下面的文本:

herself lying on the bank, with her

head in the lap of her sister, who was gently brushing away

so siee, and she sabbit said to herself and the sabbit said to herself and the sood

way of the was a little that she was a little lad good to the garden,

and the sood of the mock turtle said to herself, 'it was a little that

the mock turtle said to see it said to sea it said to sea it say it

the marge hard sat hn a little that she was so sereated to herself, and

she sabbit said to herself, 'it was a little little shated of the sooe

of the coomouse it was a little lad good to the little gooder head.and

看起来有点像是“痴人的梦呓”—不过这也算是一种艺术吧!

上述这些生成式机器学习的创造性的来源都是潜隐空间。深度学习模型擅长对图像、音乐和故事的潜隐空间进行学习,然后从这个空间中采样,创造出与模型在训练数据中所见到的艺术作品具有相似特征的新作品。

10.5.2 生成式对抗网络

在生成式机器学习领域的这些“天才艺术家”中,最为耀眼的莫过于一个叫作生成式对抗网络(Generative Adversarial Network,GAN)的技术。这个技术和刚刚介绍过的自编码器有异曲同工之妙。自编码器是自己监督自己,在反复迭代中通过神经网络复制出来最佳的自我;而GAN是两个神经网络之间“勾心斗角”,一个总是要欺骗对方,另一个则练就“火眼金睛”,以免被对方欺骗。

同学们嘴张得很大。小冰很平静地问:“咖哥,你知道吗?这个机器学习课总让我有一种魔幻现实的感觉,在恍惚间质疑自己是不是穿越到别的课堂了……”

咖哥说:“你并没听错。这就是GAN的思路。”

GAN是由Ian J.Goodfellow等人在2014年提出的。2016年的一个研讨会上,Yann Le Cun将GAN描述为“过去20年来机器学习中‘最酷’的想法”。它的基本架构是两个神经网络在类似游戏的设定下相互竞争。举例来说,博物馆里有一批名画,包括达·芬奇的《蒙娜丽莎》之类的画作。这批名画就作为训练集。那么一个神经网络(生成器网络)学习了这些名画,就开始制造赝品;而另一个神经网络(判断器网络)则负责鉴定,分辨这个画是来自博物馆的原始数据集,还是来自造假网络的伪造画作。

开始的时候,两个网络水平都不高,生成器网络制造出来的画作和原作品差别很大(通过两者的向量空间来衡量其差异),判断器网络不费吹灰之力即可发现赝品。但是慢慢地,生成器网络失败多次后水平逐渐提升了,此时判断器网络也就开始花费更多力气练就火眼金睛。两个网络你来我往,互相印证,最后成就了彼此。最终的结果是出现了一批与原画质量相当接近的高仿品。

因此,在给定训练集之后,GAN能够通过学习生成具有与训练集相同的统计特征的新数据,从而以假乱真。例如,在真实照片集上训练出来的GAN可以生成新的照片,对人类观察者来说,看起来会感觉所生成的新照片也是完全真实的。GAN所生成的这些难辨真伪的图像,同学们上网一搜,比比皆是。

GAN最初提出时,被归类为无监督学习的一种形式,但GAN如今在半监督学习、监督学习,以及强化学习中都有应用。毕竟,机器学习分类边界本身就是模糊的。

GAN的结构中最主要的就是一个生成器(generator)网络和一个判别器(discriminator)网络,再加上一个损失函数,如下图所示。

GAN的结构

■生成器网络:以潜隐空间中的一个随机点作为输入,并将其解码为一张合成图像。

■判别器网络:是生成器网络的对手(adversary),以一张真实或合成图像作为输入,并判断该图像是来自训练集还是由生成器网络创建。

训练生成器网络的目的是欺骗判别器网络,训练判别器的目的是防止被生成器网络欺骗。经过左右手互搏式的训练,双方都越来越强,生成器网络就能够生成越来越逼真的图像。训练结束后,生成器网络就能将其潜隐空间中的任何一个向量转换为一张像样的图像。

不过,与VAE相比,GAN中的潜隐空间是不连续的,无法保证其总是具有有意义的结构。而且, GAN的训练也很不容易。

GAN的实现方式和具体应用非常多,不仅能够生成图像,还可以生成音乐、文字等。

在Keras中,有很多种类型的GAN,包括Auxiliary Classifier GAN、Adversarial Auto-Encoder、Bidirectional GAN、Deep Convolutional GAN、Semi-Supervised GAN和Super-Resolution GAN等,不一而足。

通过Git Hub上的开源链接,你们可以去学习各种GAN的架构,并在自己的数据集上试着使用它们,或者去研究这些GAN的Python源码,尝试进一步地优化它们。