作者:Ta-Ying Cheng,牛津大学博士研究生,Medium技术博主,多篇文章均被平台官方刊物Towards Data Science收录
即使在人工智能已经逐渐普遍的今天,有许多人对机器学习相关的概念仍是一知半解。虽然机器学习论文层出不穷,几乎每过一阵子都有新技术和新想法发表,然而绝大多数新词只能沦为人们交口传诵的人工智能术语,至于这些词究竟是什么意思则不做深究。本文将用通俗的方式,为大家介绍耳熟能详却分辨不清的四个机器学习核心概念:监督式学习、半监督学习、无监督学习和自监督学习,并将用实例简介它们试图解决的问题,希望能带大家走出机器学习的入门迷雾!
监督式学习
图 1. 监督式学习图示
制作:作者,素材:Unsplash
图片翻译:Dataset 数据集、Input 输入、Label 标注、Dog 狗、Cat 猫、Tasks (e.g., Classification, Regression) 机器学习任务(如分类、回归等)
监督式学习(supervised learning)是最为常见的机器学习方法,一般提到机器学习指的都是监督式学习。
简而言之,监督式学习就是给机器提供一组输入-输出对,这样模型能够学习一个中间系统,使得输入映射到正确的输出。
我们可以举一个简单的例子来说明监督式学习的工作方式。如图所示,我们需要确定图片中的动物是猫还是狗(也可以是其他动物),那么我们首先就需要拿到用于训练模型的动物图片数据集以及这些图片所对应的“类”(class),也就是我们常说的标注(labels)。
按照目前流行的方法,有了给定的输入-标注对之后,我们就将直接拿这组数据来训练我们的深度神经网络(如卷积神经网络)。训练后,模型会对已有的图片给出自己的标注预测,然后我们需要计算模型的预测和原有的正确标注之间的差别(称作可微损失),再把这些差别反馈给模型来调整其参数并优化最终的预测结果(这个过程称为反向传播,backpropagation)。
总的来说,监督式学习是所有机器学习方法中最显而易懂的方法,这种方法默认所有图片的标注都是给定的,由此能让机器学习的过程变得更加简单。
半监督学习
图2. 半监督学习图示
制作:作者,素材:Unsplash
图片翻译:Dataset 数据集、Labelled 已标注、Input 输入、Label 标注、Dog 狗、Cat 猫、Unlabelled 未标注、Tasks (e.g., Classification, Regression) 机器学习任务(如分类、回归等)
监督式学习的想法很强大也很简单,只需要我们手头上的数据集有着完整且正确的标注就可以了,但现实并非总是如此美好。随着AI行业的发展,人们越来越认识到标注是一个高度劳动密集型的环节,数据集的标注并非总是完美。在成本不足的情况下,手头上的数据可能只有部分有标注甚至可能完全没有标注。
半监督学习的诞生正是为了解决问题:我们如何在只有一小部分数据有标注的情况下做到四两拨千斤的效果呢?
回到刚刚说的图片标注任务,假设我们手头上的数据集只有部分图片有标注,其余那些没有标注的数据还有用吗?
答案是肯定的,我们可以用一种叫伪标签(pseudo-labeling) 的方法来利用这些数据。
对于刚刚的任务,我们可以先按照通常的监督式学习方法用有标注的数据来训练一个分类模型,然后我们用这个模型来为剩下的数据做标注。如果模型有充分的把握认为自己的标注是正确的,那么我们就把这部分预测标注当作是正确标注添加回原来的有标注数据当中(实际上这些预测标注只是伪标签)。由此,我们再重复原来的模型训练过程,一遍遍地往返迭代,直到所有的数据都被用上并且最终的分类模型达到其最优性能。
当然,这种方法听起来非常聪明,但在实际操作中很容易出问题。如果原有的已标注数据实在有限,那么模型很有可能会一上来就给出错误的伪标签,导致最终的训练结果完全失败。因此对于半监督学习来说,确定模型至少有多大的把握才能将伪标签加入训练数据中是至关重要的。
为了避免训练初期的过拟合,我们也可以利用数据增强这一强大技巧来增加原始训练数据的大小,为模型训练提供分布更广的数据。如果大家对数据增强感兴趣,可以参看我们之前发布的关于mixup的文章。
无监督学习
图3. 无监督学习图示
制作:作者,素材:Unsplash
图片翻译:Dataset 数据集、Tasks (e.g., Clustering) 机器学习任务(如聚类等)
既然我们已经知道怎么样用最少的标注达到最大的训练效果,那么一个很自然又很大胆的想法便呼之欲出:能不能使用完全无标签的数据进行学习呢?
无监督学习完全站在另一个极端,输入的数据没有任何对应的标注,训练的最终目标是要找到数据集内部的分布规律。
无监督学习就是针对完全无标签的数据进行的学习方法,一般用在客群划分、推荐算法等各种分类任务当中。
而这时由于我们手头上没有能够给机器进行验证的正确标注,那么我们需要通过聚类(clustering) 的方法来找到数据集内部的规律。也就是说,对于一个给定的数据集,我们需要找到这些数据都共同存在什么样的特征,然后按照这些特征对数据进行分类。比较常用的聚类方法有K-Means和K-Medoids等。
聚类听起来似乎非常简单,但能够为实际生产中的问题提供非常有用的信息。比如,当我们在设计推荐算法系统时,我们可以直接根据用户的使用习惯来将他们进行分类,然后便可以推送用户喜欢的内容给他们。在此过程中,我们完全不需要去知道每个用户具体的兴趣是什么,一切分类工作都可以交由模型进行处理。
自监督学习
图4. 自监督学习图示
制作:作者,素材:Unsplash
图片翻译:Dataset 数据集、Tasks (e.g., Classification, Regression) 机器学习任务(如分类、回归等)
自监督学习听起来和无监督学习非常像,但自监督学习更多地用来应对那些传统上使用监督式学习进行处理的任务。
自监督学习在某种程度上也可以算作是一种无监督学习,因为它不需要利用训练数据给定的标注信息。不过,自监督学习不用于聚类任务,而是专攻像图片分类这样传统上使用监督式学习进行处理的任务。
自监督学习的目标听起来似乎是天方夜谭,但近年来许许多多的研究已经提出了非常创新的思路来实现对传统监督式学习任务的无标注的学习。其中一种思路就是著名的对比学习(contrastive learning),通过比较正例和负例样本来进行学习。简单来讲,在对比学习中我们会首先对同一图像进行数据增强操作。比如用同一张小狗图片用不同的增强方式生成多张新的小狗图片,这些图片我们用作正例样本,而数据集中的其他图像我们都当作是负例样本。对比学习模型在训练过程中需要做的事情,便是尽可能地在模型内让正例样本离彼此更近,同时让正负例样本之间更远。由此神经网络可以学习到这些正例样本的本质特征,这样的学习方式使得图像分类这样原本需要ground truth(可以理解为正确标注)的任务在自监督学习中成为可能。
小试牛刀
如果你想要亲自上手来体会这些不同概念之间的区别,可以先找到自己想要训练的数据集,然后自行通过移除部分或所有标注的方式来体验这些学习方法的区别。
我们的数据集如果是直接从torchvision中调用的,会带有已做好的标注。如果我们想要尝试半监督或自监督学习,可以试着自己写一个DataLoader(数据加载器)。另外,我们还可以使用格物钛公开数据集平台来简单方便地获取数据集。格物钛的平台提供了机器学习最为常用的公开数据集,可以免费下载,还可以在浏览器中直接查看数据集内容。格物钛还提供了实用的API供我们将数据集的获取接口直接集成到自己的代码当中,让设计DataLoader变得更加简单。建议手头上只有一台笔记本电脑的同学先用MNIST和CIFAR-10这样的数据集进行测试,因为这两个数据集需要的算力相对而言更少一些。
结语
希望看到这里你已经掌握了这四个概念之间的联系及区别!如果想要进一步了解自监督学习方向的最新进展,可以到paperswithcode社区查看最新的论文及其代码。
更多信息请访问格物钛官网