主动学习系列博文:
【Active Learning - 00】主动学习重要资源总结、分享(提供源码的论文、一些AL相关的研究者):https://blog.csdn.net/Houchaoqun_XMU/article/details/85245714
【Active Learning - 01】深入学习“主动学习”:如何显著地减少标注代价:https://blog.csdn.net/Houchaoqun_XMU/article/details/80146710
【Active Learning - 02】Fine-tuning Convolutional Neural Networks for Biomedical Image Analysis: Actively and Incrementally:https://blog.csdn.net/Houchaoqun_XMU/article/details/78874834
【Active Learning - 03】Adaptive Active Learning for Image Classification:https://blog.csdn.net/Houchaoqun_XMU/article/details/89553144
【Active Learning - 04】Generative Adversarial Active Learning:https://blog.csdn.net/Houchaoqun_XMU/article/details/89631986
【Active Learning - 05】Adversarial Sampling for Active Learning:https://blog.csdn.net/Houchaoqun_XMU/article/details/89736607
【Active Learning - 06】面向图像分类任务的主动学习系统(理论篇):https://blog.csdn.net/Houchaoqun_XMU/article/details/89717028
【Active Learning - 07】面向图像分类任务的主动学习系统(实践篇 - 展示):https://blog.csdn.net/Houchaoqun_XMU/article/details/89955561
【Active Learning - 08】主动学习(Active Learning)资料汇总与分享:https://blog.csdn.net/Houchaoqun_XMU/article/details/96210160
【Active Learning - 09】主动学习策略研究及其在图像分类中的应用:研究背景与研究意义:https://blog.csdn.net/Houchaoqun_XMU/article/details/100177750
【Active Learning - 10】图像分类技术和主动学习方法概述:https://blog.csdn.net/Houchaoqun_XMU/article/details/101126055
【Active Learning - 11】一种噪声鲁棒的半监督主动学习框架:https://blog.csdn.net/Houchaoqun_XMU/article/details/102417465
【Active Learning - 12】一种基于生成对抗网络的二阶段主动学习方法:https://blog.csdn.net/Houchaoqun_XMU/article/details/103093810
【Active Learning - 13】总结与展望 & 参考文献的整理与分享(The End…):https://blog.csdn.net/Houchaoqun_XMU/article/details/103094113
本文目的:
本文旨在构思并设计一套基于主动学习算法的系统,核心功能包括:1)业务需求满足某些条件下,对于某些任务(如,图像分类、NLP等等),可以显著地减少样本标注代价;2)提供一套完整的流程,包括后台的“模型/算法”、“打标系统”和前端的“用户交互界面”,让使用者能够更加友好地与后台算法进行交互;3)可扩展性:将这套系统的后台比喻为一个武器库,我们需要不断充实和完善各个不同的领域的模型(PAI平台就提供了很多模型/算法),使其能够胜任更多的需求。
监督学习算法在很多场景下取得了很好的效果,很大一部分原因应归功于大量的标注样本。数据的质量对模型的性能至关重要,“数据和特征工程决定了机器学习的上限,算法只是逼近这个上限”。以分类任务为例,深度学习将特征工程和分类器整合到一个深层网络中,实现端到端的学习,缓解了特征工程的局限性;但同时需要大量的标注样本才能学习到较好的特征和分类器。主动学习引入行业标注专家不断提供标注样本,保证了数据的质量,使得模型能够尽快逼近性能的上限(as soon as possible),达到减少标注代价的目的。
主动学习还在不断的发展中,学术界也陆续出现一些新的研究。工业界产生的大量需求中,很多任务是需要标注大量的样本,因此主动学习还是具有一定的应用前景。先定一个小目标:期待能够实现从0到1的工作(具有完整流程的系统),后续再不断完善和扩展“武器库”并应用到实际需求中,实现真正的算法赋能。
主动学习系统想要丰富哪些武器?
主动选择策略:
主动选择策略的主要功能是筛选出最能提升当前模型性能的未标注样本,这是非常重要的一个环节,关系到能否减少样本标注代价、能减少多少标注代价。《主动学习(Active Learning,AL):如何能够显著地减少标注代价》提供实验证明了主动选择和随机选择所带来的差异,这篇ATA文章详细的介绍了主动学习的相关理论知识(文章会继续完善)。
主动学习系统希望能够引入更多优质的选择策略,适应不同种类的需求。目前已有一些相关的论文不断改进主动选择策略,其中有一篇论文尝试通过 learning 的方式获得策略,能够增强该策略对不同应用场景的泛化能力。这倒是一个很好的思路,如果选择策略能不同场景进行自适应调整,将会带来很大的价值。
后台模型/算法能力:
这里的“模型/算法”指:根据不同需求所选择的模型和算法(此处主要以深度学习为例)。比如,经典的图像分类模型有:LeNet、AlexNet、VGG、ReNet、DenseNet、GoogleNet等等;经典的目标检测模型有:R-CNN、Fast-RCNN、Faster-RCNN、Mask-RCNN等等;经典的自然语言处理模型:RNN、LSTM等等;还有很多其他领域都有一些经典的模型。
现实生活中产生的大量需求,不是一个模型能够解决的。一款优质的模型能够解决很多问题,但同时也存在一些不能够解决的问题。因此,我们需要不断完善后台的模型和算法能力,对于不同的需求,能够提供相对较优的解法。
打标系统能力:
主动学习相对半监督学习的一个最大不同点就是:主动学习需要人工参与,但也正是因为有人工的参与,使得提供给模型的标注样本更加准确。一位跟我同为实习生的同学(阿里妈妈-算法)详细介绍了半监督学习的发展历程《半监督学习概述:从1965到2018》,感兴趣的同学可查阅哈。因此,标注专家打标也是至关重要的一个环节。为了能够让所有流程完整的进行下去,打标系统(以Web形式展现)既是系统的重要环节之一,也能够独立作为打标功能使用。目前集团有一款名为“亲测”的标注平台,支持非常多的标注类型,比如图片标注、文本标注、语音标注、视频标注等,其中图片标注是需求量非常大的一种类型。
集团目前应该沉淀了很多相关的功能,那么如何将这些功能串联成完整的系统,也是值得考虑的事情之一。
相关理论知识:
主动学习相关的理论知识,参考链接如下:
- 【Active Learning - 00】主动学习重要资源总结、分享(提供源码的论文、一些AL相关的研究者)
- 【Active Learning - 01】深入学习“主动学习”:如何显著地减少标注代价
- 【Active Learning - 02】Fine-tuning Convolutional Neural Networks for Biomedical Image Analysis…
- 【Active Learning - 03】Adaptive Active Learning for Image Classification
- 【Active Learning - 04】Generative Adversarial Active Learning
- 2019年04月份:总结,汇报,验收,焦急等待…(附有主动学习系统的雏形演示视频)
主动学习系统的逻辑(最初版,现已改进)
以图像分类为例:
-
后台模型初始化:迁移 ImageNet 的权重作为初始化模型,记为 cur_model(若有 source domain 数据集,可以先训练再将模型权重进行迁移,作为target domain的初始化模型,效果更佳);
-
上传未标注的样本池,目录统一为 unlabled_samples(后台进行重命名,名字从1开始,依次累加),支持不断上传未标注的样本;
-
上传 validation 样本集,这部分需要专家预先标注完成,并保证正负样本比例;作为验证模型的性能;
-
train 样本集初始为0,后续由标注专家不断提供标注样本,模型进行训练;
-
标注专家登录系统,配置类标信息(如,二分类的类名为class_1、class_2):后台自动创建以类名命名的文件夹;
-
点击训练按钮:
1)如果 train 样本集为空,则直接由 cur_model 模型主动选择样本(根据主动选择策略);
2)如果 train 样本集不为空,则进行 Fine-Tuning; -
主动选择样本:Fine-Tuning 的过程不断更新着 cur_model 模型参数;Fine-Tuning 结束后(如,30个Epoch),根据主动选择策略筛选未标注样本,移至 download 目录下;
-
标注专家点击 download 按钮,下载 download 目录下的所有主动选择的未标注样本,并进行标注;
-
上传标注样本:根据样本标签将标注样本上传至指定的目录下(如,train/class_1);
-
点击训练按钮,模型继续训练:直到性能满足需求,或者不再继续提供标注数据。
主动学习系统 - 流程示意图
业务同学需要做哪些事情:
主动学习系统拟定以 Web 的方式实现用户的交互,如图-3所示,弄了个简略版的界面。业务同学(标注专家)需要操作的内容很简单,主要包括:1)初始化:简单的配置一些信息,上传未标注数据池;2)下载待标注的数据(由算法决定哪些样本需要被优先标注);3)上传已标注的数据集;4)上传样本后,点击继续训练。
-
download:下载未标注的样本,由主动选择策略筛选的样本;
-
upload:分别上传不同类别的数据到对应的目录下;上传样本后,更新相关信息;
-
continually fine-tuning:点击后,开始进行新的一轮训练;
-
config 按钮(待加入):主要功能是配置类别信息;比如有3个类别,就分别输入3个类名(class-1,class-2,class-3),然后点击确定按钮,后台生成对应的3个文件夹。用户上传标注样本到指定的目录时:前端通过 select 单选框选择对应的类名,然后点击上传即可(如下图所示的界面,直接显示类名、选择文件、upload;考虑到界面的简洁和直观,可以统一采用 select 单选框的形式)。
主动学习界面设计 - 简略版
技术流程图 - 实际项目
价格弹性探索:
商品红蓝海:
说明:
1)以上列举的项目所提炼的“项目背景”、“现状”和“痛点”等内容仅代表个人观点,如有问题,欢迎指正哈。
2)为什么会想到用图像分类+主动学习的模式:项目中经常会产生一些小需求,而往往必须先完成这项小需求,项目才能继续往下推进,所以这些小需求是必要的;完成这些小需求的方法有很多,目的很明确,我们需要做的就是如何使用更少的资源、更高效的达到目标;“图像分类+主动学习”的模式,通过训练模型对样本进行分类,而训练模型需要标注样本,因此主动学习的作用就是提高效率,“显著地减少样本标注代价”。
Last But Not Least:
业务团队里:不以解决实际问题的算法,都是耍流氓
本文所提及的主动学习系统,目前处于理想状态的构思中,实现的工作量巨大,个人感觉会很有价值。但同时,身在业务团队,我们也必须考虑这项工程/算法对解决实际问题的价值。经过这段时间的探索,发现团队中有挺多需求涉及人工标注,往往需要投入大量的人力和时间。因此,个人观点,感觉还是很有价值的,前提是如果能够真正的解决问题。或许,探索的过程中就是充满未知,你无法事先预料到所有可能出现的问题,但是,如果不去做,永远发现不了问题。