【机器学习】清华大学发布首个课程学习开源库CurML
机器之心编辑部
如何应用课程学习策略指导机器学习模型的训练?清华大学朱文武团队发布全球首个课程学习开源库 CurML,提供课程学习算法的支持平台。
在机器学习的发展过程中,人类的学习方式常常会对各种算法的设计产生启发。而作为人类学习的一个重要范式,通过课程进行学习,已经被借鉴到机器学习中形成了名为课程学习(Curriculum Learning)的研究方向。
普遍而言,人类的教育是通过高度组织化的课程来完成的。每一门课或是每一个学科,都会从简单的内容开始,逐步向学生呈现更复杂的概念。例如,在大学接受微积分的概念之前,一名学生应当先在小学学习算术,在初中学习函数,在高中学习导数。然而与人类教育不同的是,传统机器学习模型的训练都是将数据样本随机输入模型,忽略了数据样本之间不同的复杂性以及模型当前的学习状态。因此,课程学习在机器学习领域的提出,正是为了模仿人类由易到难的学习方式,为模型提供更好的训练策略,从而提升模型的表现。
课程学习概念图
目前课程学习已经广泛应用在机器学习的各个任务中,包括图片分类、目标检测、语义分割、机器翻译、音频识别、音频增强、视频问答等等,同时也在有监督、无监督和半监督学习以及强化学习等场景下受到大量关注和研究。
随着课程学习的应用和场景日益丰富,特别需要对这一领域进行细致的梳理和归纳,从而推动研究者的深入探索、提升使用者的应用体验。
因此,清华大学朱文武教授所带领的媒体与网络大数据实验室在发表了多篇课程学习学术论文的积累和基础上,实验室成员王鑫在 IEEE TPAMI 发表了关于课程学习的综述论文,实验室进一步发布了全球首个课程学习开源库 CurML (Curriculum Machine Leanring)。
朱文武教授与王鑫助理研究员的课程学习研究工作包括应用于城市兴趣地点推荐的课程元学习方法、基于带噪多反馈信息的课程解耦商品推荐、基于课程学习的共享参数神经架构搜索、以及基于课程难度自适应的组合优化问题求解等等。研究成果发表于 SIGKDD、NeurIPS、ACM MM 等高水平国际机器学习会议上。
部分研究成果框架图
课程学习综述论文则全面回顾了课程学习的产生、定义、理论和应用等各个方面,设计了统一的课程学习框架,并根据框架内的核心组成将课程学习算法分为两个大类和多个小类,区分了课程学习与其他机器学习概念之间的不同和关联,指出了这一领域所面临的挑战和未来可能的研究方向。
课程学习方法分类
课程学习开源库 CurML 是课程学习算法的支持平台,已经集成十多种课程学习算法,同时支持带噪和非带噪两种应用场景,便于研究者和使用者复现、评估、比较以及选择课程学习算法。
CurML 的主体模块是 CL Trainer,它由两个子模块 Model Trainer 和 CL Algorithm 组成,两者间通过五个接口函数进行交互,从而实现课程学习指导的机器学习过程。
CurML 框架图
主体模块:CL Trainer
这一模块是整个开源库的主体部分。通过调用这一模块,使用者仅需几行代码即可实现课程学习算法。在给定数据集、模型和超参数后,模块将进行一定时间的训练,并输出训练后的模型参数和任务的测试结果。这一模块的设计主要是为了满足易用性的要求,因此进行了高度的封装,提供给想要使用课程学习算法但并不在意具体实现细节的使用者。
子模块 1:Model Trainer
这一模块用于完成一般的机器学习过程,例如训练一个图片分类器或是一个语言模型。同时,它预留了五个接口函数的位置,用于和第二个子模块 CL Algorithm 进行交互,也支持自定义的输入函数。
子模块 2:CL Algorithm
这一模块封装了 CurML 所支持的全部课程学习算法,如下表所示:
模块的实现是通过五个接口函数,分别用于从机器学习过程中获取数据和模型信息,以及指导模型的学习策略,如下图所示。
CurML 流程图
接口函数:data_prepare
这一函数用于从 Model Trainer 模块向 CL Algorithm 模块提供数据集信息。很多课程学习算法需要对数据集有一个整体的了解,才能更好地判断数据样本难度,因此这一接口函数是很有必要的。
接口函数:model_prepare
这一函数与 data_prepare 很类似,区别在于传递的不是数据集信息而是模型训练的相关信息,例如模型架构、参数优化器、学习率调整器等等,很多课程学习算法通过调节这些要素指导机器学习。
接口函数:data_curriculum
这一函数用于计算数据样本难度,并根据数据难度和当前模型状态为模型提供合适的数据,大部分的课程学习都具有类似的思想。
接口函数:model_curriculum
这一函数用于更新模型,调节模型从数据样本中获取的信息量,间接指导模型的学习,目前这类算法的数量还较少,但 CurML 也同样支持这类算法的实现。
接口函数:loss_curriculum
这一函数用于对损失函数值进行重加权,间接调整不同数据对于模型的影响,这类算法在课程学习中较为常见,因为损失值的加权在本质上是一种对数据的软采样。
通过对于十多种近年来课程学习方法的总结,采用上述的模块和接口参数可以统一化实现不同类型的课程学习算法,从而能在公平的场景和任务下对课程学习算法进行评估、比较和选择。
未来展望
CurML 的研发团队表示,在未来他们将不断更新这一开源库,为课程学习的发展和应用提供进一步的支持。
相关链接:
CurML 开源代码库链接:https://github.com/THUMNLab/CurML
CurML 开源软件论文链接: https://dl.acm.org/doi/pdf/10.1145/3503161.3548549
课程学习综述论文链接:https://ieeexplore.ieee.org/abstract/document/9392296/
课程元学习论文链接:https://dl.acm.org/doi/abs/10.1145/3447548.3467132
课程解耦学习论文链接:https://proceedings.neurips.cc/paper/2021/file/e242660df1b69b74dcc7fde711f924ff-Paper.pdf
课程神经架构搜索论文链接:https://dl.acm.org/doi/abs/10.1145/3503161.3548271
课程难度自适应论文链接:https://ojs.aaai.org/index.php/AAAI/article/download/20899/version/19196/20658
推荐阅读
【教程】Python数据可视化入门 【数据分析】统计学基础知识总结 全网最全速查表:Python 机器学习 搭建完美的Python 机器学习开发环境 训练集,验证集,测试集,交叉验证