自动机器学习(AutoML)领域有哪些优秀的算法?
我理解AutoML领域是有各个框架/工具组成,谈到算法层应该包含大部分常用的机器学习算法(LR,TREE model,MLP等)和自动化调超参的算法(遗传算法,贝叶斯优化等)。所以不太确定题主具体想关注哪方面。以下内容摘自我的文章,是我对几个常见AutoML框架的对比,希望有帮助。
实验背景
调研AutoML的初衷是想找一个调超参的框架,在调研的过程中发现AutoML框架可以把其它的步骤一并解决,干脆调研一下AutoML框架。
另外和工作岗位也有关,我所在的部门是一个中台部门,为多个不同的业务方服务。每接入一个新业务就要走一遍探索流程,找到一个良好的AutoML框架,可以为团队提供一个便捷的工具,快速实现项目的baseline。
实验设定
这次实验的衡量标准比较感性,没有量化的实验结果,主要看是否容易上手,功能是否强大,效率是否够高。
实验的机器是一台190G内存,40核的物理机,遗憾的是没有GPU。
在下一节表格中所涉及的AutoML框架在实验中都是默认设置,未做深入调优。
任务是结构化数据的二分类问题,包含类别特征和连续型特征。实验数据量是约30W条,正负样本比例约为1:2。
实验结论
下表中是此次实验的结论及一些框架的信息,对于实验的二分类任务而言,各个框架在效果上没有明显的差别,AUC都在0.68左右,但使用体验的差别非常大。
框架名称上手难度使用体验最近更新github地址出品单位atuo_ml简单上手简单,太久没有更新,依赖的sklearn等包非常老。2017年https://github.com/ClimbsRocks/auto_ml不确定TPOT简单上手简单,预置的参数非常细,整个训练过程非常慢。2021年1月https://github.com/EpistasisLab/tpot不确定AUTOKeras简单上手简单,可以尝试各种结构的神经网络结构(仅限全连接部分)。2021年7月https://github.com/keras-team/autokeras不确定Auto-PyTorch不确定由于冲突问题,未能成功试用。2021年6月https://github.com/automl/Auto-PyTorch不确定NNI不确定由于时间限制,只找到了一个连接Azure的例子,不确定是否合适。2021年8月https://github.com/microsoft/nni微软AutoGluon简单上手非常简单,且功能强大,机器学习基线构建神器。2021年9月https://github.com/awslabs/autogluon亚马逊在上表六个框架中AutoGluon全面胜出。AutoGluon上手非常简单,且功能强大,能够自动识别特征类型,类别型特征、连续型特征、文本特征,然后进行对应的预处理和编码处理。模型能力也非常强大,包含各种常用的机器学习模型,xgboost、lightgbm、catboost等,以及对应的model ensemble。并且训练速度非常快。比较遗憾的是深度模型没有试用成功,因为这台机器上没有GPU,而框架又无法识别到公司AI 平台上的虚拟GPU,强制使用CPU速度太慢,没有坚持试用。
虽然在参考资料的问答中,AutoGluon的作者认为相较于NNI还略显单薄,但在我的场景下AutoGluon能够全面覆盖我的需求,而且已经实际应用到线上,并在团队内推广。
思考
[*]这篇对比分析比较感性,有太多的主观因素在里面,所以欢迎朋友们提出质疑。
[*]由于时间仓促,对比中没有关于框架深入的部分,也难免有错漏,请朋友们谅解。
[*]用AutoML框架是否影响作为一个算法工程师的B格?个人认为不会,AutoGluon框架是一个非常好的baseline工具,能够提升效率,又能取得一个不错的效果,何乐而不为。在不使用更为复杂的模型的前提下,无论如何换模型、调参可能也不会好于这个工具。应该省下时间去做更有意义的事。
[*]用AutoML框架是否还需要学习基础理论?这个答案肯定是需要,各种问题追求到比较极致的位置还是要靠基础理论,不能在原理上理解清楚,也就不能得到更大的提升。
[*]在深度学习普遍应用的大环境下,是否还需要这样的机器学习框架?还是需要,AutoGluon能够快速的构筑基线。如果是不断切任务的工作场景,那更是低成本高收益的神器。
[*]推荐一个关于AutoML的git项目:
里面是关于AutoML各种论文和工具的汇总,可能还有更大的宝藏等待去挖掘,
以上就是这篇对比分析的全部内容,正处在机器学习项目困扰中的朋友一定要去试用一下,会有意想不到的收获。
参考资料
《分享一篇比较全面的AutoML综述》,https://zhuanlan.zhihu.com/p/48642938
《Taking the Human out of Learning Applications: A Survey on Automated Machine Learning》
https://www.zhihu.com/question/360250836/answer/1224137065
我理解AutoML领域是有各个框架/工具组成,谈到算法层应该包含大部分常用的机器学习算法(LR,TREE model,MLP等)和自动化调超参的算法(遗传算法,贝叶斯优化等)。所以不太确定题主具体想关注哪方面。
以下内容摘自我的文章,是我对几个常见AutoML框架的对比,希望有帮助。
cyzhang999:一款自动机器学习(AutoML)神器
实验背景
调研AutoML的初衷是想找一个调超参的框架,在调研的过程中发现AutoML框架可以把其它的步骤一并解决,干脆调研一下AutoML框架。
另外和工作岗位也有关,我所在的部门是一个中台部门,为多个不同的业务方服务。每接入一个新业务就要走一遍探索流程,找到一个良好的AutoML框架,可以为团队提供一个便捷的工具,快速实现项目的baseline。
实验设定
这次实验的衡量标准比较感性,没有量化的实验结果,主要看是否容易上手,功能是否强大,效率是否够高。
实验的机器是一台190G内存,40核的物理机,遗憾的是没有GPU。
在下一节表格中所涉及的AutoML框架在实验中都是默认设置,未做深入调优。
任务是结构化数据的二分类问题,包含类别特征和连续型特征。实验数据量是约30W条,正负样本比例约为1:2。
实验结论
下表中是此次实验的结论及一些框架的信息,对于实验的二分类任务而言,各个框架在效果上没有明显的差别,AUC都在0.68左右,但使用体验的差别非常大。
框架名称上手难度使用体验最近更新github地址出品单位atuo_ml简单上手简单,太久没有更新,依赖的sklearn等包非常老。2017年https://github.com/ClimbsRocks/auto_ml不确定TPOT简单上手简单,预置的参数非常细,整个训练过程非常慢。2021年1月https://github.com/EpistasisLab/tpot不确定AUTOKeras简单上手简单,可以尝试各种结构的神经网络结构(仅限全连接部分)。2021年7月https://github.com/keras-team/autokeras不确定Auto-PyTorch不确定由于冲突问题,未能成功试用。2021年6月https://github.com/automl/Auto-PyTorch不确定NNI不确定由于时间限制,只找到了一个连接Azure的例子,不确定是否合适。2021年8月https://github.com/microsoft/nni微软AutoGluon简单上手非常简单,且功能强大,机器学习基线构建神器。2021年9月https://github.com/awslabs/autogluon亚马逊在上表六个框架中AutoGluon全面胜出。AutoGluon上手非常简单,且功能强大,能够自动识别特征类型,类别型特征、连续型特征、文本特征,然后进行对应的预处理和编码处理。模型能力也非常强大,包含各种常用的机器学习模型,xgboost、lightgbm、catboost等,以及对应的model ensemble。并且训练速度非常快。比较遗憾的是深度模型没有试用成功,因为这台机器上没有GPU,而框架又无法识别到公司AI 平台上的虚拟GPU,强制使用CPU速度太慢,没有坚持试用。
虽然在参考资料的问答中,AutoGluon的作者认为相较于NNI还略显单薄,但在我的场景下AutoGluon能够全面覆盖我的需求,而且已经实际应用到线上,并在团队内推广。
思考
[*]这篇对比分析比较感性,有太多的主观因素在里面,所以欢迎朋友们提出质疑。
[*]由于时间仓促,对比中没有关于框架深入的部分,也难免有错漏,请朋友们谅解。
[*]用AutoML框架是否影响作为一个算法工程师的B格?个人认为不会,AutoGluon框架是一个非常好的baseline工具,能够提升效率,又能取得一个不错的效果,何乐而不为。在不使用更为复杂的模型的前提下,无论如何换模型、调参可能也不会好于这个工具。应该省下时间去做更有意义的事。
[*]用AutoML框架是否还需要学习基础理论?这个答案肯定是需要,各种问题追求到比较极致的位置还是要靠基础理论,不能在原理上理解清楚,也就不能得到更大的提升。
[*]在深度学习普遍应用的大环境下,是否还需要这样的机器学习框架?还是需要,AutoGluon能够快速的构筑基线。如果是不断切任务的工作场景,那更是低成本高收益的神器。
[*]推荐一个关于AutoML的git项目:
GitHub - windmaple/awesome-AutoML: Curating a list of AutoML-related research, tools, projects and other resources里面是关于AutoML各种论文和工具的汇总,可能还有更大的宝藏等待去挖掘,
以上就是这篇对比分析的全部内容,正处在机器学习项目困扰中的朋友一定要去试用一下,会有意想不到的收获。
参考资料
《分享一篇比较全面的AutoML综述》,https://zhuanlan.zhihu.com/p/48642938
《Taking the Human out of Learning Applications: A Survey on Automated Machine Learning》
https://www.zhihu.com/question/360250836/answer/1224137065
基于人工智能算法自动生成机器学习算法并不是一个新奇的想法。更具体地说,自动生成神经网络架构和自动生成机器学习流程就是其中的两个代表性的例子。尽管如此,我想在这里介绍一下谷歌研究人员今年提出的一个新想法,以证明进化算法在协助机器学习从业者开发新的机器学习算法方面的作用。这篇名为"Evolving Reinforcement Learning Algorithms"的论文被ICLR 2021接受。这篇论文的主要思想是使用遗传编程来自动生成强化学习问题的损失函数。
众所周知,开发能够有效解决各种问题的新的深度强化学习算法,通常需要大量的人工劳动。学习设计强化学习算法,甚至是算法的小型子组件,将减轻这种负担,并产生比研究人员手动设计更好的算法。因此,谷歌的研究人员最近提出了一种基于遗传编程(GP)的方法,该算法能够帮助我们从手动设计这些算法转变为自动设计开发这些算法。
强化学习算法可以被认为是一种智能程序,它将智能体的经验转换为一个可以在训练过程中实现高累积奖励的智能策略。因此,该工作的目标是使用基于图的优化算法学习一种新的、可分析解释的、可推广的RL算法,并希望它在未知环境中表现良好。具体来说,谷歌的研究人员将损失函数表示为计算图,并使用正则化进化(Regularized Evolution)在一组简单的训练环境中进化出一个计算图,该图表示的损失函数用于优化智能体的参数。该过程不断循环优化,从而导致越来越好的RL算法,而且发现的算法可以推广到更复杂的环境,包括那些有视觉场景的环境,如Atari游戏。
尽管它演化了一个图的表示,但所提出的算法从根本上说是基于树的遗传编程框架。因此,我们可以通过遗传编程的视角来看待这样一种算法。遗传编程系统由两个主要部分组成:程序表示和优化算法。程序表示层面上来说,一个基于树的程序个体有两种类型的节点:叶子节点和非叶子节点。叶子节点被称为终端节点(terminal nodes),而非叶子节点被称为原始节点(primitive nodes)。
如图所示,终端节点包含输入节点和参数节点。输入节点与模型的相应行为相关,如状态、动作或奖励。而参数节点是神经网络的参数,用于反向传播损失值。在论文中,原始节点被称为操作节点,因为它们被用来计算来自父节点输入的相应的输出。这包括使用参数节点的操作以及来自线性代数、概率和统计学的基本数学运算符。
就优化算法而言,在各种复杂的环境中评估数以千计的程序策略是非常昂贵的。为了解决这样的问题,谷歌公司的研究人员略微变更了遗传编程方法,并使用正则化进化,即一种采用锦标赛选择的经典进化算法的变种,以提高效率。正则化进化已被证明对生成监督学习算法是有效的,并且可以跨计算节点并行。锦标赛选择通过循环来维持和改善一个由P个个体组成的群体。每个周期随机选择一个由T个个体组成的锦标赛,并从锦标赛中选择最佳个体作为父代。父代个体被突变为子代个体,子代个体被添加到种群中,而种群中最古老的个体被移除。
此外,一些其他技术也被开发出来以加快训练过程。例如,由于研究人员希望性能低下的程序及早终止,以避免不必要的计算,他们使用CartPole环境作为早期的障碍环境,以消除没有希望的解决方案。如果一个代理未能解决障碍环境,训练将以零分终止。否则,训练将进展到更困难的情况(例如,Lunar Lander, simple MiniGrid环境等)。算法的性能被评估并用于更新群体,其中更有希望的算法被进一步变异。此外,为了缩小搜索空间,他们采用了一个功能等价检查器,如果新提出的算法在功能上与先前检查的算法等价,则拒绝接受评估该算法。随着新的变异的候选算法被训练和评估,这个循环将被重复。研究者在训练结束时选择最佳算法进行分析,并在一组未知的测试环境中评估其性能。
最后,他们发现了两种在泛化方面表现良好的算法。总的来说,这两个生成的算法创造了一些正则化方法来处理基于价值的强化学习方法中的高估问题。因此,自动生成的方法在以前未见过的测试环境中达到了良好的表现。
页:
[1]