一份人人都可以读懂的主动学习入门指引

主动学习是最近的流行主题之一,但是很多人似乎都没有真正完全理解主动学习到底是什么。今天的文章将解释主动学习背后的原理,它的好处以及它如何适合现代机器学习研究。

致谢与引用

写文章之前要特地感谢 侯超群 学长给我提供的帮助与支持。我从通读了学长在CSDN上的主动学习入门文章之后才对主动学习有了基础的概念性理解。并且学长的研究生毕设和我的毕设相似度很高(这也是我之前没有料到的),非常感谢学长能够孜孜不倦给我提供指导意见和帮助!

动机

我的本科毕设其中的一部分涉及主动学习算法的研究,但是在搜索调研阶段,我发现国内对于主动学习这一领域的研究少之又少,并且大部分论文对于主动学习基础知识的介绍基本都是一笔带过,博客更是基本没有。这对于需要入门这个领域的人来说无疑是非常不好的。

在当今深度学习如此火热并且需要大量正确标注的数据集的时候,如果你能够正确利用主动学习,那它将成为你的一个非常强大的工具,它可以让你在缺少标签数据的情况下快速完成数据集的标注,大大加快你的效率,帮你节省大量的人力物力。

这篇文章就是就是以此为动机写下的,希望能为以后入门主动学习的研究者们提供一点点方便。

引入

相比于一上来就直接抛出定义和概念,我觉得最好的方式是先引入一个简单的例子,让你明白主动学习到底是如何工作的。

可以看到上面最左边的图片(从这篇论文中获得),有两个聚类,分别是绿色和红色。精明的读者会知道这是一个分类任务,你想创建一个将绿色和红色形状分开的“决策边界”(在这种情况下,这只是一条线)。首先假设你不知道数据点的标签(也就是你不知道他们是红色或绿色),尝试为每个数据点查找标签将非常昂贵。所以,你希望对一小部分点进行采样并找到这些标签,然后将这些标记的数据点用作分类器的训练数据。

在中间图片中,首先通过随机采样一小部分点并对其进行标记,将逻辑回归用于对形状进行分类上。但是,你看到使用逻辑回归(也就是那条蓝线)创建的决策边界并不是最佳的。这条线明显偏离红色数据点并进入绿色数据点的区域。这意味着将有许多绿色数据点被错误地标记为红色。这种偏斜是由于用于标记的数据点选择不当所致。在最右边的图片中,再次使用逻辑回归,但是这次,你使用主动学习查询策略选择了一小部分点。这个新的决策边界要好得多,因为它可以更好地分离两种颜色。这种改进来自选择更好的数据点,因此分类器能够创建一个很好的决策边界。

主动学习的查询方法是如何选择出这样优秀的数据点是主动学习中的主要研究领域之一。稍后,你将看到一些最受欢迎的查询数据点的方法。

主动学习:定义和概念

主动学习的主要假设是,如果其算法可以自行选择数据并从中学习,那么与传统方法相比,它的性能就要好得多,需要的训练数据也会少得多。

但是这些传统方法又是什么呢?

这些方法是从基础分布中随机采样收集的大量数据的任务,并使用此大型数据集来训练可以执行某种预测的模型。我们一般把这种典型的方法称为被动学习。

被动学习中比较耗时的任务之一是收集有标签的数据。在许多情况下,可能会有限制因素阻碍收集大量有标签的数据。

让我们以研究胰腺癌为例。你可能想要预测一个病人是否会得胰腺癌,但是,你可能只有机会给一小部分病人做进一步的检查来收集特征。在这种情况下,我们可以根据一定的标准来选择患者,而不是随机选择。一个标准的例子可能是病人是否饮酒并且超过40岁。这个标准不一定是静态的,但可以根据以前病人的结果而改变。例如,如果你意识到你的模型在预测50岁以上的胰腺癌方面做得很好,但是很难对40-50岁之间的胰腺癌做出准确的预测,这可能就是你的新标准。

根据我们目前收集的胰腺癌数据,来选择哪些患者被进一步检查来收集特征(或更普遍的情况)的过程称为主动学习。

利用专业术语来讲:主动学习(active learning)是人工智能的一个子领域,在统计学领域也叫做查询学习、最优实验设计。该算法包括两个基本模块:学习模块和选择策略。主动学习通过“选择策略”主动从未标注样本集中挑选部分样本,交给相关领域专家进行标注,然后将标注样本增加到训练数据集给“学习模块”进行训练。当学习模块满足终止条件后停止,否则不断重复获得更多的标注样本进行训练。

主动学习的优点:能够很好地处理较大的训练数据集,减少人工标注成本。

概念比较

相关的算法还有很多,简单做一些比较:

