基本思想
基本概念
主动学习(查询学习),是机器学习的一个子领域。主要的思想是:通过一定的算法查询最有用的未标记样本,并交由专家进行标记,然后用查询到的样本训练分类模型来提高模型的精确度。
什么时候需要主动学习?
- 项目是冷启动的,在冷启动初期,标签数据是非常稀少的,而且打标成本也相对比较高;
- 项目虽然不是冷启动,但是很难通过专家构建多元线性分类器,换句话说就是很难通过写出一条条实值规则的逻辑组合。这在实际工作中也是非常常见的,典型地表现会是安全运营人员会发现自己的专家经验“很难准确定义”,往往是通过长时间地不断调整逻辑组合以及判别阈值threshold后,可能依然无法做到0误报0漏报。
显然,人脑不适合高维的、高精确度的复杂线性函数的处理。但是与此同时,人脑又善于根据复杂的高纬度特征,得出一个模糊性的综合判断。例如,当一个安全专家具体拿到某个样本的时候,他通过经验还是能够较快判断出正例/负例,在大多数时候,这个判断又是非常准确的。
笔者认为,我们需要通过机器学习辅助我们进行安全数据分析的一个原因就在于:人脑似乎可以进行非常复杂的逻辑判断,但是却很难数学化地准确表达出自己具体是怎么得到这个结果的。人的经验在很多时候是很准的,但是你要是问他到底是怎么判断的,他往往只能沉思片刻,然后露出一副坚定而微笑的表情,凭经验判断的!而通过机器学习的训练过程,让机器从数据中学习到人的模糊经验,得到一个数值化的、可稳定复现的决策系统。 - 无监督算法得到的异常未必就对应了业务场景中的一个真实异常事件,即算法层面的outlier和真实业务场景中的abnormal_target往往是存在一个gap的。
我们知道,无监督异常检测算法是根据特征工程后的特征向量进行数值计算后,得到一个异常值排序,这就导致特征工程的结果会极大影响之后的算法运行结果。
针对这一困难,传统方法是需要模型开发者基于对业务的理解去优化特征设计,甚至优化样本集。这一优化通常是纯粹基于经验和尝试的,过程中由于缺少标签指引,其迭代过程甚为繁琐。
主动学习的框架
- 其中 L 是用于训练已标注的样本;
- C 为一组或者一个算法模型,用户接收上一轮的标记样本集,通过负反馈调整模型参数,并输出对应的预测结果向量集;
- Q 是查询函数,用于从当前剩余的未标注样本池(未标记样本会逐渐减少)U 中查询信息量最大(最不确定)的top样本;
- S是督导者,可以为 U 中样本标注正确的标签;
active learning模型通过少量初始标记样本 L 开始学习,通过一定的查询函数 Q 选择出一个或一批最有用的样本,并向督导者询问标签,然后利用获得的新知识来训练分类器和进行下一轮查询。主动学习是一个循环的过程,直至达到某一停止准则为止。
需要注意的是,active learning是一个算法框架,上图中的单个模块具备可替换性(alternative),我们接下来讨论具体每个子模块的选择原则。
-
机器学习模型C
只要是有监督学习算法即可。 -
查询函数Q查询函数的设计最常用的策略是:不确定性准则(uncertainty)和差异性准则(diversity)。
1)不确定性准则对于不确定性,我们可以借助信息熵的概念来进行理解。我们知道信息熵是衡量信息量的概念,也是衡量不确定性的概念。信息熵越大,就代表不确定性越大,包含的信息量也就越丰富。
不确定性策略就是要想方设法地找出不确定性高的样本,因为这些样本所包含的丰富信息量,对我们训练模型来说就是有用的。
2)差异性准则(diversity)
查询函数每次迭代中,查询一个或者一批样本。我们希望所查询的样本提供的信息是全面的,各个样本提供的信息不重复不冗余,即样本之间具有一定的差异性(概率分布尽量全面)。
在每轮迭代抽取单个信息量最大的样本加入训练集的情况下,每一轮迭代中模型都被重新训练,以新获得的知识去参与对样本不确定性的评估可以有效地避免数据冗余。但是如果每次迭代查询一批样本,那么就应该想办法来保证样本的差异性,避免数据冗余。
简要介绍Active Learning(主动学习)思想框架,以及从IF(isolation forest)衍生出来的算法:FBIF(Feedback-Guided Anomaly Discovery)
ICCV2021最佳检测之一:主动学习框架较大提升目标检测精度(附论文下载)
主动学习与自监督学习结合的方法(Active Learning+Self-Supervision)
主动学习与自监督学习结合的方法(Active Learning+Self-Supervision)----有源码
综述
主动学习(Active Learning),看这一篇就够了
A Survey on Active Deep Learning: From Model-Driven to Data-Driven [2020]:较新的一篇文章,主要是在技术角度对主动学习的方法进行分类,个人认为这篇文章需要在对具体问题有足够清晰地了解之后再看,否则过早陷入对技术的纠结其实不利于对领域的认知。
主动学习框架与源码
-
主动学习框架—有关于modAL的详细说明和使用步骤
modAL的github地址
modAL具有详细的文档