1.3 无监督学习
在有监督学习中,对数据进行划分的行为称为分类。在无监督学习中,将数据划分到不同集合的行为称为聚类。无监督学习所用的数据集有数据特征,但没有标签。
1.3.1 无监督学习概述
无监督学习会从大量的训练数据中分析出具有相似类别或结构的数据(即数据的相似性),并把它们进行归类,划分成不同的集合。这就好比我们对乐曲进行分类,或许我们并不清楚自己听到的乐曲是什么类型、什么种类的,但是通过不断地欣赏,我们能够发现不同乐曲中相似的曲调等,并在此基础上将它们划分为抒情的、欢快的或悲伤的。
无监督学习为深度学习乃至人工智能的训练都提供了很大的帮助。专业的带标签数据既稀少又昂贵,有时候还不那么可靠。在这种情况下,无标签数据学习展现了自己的价值——不仅量多、便宜,甚至可能挖掘出我们未曾想到的数据特征或关联,而这使得无监督学习的潜在价值更具探索性。无监督学习的成功案例比有监督学习的成功案例少了很多,下面以生成对抗网络(generative adversarial networks,GAN)为例来说明。
1.3.2 生成对抗网络
2014年,Ian J.Goodfellow等人发表的文章生成对抗网络就是一个典型的无监督学习的例子。它讲述了一个通过对抗形成“生成模型”的框架:模型G负责生成数据,模型D负责判断获取的数据源于模型G的概率,然后根据结果更新网络权重;重复这个过程,直到达到目的。这个过程好比一个造假,一个验伪——造假人不断提升自己的造假技术,试图以假乱真;验伪人则不断提高自己的眼力,尽可能辨别真伪。下面我们举一个生活化的例子来帮助大家理解GAN。
村西有个新手陶艺家,想要做一些优秀的陶艺作品并拿到陶艺展上去展示,但由于水平有限,他没办法做出好的陶艺作品。村东恰好有个新手鉴赏家,想要成为出色的陶艺鉴赏家,却一直为自己的鉴赏能力不高而苦恼。村长为了帮助他们实现愿望,给他们出了个主意。
陶艺家仿造村长提供的陶艺名品,仿品由村长混入真品,拿给鉴赏家鉴赏。鉴赏家根据自己现有的基础来判断陶艺作品是否是真品。然后,村长会告诉鉴赏家哪些是真品、哪些是村西陶艺家制作的仿品。同时,村长让他们共用一个得分指标(损失函数):鉴赏家鉴赏得越准确,得分就越高;反之,鉴赏家越难判断作品的真伪,得分就越低。鉴赏家的目的只有一个——不断提升鉴赏能力,提高得分。陶艺家的目的也只有一个——不断提高自己的制作能力,让鉴赏家难以分辨真伪,从而降低鉴赏家的得分。
开始,当陶艺家的仿品混入真品中时,鉴赏家很难辨别真伪,因而得分很低。好在有村长相助,指明作品的真伪,鉴赏家便加倍努力,不断提升自己的鉴赏能力,得分逐渐提高。陶艺家一看鉴赏家的得分提高了,就知道自己的仿品已经能被分辨出来了,自己的陶艺水平还不足以以假乱真,于是也加倍努力,仿造出比上一批更好的陶艺作品,让村长混入真品中后给鉴赏家鉴赏……如此往复,陶艺家和鉴赏家都在对抗竞争中提升了自己的能力。
GAN也是这样的。新手陶艺家就是生成模型G(generative model),用于生成陶艺仿品。将仿品和真品混合在一起,交给新手鉴赏家来判断真伪。新手鉴赏家就是判别模型D(discriminative model)。判别模型D(新手鉴赏家)会给出真伪判断结果,同时更新得分指标。生成模型G(新手陶艺家)不断降低得分指标,判别模型D不断提升得分指标,就形成了对抗。如图1.11所示,其过程可以归纳为以下五步。
图1.11 对抗过程
①生成模型根据随机产生的数据生成伪造数据(仿品);
② 工为真实数据(真品)和伪造数据打标签{真,伪}(或者{1,0}),形成有标签的数据集;
③ 将两个数据集混合后,交给判别模型进行有监督训练,由判别模型对输入的数据进行真伪判断;
④判断结果将影响评价指标,从而促使模型更新参数,再次改变指标;
⑤重复①~④,直至达到最大迭代次数或者目标效果。
真实数据(真品)x符合概率分布Pdata且不变,而伪造数据(仿品)G(z)符合概率分布Pg。GAN在这个过程中所做的事情实际上就是训练概率分布Pg,使Pg尽可能收敛于Pdata,此时生成模型生成的伪造数据与真实数据就难以区分了。其总损失函数如下式所示。
初始化输入噪声数据z~Pz(z)被定义为先验概率分布(例如高斯分布或者均匀分布),它将输入生成模型G(z),形成伪造数据,伪造数据符合某一分布Pg。真实数据x将由判别模型D(x)进行判别,输出数据为“真”的概率,其值属于[0,1]。同样,x符合分布x~Pdata(x)。
在对抗训练中,GAN采用评价函数V(D,G)来评价当前模型的训练程度,这也是两个模型对抗的着力点。对于生成模型,生成数据被判真的概率越大越好,即D(G(z))越大越好。判别模型希望尽可能正确地辨别真伪,使得D(x)越准确越好。但判别模型不希望D(G(z))取1(在公式中体现为1-D(G(x))取0),因为这种情况表示判别函数已经无法判别真伪,判别能力有待提高;同时,D(x)不能是0,因为这种情况表示判别模型稚嫩,“真实”的数据都被当成“伪造”的数据了。
在实际训练过程中,两个模型不是同时训练和更新的,而是分开训练和更新的——有点回合制拔河的意思。
对于判别模型,G不变,maxDV(D,G)表示使V(D,G)最大化,损失函数的公式如下,此处的G就是“伪造”的数据。
那么,D(x)最好能取1,而1-D(G)也能够取1(此时D(G)取0,伪造数据被准确判伪),此时V(D,G)最大。无论是真实数据被误判为伪造数据(D(x)=0),还是伪造数据被误判为真实数据(1-D(G)=0),都会使得log函数的结果趋向于负无穷。因此,要想优化判别模型,必须使评价函数最大化。
对于生成模型,D不变,minGV(D,G)要使得V(D,G)最小,损失函数的公式如下。
上式的第一项中不含G,因此可以忽略它的影响。若1-D(G(z))=0(即D(G(z))=1),伪造数据被判真,对数的影响会使得整个函数的值趋向最小,从而达到目的。
minGV(D,G)要使V(D,G)最小化,而maxDV(D,G)要让V(D,G)最大化。两者相互作用,形成对抗,但不是同时对抗,而是在对方当前实力的基础上自我增强后进行对抗,这便是生成对抗网络。