主动学习方法实践:让模型变“主动”

简介: 在机器学习的监督学习中,我们的目标是让模型不断学习带有标签的历史数据,从而提高模型在该领域的泛化能力。一般情况下,在上述的过程中,模型所学习的历史数据都是事先准备好的(数据采集,预处理,打标),有多少数据,模型就学习多少数据。换言之,模型在被动地学习我们事先提供的数据。本文分享一种主动学习方法,让模型参与“学习样本”的选择,根据不同策略,对样本池中的所有样本进行区分,提升模型性能。

image.png

一 背景介绍

1 什么是主动学习?

上网一搜,出现的大部分回答是“如何让孩子/学生主动学习”。哎,可惜我帮不了,我讲的不是这个。

此处的主动学习(Active Learning,AL)是一种机器学习算法,通过主动找到最有价值的训练样本加入训练集,如果该样本是未标记的,则会自动要求人工标注,然后再用于模型训练。简单而言,就是以更少的训练样本训练出性能尽可能高的模型。

2 解决什么问题?

  • 数据标注成本高,尤其是专业知识领域。
  • 数据量巨大,难以全量训练 ,或训练机器/时间有限。

3 有什么价值?

主动学习能减少样本标注量来节约成本,包括标注成本、和训练资源成本;并且主动学习能在同等数据量下提升模型性能。

例如,未标注的样本池有1000w个样本,应用主动学习从中挑出200w样本进行标注后训练,便能训练出性能与1000w训练相当的模型。通常认为,主动学习能减少一半以上的样本标注量。有时主动学习挑选数据集子集进行训练,模型性能能超越全量训练。在我们的业务场景下正是如此。

4 我们面对的业务问题是什么?

  • 提升模型性能:CRO内容安全团队的风控模型每个月都有性能提升。
  • 利用回流数据:各个业务场景不断产生新的违规方式,我们需要对新违规样本进行防控,而线上回流数据量巨大,对回流数据直接标注并训练,非常低效,而且标注成本、训练机器成本、训练时间成本巨大。
  • 处理脏数据:尽管图片标注标准唯一确定,但是每位标注员对标准的定义理解有分歧,容易出现错打标,数据集中存在一定比例的脏数据。

二 主动学习算法简介

当前主动学习算法中,应用最广泛的是基于信息量的方法,这类方法挑选对当前模型不确定性最大的样本作为训练数据。另一类广受关注的是基于委员会查询的方法,这类方法通过挑选对不同模型最具不确定性的样本作为训练数据。下面我们主要分析这两类方法。

1 基于不确定性的方法:(uncertainty)[1]

基于信息量的策略由于实用性强,因此被广泛使用。

思想

不确定性越大,蕴含的信息量越大,越有训练价值。

流程

用已打标的数据子集训练模型,用该模型预测剩余未打标样本,根据预测结果使用不确定性衡量标准找出最不确定的样本,交给打标人员标注,加入训练集训练模型,再用该模型进行数据挑选,反复迭代。

代表方法

有3种极具代表性的不确定性衡量方法,衍生为三种主动学习策略,值得注意的是,比较信息量可以通过比较概率值来代替进行。

1)least confident(LC)

关注模型预测时置信度值很大,“可信度”依旧很低的样本。缺点是没关注易混淆的样本。

image.png

其中,image.png是样本image.png分类为image.png的概率,即通常是模型输出的score值,image.png是类别索引。

2)smallest margin(SM)

关注置信度最大的两个值的差(margin)最小的样本,即易混淆的样本,该方案是针对LC的缺点进行的改进。

image.png

其中,image.png为样本image.png分类为image.png的概率image.pngimage.png为score值最大和第二大的对应的类别。

3)entropy(ENT)

关注综合信息量最大的样本。
image.png

其中,image.png为样本image.png分类为image.png的概率image.pngimage.png为score值最大和第二大的对应的类别,image.png是类别索引。

以三分类问题为例,上面三种方法各自关注的样本类型对比:

image.png

2 基于委员会查询的方法(Query-By-Committee,QBC)

思想

将优化ML模型看成是版本空间搜索,QBC通过压缩版本空间的搜索范围,找到最优秀ML模型。

流程

相同训练集训练多个同结构的模型,模型投票选出争议样本,将争议样本打标后训练模型,反复迭代。

代表方法

2~3个模型组成的Committee就能获得不错的性能,diversity是集成模型性能的关键[1]:

  • H.S. Seung[2]于1992首次提出QBC方法,通过多个模型对分类结果进行投票,选出投票结果最不一致的样本。
  • DAS[3],2019年发表于arXive,基于深度神经网络版本的QBC方法:两个一样结构的VGG-16网络,在相同数据集上训练,挑出判别不一致的样本。
  • Active-Decorate[4]方法:基于QBC挖掘回新数据,打标后加入训练集训练一个新增分类器,与已有模型直接集成为committee,再基于新的committee继续挑选新数据,反复迭代。