主动学习:需要人工介入。模型筛选未标注数据并主动向专家提供索要标记。

半监督学习:指在训练数据十分稀少的情况下,利用没有标签的数据,提高模型效果的方法。

在线学习:接收新的样本,更新模型,前提样本可以直接使用,主要在于模型训练的效率。

强化学习:接收状态的反馈,并调优模型,前提是反馈可衡量,可捕捉。

使用情景

在主动学习中,学习器通常会在以下三种情景或设置中查询实例的标签。在文献中考虑的三个主要情景是:

Membership Query Synthesis (成员查询综合)

Membership Query Synthesis 是指模型可以生成新的样本,即模型可以操控样本的生成。这类似于人在学习的过程中进行举一反三,自己生成一些新的问题,然后通过更深入的研究新问题来提高自己的认知。

Stream-Based Selective Sampling (基于流的采样)

Stream-Based Selective Sampling 是指我们一次选择一个未标记的实例,让模型决定是要查询实例的标签还是根据它的信息量拒绝它。要确定实例的信息量,可以使用查询策略(后续会讲到)。按照上面的描述,你可以从一组未标记的图像中选择一个图像,确定它是否需要标记或丢弃,然后对下一个图像进行重复。这一过程类似于人每天都在接受新的概念和定义并从中选择出需要的内容进行专门学习,不需要的则抛弃或忘记。

Pool-Based Sampling (基于池的采样)

Pool-based Sampling 是指所有的数据均存在于一个大的未标记数据池。然后根据一些信息度量的方法从池中抽取实例。此度量方法应用于池中的所有实例(如果池非常大,则应用于某个子集),然后选择信息最丰富的实例。这是在主动学习社区中最常见的情景。 继续使用上述两个情景的例子, 将对所有未标记的数字图像进行排序,然后选择最佳(最具信息量)的实例并请求专家给它们打上标签。

在实际中, pool-based sampling 在三种方法中所使用的最普遍。可以说最近的研究中,主动学习领域的大部分文章和方法主要是基于 Pool-based Sampling ,但真正的主动学习,前面两种场景与人类学习的模式更为接近。

查询策略

