主动学习是机器学习(更普遍的说是人工智能)的一个子领域,在统计学领域也叫查询学习、最优实验设计”(Active learning (sometimes called “query learning” or “optimal experimental design” in the statistics literature) is a subfield of machine learning and, more generally, artificial intelligence. )。
在机器学习领域中,根据是否需要样本的标签信息可分为“监督学习”和“无监督学习”。
同时利用未标注样本和标注样本进行机器学习的算法可进一步归纳为3类:半监督学习、直推式学习和主动学习 。
文献[21]简要介绍了主动学习与半监督学习的异同点:“半监督学习和主动学习都是从未标记样例中挑选部分价值量高的样例标注后补充到已标记样例集中来提高分类器精度,降低领域专家的工作量,但二者的学习方式不同:半监督学习一般不需要人工参与,是通过具有一定分类精度的基准分类器实现对未标注样例的自动标注;而主动学习有别于半监督学习的特点之一就是需要将挑选出的高价值样例进行人工准确标注。半监督学习通过用计算机进行自动或半自动标注代替人工标注,虽然有效降低了标注代价,但其标注结果依赖于用部分已标注样例训练出的基准分类器的分类精度,因此并不能保证标注结果完全正确。相比而言,主动学习挑选样例后是人工标注,不会引入错误类标 ”。
主动学习(Active Learning)为能够使用较少的训练样本来获得性能较好的分类器,通过一定的算法查询最有用的未标记样本,并交由专家进行标记,然后用查询到的样本训练分类模型来提高模型的精确度。
主动学习的模型如下: A=(C,Q,S,L,U)
其中C表示分类器(1个或者多个)、L表示带标注的样本集、S表示能够标注样本的专家、Q表示当前所使用的查询策略、U表示未标注的样本集。流程图可解释为如下步骤(以分类任务为例):
(1)选取合适的分类器(网络模型)记为 current_model 、主动选择策略、数据划分为 train_sample(带标注的样本,用于训练模型)、validation_sample(带标注的样本,用于验证当前模型的性能)、active_sample(未标注的数据集,对应于ublabeled pool);
(2)初始化:随机初始化或者通过迁移学习(source domain)初始化;如果有target domain的标注样本,就通过这些标注样本对模型进行训练;
(3)使用当前模型 current_model 对 active_sample 中的样本进行逐一预测(预测不需要标签),得到每个样本的预测结果。此时可以选择 Uncertainty Strategy 衡量样本的标注价值,预测结果越接近0.5的样本表示当前模型对于该样本具有较高的不确定性,即样本需要进行标注的价值越高。
(4)专家对选择的样本进行标注,并将标注后的样本放至train_sapmle目录下。
(5)使用当前所有标注样本 train_sample对当前模型current_model 进行fine-tuning,更新 current_model;
(6)使用 current_model 对validation_sample进行验证,如果当前模型的性能得到目标或者已不能再继续标注新的样本(没有专家或者没有钱),则结束迭代过程。否则,循环执行步骤(3)-(6)。
主动学习是一个循环的过程,直至达到某一停止准则为止。
主动学习作为一种新的机器学习方法,其主要目标是有效地发现训练数据集中高信息量的样本,并高效地训练模型。与传统的监督方法相比,主动学习具有如下优点:1.能够很好地处理较大的训练数据集,从中选择有辨别能力的样本点;2.减少训练数据的数量,减少人工标注成本[2]。
实验步骤:以cifar10为例,10分类
1)制作数据:active_samples=50000,val_samples=10000;train_samples=0;
2)初始化 alexnet 模型,随机权重得到最初的模型,记为 cifar10_alexnet_imagenet_init.7t;num_train_samples=0;
3)分别对 active_samples 目录下的 50000 - num_train_samples 张数据进行预测,得到10个类别对应的10个概率值;
4)重点关注每个样本预测结果的最大概率值:p_pred_max。我们初步认为 p_pred_max>0.5 的情况表示当前模型对该样本有个确定的分类结果(此处分类结果的正确与否不重要);反之,当前模型对该样本的判断结果模棱两可,标记为hard sample;比如:模型进行第一次预测,得到10个概率值,取其最大的概率 p_pred_max;
5)对P(real lable) < p_threshold(此处的10分类任务取p_threshold=0.5)的样本进行排序,取前N个样本加入集合train_samples中;
6)基于当前的训练数据集 train_samples 对模型进行微调,得到新的模型记为 model_fine_tuned.7t;
7)重复(3)到(6)步骤,直到 active_samples 样本数为 0 或者当前模型 model_fine_tuned.7t 已经达到理想效果;
steps
step0: initialize a pretrained model based on imagent --> mnist_alexnet_imagenet_init.7t
step1: predict active_samples on current model --> get active_train_samples_path
step2: active_select_samples_to_train --> train samples added.
step3: if train_dataset_sizes>0; train it --> get a new pretrained model, named active_pretrained_cifar10.7t
do step1, step2, step3 while(active_target_val_acc>=0.9)
step4: record number of labeled samples
按照上述算法流程分别对 MNIST、Cifar-10 和 Dog-Cat 三个数据集做实验。实验结果表明引入active learning 不仅能够得到减少样本标注代价,还能够提升分类的准确率。如MNIST的实验(train_num=55000, val_num = 10000)中,使用AlexNet模型、PyTorch框架:1)使用全部的训练数据直接训练模型120次epoch,val_acc=98.992%;2)使用主动学习,Uncertainty Strategy(US),只需要2300张标注数据val_acc就能够达到99.04%,将剩余的55000-2300=52700张扔到训练好的模型进行预测,得到 99.70% (52543/52700) 的效果。可见对于MNIST数据集,仅仅使用US策略能够得到显著的效果。主动学习为什么还能够提升分类模型的准确率呢?文献[21]提到1个解释,“带标注的训练数据可能含有部分低质量的样本(噪声点)反而会降低模型的鲁棒性(模型过渡拟合噪声点)。因此标注训练样本要在保证质量的条件下,再增加数量”。如何高效地选出具有高分类贡献度的无类标样例进行标注并补充到已有训练集中逐步提高分类器精度与鲁棒性是主动学习亟待解决的关键问题。以上3个数据集的实验结果如下表所示:
分别在MNIST、Cifar-10 和 Dog-Cat 三个数据集上验证 Active Learning 的效果
上述实验结果表明:
1)引入 active learning 后,能够在 MNIST、Cifar-10 和 Dog-Cat 等三个数据集上减少一半以上的标注代价。虽然上述实验使用的数据集较为简单,但也能够证明 Active Learning 的效果。
2)active select 比 random select 在更少标注样本的条件下达到更高的性能,相当于下图右半部分所示的红虚线;
3)在 active learning 的实验中还有一个环节:使用训练得到的模型对未选中的样本进行预测,acc_left_active_samples 的精度都很高(表格中未列出,但3个实验的 acc_left_active_samples 都稍优于 train_acc)。本人认为:acc_left_active_samples 表示主动选择的过程中未被选中的样本,即当前模型足以能够区分出这些样本的类别,所以不再需要使用这些样本对模型进行微调(对模型的作用相对较小,甚至没有作用)。因此,当模型在 train 数据集下的训练精度达到 99.378% 时,使用当前模型对 acc_left_active_samples 样本进行预测的精度也同样在 99.378% 左右,甚至更高。
因此,业务方可以先挑选一定量的数据进行标注,然后训练看看效果如何;性能不能达到预期效果的话,再增加标注样本,直到模型达到预测的效果。这个思路其实跟上述介绍的主动学习算法流程略相似,但却有实质上的区别。
1)一般情况下,业务方挑选样本的准则是随机挑选(相当于 random select),更理想一点的就是挑选一些人为觉得比较复杂的样本;
2)active learning 能够通过一些选择策略挑选出当前模型认为最难区分的样本给相关领域的专家进行标注;
综上,如果某一些实际业务需要手工标注数据,并且先思考完如下几个条件后,决定是否使用 Active Learning:
1)能够较方便的获取未标注的源数据,并且有相关领域的标注专家;
2)对于一些较复杂的任务,需要慎重考虑是否已有相关的算法或者模型能够解决,不然花费再多的标注数据也不一定能够达到预期的效果;
3)不同任务类型(如,分类、检测、NLP等等),想好要用什么样的指标衡量样本(hard sample or easy sample);
4)Last But Not Least:算法设计完成后,还要考虑如何设计一个完整的系统。比如,你需要提供一个接口,让专家把标注完成的数据传到到模型的输入端,后续有时间我也会仔细思考下这个问题。否则,到时候可能会照成时间上的浪费,虽然减少了标注代价。
如何学习主动学习:首先去找一些关于Active Learning 算法综述类的文章[1-2],其中文献[1]是一位博生生根据其毕业论文整理而来的,全面的介绍了2007年以来 Active Learning 的发展历程,目前该论文更新至2010年,此外论文还提供了一个网址链接,在线更新相关的内容。文献[2]有中英文版本(我看的是中文版本)、篇幅较少,简要介绍了Active Learning的基本思想以及2012年关于 Active Learning 的一些最近研究成果、对Active Learning 算法进行分析,并提出和分析了有待进一步研究的问题。
周志华等人在2014年关于AL的一篇论文“Active learning by querying informative and representative examples”[17]
文献[18]“A Deep Active Learning Framework for Biomedical Image Segmentation”发表在MICCAI 2017上,使用“Uncertainty estimation and similarity estimation”的主动选择策略应用在医疗图像分割领域(FCN模型),作者均来自美国圣母大学,Lin Yang,YizheZhang,Jianxu Chen 均为华人。
文献[19]“Multi-Class Active Learning by Uncertainty Sampling with Diversity Maximization”发表于IJCV-2014,提出了一种新的 Active Learning 方法 USDM,利用 seed set 和 active pool内的所有样本的数据结构,来解决小 seed set 情况下 uncertainty sampling 存在的问题。
文献[20]“Multi-criteria-based active learning for named entity recognition”的解读博文,这是multi-criteria 开山鼻祖的文章(一篇长文)
Random Sampling(RS):随机选择样本
Uncertainty Sampling(US):选择当前模型认为最不确定的样本(如,分类问题,概率为0.5表示对该样本模棱两可,不确定性很高),标注这类样本对提升当前模型最有帮助,US也是主动学习领域最常用的策略之一。但是很少有人仅仅只用这种策略选择样本,其原因在于:US 策略仅仅考虑单个样本的信息,没有考虑样本空间整体的分布情况,因此会找到 outlier 样本,或者一些冗余的样本。比如文献[3]结合了 US 和 diversity(能够保证 batch-mode 的选择样本具有比较大的多样性)。
Kapoor[16]:An algorithm that balances exploration and exploitation by incorporating mean and variance estimation of the GP classifier.
ALBE[14]:A recent example of meta-AL that adaptively uses a combination of strategies, including [15].
文献[1]“Active Learning Literature Survey”详细的对主动学习展开介绍,篇幅较长。文献[2]“Survey on active learning algorithms”是一篇幅较短的中文论文,主要围绕主动学习的基本思想和截至2012年最新的研究成果,并对相关算法进行分析,总结了有待进一步研究的问题,包括:1)结合非监督学习算法,取代专家标注的环节;2)维度灾难:在预处理阶段寻找高效的降维方法,减少主动查询过程的复杂度。文献[3]“Fine-Tuning Convolutional Neural Networks for Biomedical Image Analysis: Actively and Incrementally”是一篇发表于CVPR-2017的论文,使用Active Learning + Transfer Learning、Data Augmentation、Majority Selection、Continuously Fine-Tuning等方法在3个医疗图像领域的数据集上验证了引入主动选择的策略(entropy+diversity)能够至少减少一半的数据标注代价。文献[4]“Generative Adversarial Active Learning”首次将GAN与Active Learning进行组合,通过训练GAN得到生成器模型,主动生成最有价值的样本让专家进行标注。文献[5]“Learning Active Learning from Data”跟传统的主动选择策略有本质上的区别,它克服了手工设计的选择策略跨领域泛化能力的不足,通过将主动选择策略转化为回归问题进行学习,学习得到的策略在多个不同领域的真实数据集(Striatum、MRI、Credit Card、Splice、Higgs)上取得显著的效果。文献[6]"Just Sort It! A Simple and Effective Approach to Active Preference Learning",还未仔细读。文献[21]“主动学习算法研究进展”于2017年发表在河北大学学报的一篇中文论文(个人觉得看了这篇论文还是有所收获的),围绕主动学习的3个关键步骤(学习器初始化、选择策略、算法的终止条件)展开详细的介绍,并总结了主动学习面临的问题及其对应的改进方法。