QBC方法的训练价值计算公式如下:

image.png

image.png是分类的类别数,image.png是类别image.png得到票数。QBC方法关注的样本。

image.png

3 小结

这两类方法一个是基于模型当前状态,衡量不确定性;另一类是通过多不同的模型来衡量不确定性。这两类方法在主动学习中较为普适高效,对我们的业务比较有价值。

三 基于业务场景设计的方法

虽然我们在业务场景下已积累了大量带标注数据,但是直接增大训练数据量并不能提高模型性能。而且在提升模型性能时也面临着苛刻的要求。例如,当模型较大,训练集比较大,训练模型相对耗时,对主动学习算法的挖掘效率就有很苛刻的要求,训练模型的方式也需要改进;如果需要挖掘百万级别的训练数据,那样本的训练价值的评价方式也需要做相应改进,否则容易对训练子集过拟合。下面详细介绍我们基于业务场景设计的主动学习算法。

1 挖掘效率

现有主动学习方法要么一次挖掘到一个样本,要么一次挖掘到一个batch的样本。来,我们算算凑齐例如500w样本的数据要多少轮周期?

骚年别算啦,资源有限,算出来了也不可能实现。

业务场景需要我们的主动学习算法一次性挖掘回数万或数十万样本,和主流paper中的主动学习有所区别。并且我们已经有了许多已打标数据,故业务场景需要算法能够:

  • 充分利用信息。
  • 一次挖掘回数万或数十万样本,加入训练集,尽量减少训练迭代周期。

因此,类似QUIRE[5]之类不支持batch选取样本的方法直接pass掉。我们基于支持batch挑选样本的方法,调整挖掘数据量,提高了挖掘效率。

2 数据均衡

批量挖掘到有价值样本放进训练集训练模型,就能提高性能?

too young, too simple ! (= =)|||

训练样本的各个类别间数据比例均衡,对模型性能影响很大。很多主动学习方法,如QBC方法、entropy方法等,都没有考虑数据均衡问题,仅挑选其考量方式下最有价值的样本。我们的经验是,在控制类别均衡的前提下,再通过主动学习方法考量样本的价值,按照合理的比例从各类别中挖掘会有价值的训练样本。

3 脏数据剔除

批量挖掘到有价值样本放进训练集训练模型,并控制数据均衡,就能提高性能?

too young, too simple, sometimes naive ! orz

模棱两可的样本比较有训练价值,被挖掘回来的概率比较大,而在我们面对的问题里,这批数据往往容易被错打标。

我们试过不同的脏数据剔除方法,有开源的算法,也有根据任务自行设计的算法。最后总结出以下经验分享给大家:

  • 脏数据剔除工作是一定要进行的,因其对模型性能影响很大。
  • 无法彻底剔除脏数据,因为彻底剔除代价很大。
  • 若不考虑噪声学习技巧,仅通过数据挑选让脏数据低于一定比例,依旧能得到性能不错的模型。

4 样本难度

批量挖掘到有价值样本放进训练集训练模型,并控制数据均衡,剔除脏数据,就能提高性能?

Maybe. May God bless you !

若挖掘到一倍的训练数据,直接将训练集double了,模型几乎无一例外地都学偏了(至少在我们的场景下是如此)。这种根据模型某一状态的判断就一步到位地确定大批量训练数据的方法容易引入“偏见”,训练出的模型找到的分界面并非最佳分界面。

为了解决这个问题,我们从训练集样本构成角度动刀,让挑选数据集不全是当前模型分界面附近的hard样本,同时存在一定比例的容易样本。我们通过在主动学习算法中使用性能较弱的预测模型挑选数据,以实现这个目的。

5 HW主动学习方法

我们业务场景需要算法能够具备以下特点:

  • 批量挖掘数据。
  • 控制数据均衡。
  • 具备剔除脏数据的能力。
  • 控制样本难度恰当,引入部分非分界面附近的样本。
  • 可利用已有的数据标注信息。

我们基于least-confident方法进行改进,综合考虑以上需求设计主动学习方法,对我们的风控业务进行适配,设计出HW主动学习算法,对于样本集image.png中每个样本的训练价值我们有如下计算方式:

image.png

image.png为模型image.png将样本image.png的分类为类别image.png的概率,image.png使用不同性能的模型,分类结果不同,挑选到的样本的hard程度也不同。image.png是模型输出中概率最大代表的类别,即分类结果,如果image.png,则image.png为1,于是image.png作为一个指标,基于模型image.png将挖掘池的样本区分为hard样本和wrong样本,并通过丢弃wrong样本来对脏数据比例进行调控。为每个样本计算价值后,便可以根据场景需求的样本均衡比例和需求的训练样本数量,提取价值排序靠前的样本。