主动学习和被动学习之间的主要或核心区别是, 主动学习是基于过去的查询和来自这些查询的响应(标签)来查询实例 。正如之前所说的,所有的主动学习场景都需要对未标记的实例进行某种信息度量。在这一节中,我将解释三种常见的查询实例的方法,由于他们都使用了概率进行衡量,所以也被称为不确定性抽样(对于更多的查询策略和关于主动学习的更深入的信息,我推荐这篇论文:《Active Learning Literature Survey》

我将使用下面的表来解释查询策略。此表显示两个数据点(实例)和每个实例具有每个标签的概率。标签为A、B和C的概率:d1 分别为 0.9 、0.09 和 0.01 , d2 为 0.2 、0.5 和 0.3 。

实例标签A标签B标签C
d10.90.090.01
d20.20.50.3
  • 最不置信策略(LC):在这种策略中,学习器选择它对最有可能的标签最不置信的实例(也就是说概率最大的标签其概率都不是很大)。看看表格上,学习器对于d1的标签是A很有信心,因为A的概率为 0.9,但是,对于d2的标签就没有那么自信了,因为概率非常分散,它认为它应该贴上B标签,可是B的概率只有 0.5 。因此,学习器会选择d2来查询它的实际标签。
  • 边缘采样策略(MS):最不置信策略是只考虑最可能的标签,而忽略了其他标签的概率。边缘抽样策略通过选择在第一和第二最有可能的标签之间差异最小的实例来克服这个缺点。看看 d1 ,它的第一和第二最可能的标签之间的差异是0.81 (0.9 - 0.09),d2 是0.2 (0.5 - 0.3) 。因此,学习器将再次选择 d2 来查询它的标签 。
  • 熵采样(ES):为了尽量使用所有可能的标签概率,你使用了一种叫做  的方法。依据样本所属各个类别的概率,根据下面公式计算熵值,若熵值小于某一阈值,则认为类别不明显。 从我们的例子来看, d1 的值为 0.155 然而 d2 的值是 0.447。因此,学习器将再次选择 d2

\[ e = \sum_{i=1}p_{i}logp_{i} \]

组合+实际应用

读到这里,你已经阅读了组成主动学习的各个主要部分。可能看上去会有一些困惑或者很难把它们组合到一起。那么在这个部分,你会完整经历一个例子——尽管它很简单。

第 0 步:获取数据

这一步可能看起来非常琐碎,不管怎样,确保你收集的数据能够代表数据集真实分布是很重要的。换句话说,尽量避免有很多“歪斜”的数据。 这里需要注意:因为诸如法律、时间和可用性的限制,实际在生活中获取一个完全具有代表性的数据是不可能的。

在这个例子中,你会有以下5个数据点。特征A和特征B代表一个数据点可能具有的特征。非常重要的一点是你要注意我们收集的数据是无标签的。

实例特征A特征B
d1100
d249
d385
d433
d555

第 1 步:分为种子和未标注的数据集

接下来,你需要把我们的数据分为 一个非常小的我们将要标记的数据集 和 一个大的未标注数据集 。在主动学习的术语中,我们把已标记的小数据集称之为种子。通常,未标记的数据集没有确定的数量或者确定的百分比。一旦你确定了将要作为种子的数据集,你就要标注他们。

注意:在大多数文献中,研究者们不使用神谕(Oracle)或者专家来标注这些实例。通常他们拥有一个完全标注的数据集,使用其中的一小部分作为种子(因为他们已经有了标签了)并使用剩下的部分作为未标记数据(就好像他们没有被标记过一样)。每当学习器选择一个实例来向神谕查询时,他们只需要简单地查找这个实例的标签就行了。

继续说这个例子,你选择了两个实例作为种子,d1和d3。在这个情况下可能的标签是“Y”和“N”。

种子/已标注数据集

实例特征A特征B标签
d1100Y
d385N

未标注数据集

实例特征A特征B
d249
d433
d555

第 2 步:训练模型

在分开数据集之后,你像训练一个普通的机器学习工程一样使用种子来训练你的学习器(使用交叉验证之类的方法)。另外,所使用的学习器的类型将基于你对这个领域的了解,通常,你使用的学习器会对这个实例是否有确切的标签返回一个概率值,这个概率值也是你将在查询策略中使用的。

在这个例子中,你可以使用任何你想用的分类器并且你将在二分类实例上训练。

第 3 步:选择无标签数据

一旦你训练完了你的学习器,你就准备好了去选择一个实例或者多个实例去查询了。你必须决定使用方案的类型(也就是 Membership Query Synthesis, Stream-Based Selective Sampling or Pool-Based sampling)和查询策略。

你会使用 batch size = 2 的 Pool-Based Sampling 。意思是每一轮迭代,你会从你的未标记数据集中选择两个实例然后把它们加到已标记数据集中。你是用最不置信策略来选择你的实例。你的学习器选择了 d2 和 d4,他们的查询标签分别是“Y”和“N”。

已标记数据集

实例特征A特征B标签
d1100Y
d385N
d249Y
d433N

未标记数据集

实例特征A特征B
d555

第 4 步:停止准则

现在,你可以重复步骤2和步骤3直到到达停止标准。也就是说,当你有了我们新的已标注数据集的时候,你会重新训练你的学习器然后进一步选择未标记数据去查询。停止标准可以设置成查询实例的数量,另外也可以设置成步骤2和步骤3的迭代的轮数,你也可以在模型的性能没有明显提升到某一阈值以上后停止。

在这个例子里,你会在一轮迭代后停止,因此你的主动学习算法也终止了。你也可以拥有一个单独的测试数据集,用于评估学习器并记录它的表现。这样,你可以看到当天加了有标签数据之后,学习器在测试上的性能如何提升或者停滞。

主动学习的应用和近期研究

主动学习其中一个最流行的领域就是自然语言处理(NLP)。这是因为许多NLP中的应用需要很多有标签的数据(举例来说,比如词性标记、命名实体识别)并且在标记这些数据的时候代价都很高。

实际上,NLP领域仅仅只有一只手数的过来的数据集,免费、可使并且完全标注,适用于这些应用。因此,使用主动学习可以显著减少所需专家准确标注的数据量。同样的推理可以应用于许多语音识别任务,甚至是信息检索等任务。

主动学习仍在大量研究中心。许多人已经开始研究使用不同的深度学习算法(例如CNN和LSTMS)作为学习器,以及在使用主动学习框架时如何提高其效率(Kronrod and Anandkumar, 2017Sener and Savarese, 2017)。关于在主动学习框架中实施生成对抗网络(GAN)的研究也正在进行中(Zhu and Bento, 2017)。随着人们对深度强化学习的兴趣日益浓厚,研究人员正试图将主动学习重构为强化学习问题(Fang et. al, 2017)。另外,有些论文试图通过元学习设置来学习主动学习策略(Fang et. al, 2017)。

展开阅读更多
本篇文章来源于孟繁阳的博客,如需转载,请注明出处,谢谢配合。
孟繁阳的博客 » 一份人人都可以读懂的主动学习入门指引
Loading...

发表评论

表情
图片 链接 代码

孟繁阳的博客

博客首页 文章归档