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