HW方法不仅能简单高效地挖掘到大批量的具备训练价值的样本,也考虑了脏数据剔除和数据均衡,挖掘回的训练集结构合理,在业务实践中超越了其他对比算法。

四 实验&结果

1 小数据集验证实验

我们利用业务数据建立一个总量30w的训练集,对主动学习算法进行快速验证。并挑选出最合适的方法,在更大规模的数据集上使用,以提升业务模型性能。

我们利用不同的主动学习方法一次性挑选10w数据,加入训练集,训练模型,各模型性能对比如下,我们采用FPR=1%时对应的TPR值作为指标:

image.png

ROC曲线为:

image.png

实验总结:

HW方法、QBC方法在各个业务场景上性能表现优秀。实现QBC需要训练多个模型,故从实现效率上HW更胜一筹,尤其当数据量变大时,HW优势更明显。

2 业务实践

如上所述,我们将提出的HW主动学习方法应用于鉴黄业务模型上,得到如下结果,我们采用FPR=1%时对应的TPR值作为指标:

image.png

五 总结

主动学习能通过挑选最有价值的训练样本加入训练集,提升模型性能。我们从主动学习的思路入手,设计了一套能一次性挖掘到数十万样本的主动学习方法HW,提升了业务模型的性能。

六 问题与展望

本次实践中还有很多问题悬而未决,例如:

  • "脏数据比例"的方法和经验是否具有普适性?应用噪声学习方法能否进一步提升该业务模型的性能?
  • 除了使用一步到位挖掘到足量训练数据的方式,能否通过多轮挖掘和训练,牺牲点挑选效率,换取进一步的模型性能的提升?

问题总比看见的多,欢迎大家交流指教。

参考文献

[1] B. Settles, “Computer Sciences Active Learning Literature Survey,” Act. Learn. Lit. Surv., no. January, 2009
[2] H.S. Seung, M. Opper, and H. Sompolinsky. Query by committee. In Proceed- ings ofthe ACMWorkshop on Computational Learning Theory, pages 287–294, 1992
[3] J. Phan, M. Ruocco, and F. Scibilia, “Dual Active Sampling on Batch-Incremental Active Learning,” 2019.
[4] Melville P, Mooney R J. Diverse ensembles for active learning[C]//Proceedings of the twenty-first international conference on Machine learning. ACM, 2004: 74.
[5] Huang S J , Jin R , Zhou Z H . Active Learning by Querying Informative and Representative Examples[C]// IEEE, 2014:1936-1949.

目录
相关文章
|
21天前
|
运维 Prometheus 监控
持续监控和反馈:优化反馈机制与改进流程
持续监控和反馈:优化反馈机制与改进流程
37 1
|
3月前
|
Kubernetes 网络协议 druid
一文详解长连接黑洞重现和分析
本文先通过重现在不同业务线反复出现的问题,详细描述了从业务、数据库、OS等不同的角度来分析如何解决它。
|
6月前
|
API 虚拟化
网络数据接收过程经历了什么
网络数据接收过程经历了什么
43 0
|
6月前
|
监控 安全 持续交付
【专栏】Webhook是服务器主动发送事件通知的机制,打破传统客户端轮询模式,实现数据实时高效传递。
【4月更文挑战第29天】Webhook是服务器主动发送事件通知的机制,打破传统客户端轮询模式,实现数据实时高效传递。常用于持续集成部署、第三方服务集成、实时数据同步和监控告警。具有实时性、高效性和灵活性优势,但也面临安全风险和调试挑战。理解并善用Webhook能提升系统性能,广泛应用于现代软件开发和集成。
419 0
|
机器学习/深度学习 自然语言处理 运维
算法干货|主动学习算法学习笔记
算法干货|主动学习算法学习笔记
679 0
算法干货|主动学习算法学习笔记
|
SQL 测试技术 API
事件风暴过程全体验-下篇
事件风暴过程全体验-下篇
事件风暴过程全体验-下篇
|
定位技术
事件风暴过程全体验-上篇
事件风暴过程全体验-上篇
事件风暴过程全体验-上篇
|
运维 Cloud Native 架构师
好的反馈机制|学习笔记
快速学习好的反馈机制
135 0
好的反馈机制|学习笔记
|
运维 Cloud Native 架构师
好的反馈机制 | 学习笔记
快速学习好的反馈机制
好的反馈机制 | 学习笔记
|
Java 程序员 Python
程序员如何主动学习?
程序员如何主动学习
171 4