主动学习在DevOps中的应用与实践
经理:小李,公司业务扩展,在A地区新增了一个局点。你赶紧把模型在新局点上线,一周以后要让客户看到效果。
运维-小李:新局点的训练数据有吗?训练数据的标签有吗?
数据-小王:新局点当前采集到的数据有10000多个,但是都没有标签。
运维-小李:。。。。。。一个数据打标要花费将近1分钟,打标1万+数据,那就是连续不停地打标10000分钟,需要不吃不喝不睡7天才能做完。模型的训练和部署还需要时间,一周时间内模型要上线,这怎么可能。
技术-小张:可以用主动学习啊。由模型挑选少量数据进行标注,只需要少量数据训练模型,就能达到和全量数据一样好的效果。
运维-小李:居然还有这种神奇算法。
以上对话只是个段子,但是我们在工作中多少都会面临着标注数据少同时又要快速交付模型的困难。对于监督学习来说,特别是对于深度学习,通常需要大量的标注数据来训练模型,才能获得效果不错的模型。但在实际中,大量标注数据往往难以获取,一方面是标注代价高,尤其是一些特定场景,比如生物医学影像,就需要具有专业知识和一定经验的专家来进行标注。另一方面是标注全量数据耗时长,可能会导致项目延期。如果可以通过少量的标注数据,就能得到一个效果不错的模型,那么节省标注人力和快速交付模型的难题就迎刃而解了。
网上一搜“主动学习”,出现的大多是“如何调动孩子的积极性,让孩子主动学习”之类的信息。孩子的教育很重要,但是本文要谈的是机器学习里的主动学习算法。主动学习通过模型的预测结果,从未标记数据集中选取对模型训练有帮助的样本,把这部分数据反馈给专家进行人工标注,再将专家标注的数据反馈给模型进行学习。如图一所示,主动学习流程可以概括为以下步骤:
- 模型的训练:根据已有的标注数据训练模型
- 模型的预测和样本选取:模型对未标记数据进行预测,并根据预测结果选取对模型训练最有帮助的样本
- 人工标注:专家标注根据主动学习策略选出的未标记样本
- 模型的更新:把这部分标注数据加入模型的训练集,并重新训练模型。不断重复以上步骤,直至模型达到预期的效果。
图一:主动学习流程框架[1]
读者可能已经注意到主动学习中最关键的问题就是选取样本的策略,也就是选取什么样的未标记样本对模型的训练是有帮助的。下图给出的依次是全量数据(400个样本)、随机选取样本和主动学习选取最不确定样本的分布情况。随机选取30个样本训练得到的分类器(蓝色实线)不够准确,与最佳分界线存在一定的偏差。而采用主动学习的方式,虽然仅选取了30个样本,但是根据这部分样本训练得到的分类器就已经能够很好地区分红色和绿色两个类别。这就像是学生的学习过程,如果学生把所有题目都做一遍,会花费大量的时间;如果随机选取题目来做,可能选出来的大部分题目是学生已经会的内容,那么重复做这样的题目,学生的进步就很微小了。但是,如果学生每次都选取它最不确定或是最不懂的题目来进行学习,这样进步是最快。
图二:(a)两种类别数据分布图;(b)随机选取数据分布及对应分类器分界线;(c)主动学习挑选最不确定的样本分布[1] 及对应分类器分界线
在主动学习中,通常可以选取模型最不确定的样本来进行标注。具体地,我们可以基于最大熵、最小置信度和最小化margin来定量分析样本的不确定性:
在DevOps全生命周期中,覆盖了基础架构中各类开发、测试和监测工具的日志及指标。这些日志和指标数据的数量巨大,难以全量训练,同时也需要耗费大量人力进行标注。DevOps工程师采用主动学习,挑选少量数据进行标注和训练模型,即可获得效果不错的模型。模型能够快速检测出基础架构中的日志异常和错误,并及时上报给运维团队进行处理和快速修复,以保障开发的连续性和加速产品交付。经过初步估计,在大多数DevOps应用场景数据中,我们大概标注不到30%的数据,就可以获得和全量标注数据一样好的效果,以此节省大量人力,提升DevOps运维效率。
参考资料
- Settles, Burr. Active learning literature survey. University of Wisconsin-Madison Department of Computer Sciences, 2009.
- 点赞
- 收藏
- 关注作者
评论(0)