作家: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社区查看最新的论文及其代码。
更多信息请访问格物钛官网