内存友好的深度丛林软件包开源了。现在,普通设备也可以跑得动深度丛林。
周志华等人一直在推动的深度丛林,是探究神经网络以外 AI 领域重要的研究方向之一,在表格数据建模任务中已初现锋芒。但是,由于基于决策树的集成模型在具体实现当中,经常会遇到内存不足,硬件效率不如神经网络等问题,是推动其大规模应用的主要瓶颈之一。经过 LAMDA 徐轶轩等人的不懈努力,2021 年 2 月 1 日,新的深度丛林软件包 DF21 在 GitHub 与开源中国同时开源了。该软件包尝试解决了这一方向在上述实际应用过程中所遇到的关键问题,未来在各类在数据建模过程中,我们也可以便捷地运用深度丛林了。
据介绍,该项目目前主要由南大徐轶轩举行开发和维护,在正式发布之前它已经在 LAMDA 内部经过测试和运用。项目地址:http://www.lamda.nju.edu.cn/deep-forest/Gitee 地址:https://gitee.com/lamda-nju/deep-forestGithub 地址:https://github.com/LAMDA-NJU/Deep-Forest针对这一开源项目,深度丛林参与者之一(现任创新工场南京 AI 研究院执行院长,倍漾资本创始人)冯霁博士告诉机器之心,「深度丛林在表格数据建模上,相对传统算法效果显著,但是之前开源的代码主要用于算法验证,以及辅助其他科研工作者举行深度丛林算法相关的研究,代码本身对内存和服务器性能要求较高。徐同学开源的这一版更为简单易用,做了很好的封装,同时举行了高性能优化,大幅降低了内存依赖,对于科研和实际落地应用都是很好的工具。」
此外,针对深度丛林固有的内存消耗、只能用 CPU 训练等问题,徐轶轩告诉机器之心,「这个模型的全名是:DF21: A Practical Deep Forest for Tabular Datasets。内存消耗是 DF21 主要解决的问题——此前的 gcForest 在处理百万级别的表格型数据集上,占用的内存可能会达到上百 GB。但在新版本中,在千万级别的表格型数据集上举行训练,占用的内存约为原来的十分之一左右。」
以下为此开源项目的详细介绍。DF21项目介绍本项目中的 DF21 是深度丛林的 2021.2.1 实现版本。深度丛林是基于决策树的深度进修模型。运用树模型进修技术(如随机丛林、GBDT 等)的应用都可以尝试运用 DF21。它具有以下优势:拥有比其他基于决策树的集成进修方式更好的性能拥有更少的超参数,并且无需大量的调参训练效率高,并且能够处理大规模的数据集安装教程深度丛林的最新稳定版本已经发布在 PyPi (https://pypi.org/) 上,可以通过以下命令安装:$ pip install deep-forest关于 Nightly-Build 版本以及如何对源代码举行编译请参考官网的安装说明。运用说明深度丛林采用了与 Scikit-Learn (https://scikit-learn.org/stable/) 类似的 API 设计。例如,下面的代码片段展示了在安装完成后,如何将深度丛林利用在一个简单的数字分类数据集上:from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from deepforest import CascadeForestClassifier
X, y = load_digits(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)
model = CascadeForestClassifier(random_state=1)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
acc = accuracy_score(y_test, y_pred) * 100
print("\nTesting Accuracy: {:.3f} %".format(acc))
>>> Testing Accuracy: 98.667 %实验研究者运用 5 种流行的基于决策树的集成进修方式作为 baseline,在所有 baseline 上都保持决策树的数量相同,将其余超参数设置为其默认值。
分类精度研究者在所选取的数据集上举行了测试,每个数据集的 SOTA 结果如加粗部分所示,
运行时间
训练阶段和评估阶段的运行时间。深度丛林,机器进修的新方向深度丛林的特点在于很少的超参数和自适应复杂度,在不同规模的模型上,深度丛林都可以做得很好。近十几年来,深层神经网络的发展在机器进修领域取得了显著进展。通过建立分层或「深层」结构,该模型能够在有监督或无监督的环境下从原始数据中进修良好的表征,这被认为是其成功的关键因素。成功的应用领域包括计算机视觉、语音识别、自然语言处理等。大部分被广泛应用的深度神经网络都运用具有随机梯度下降的反向流传作为训练过程中更新参数的主力。实际上,当模型由可微分量(例如,具有非线性激活函数的加权和)组成时,反向流传似乎仍是当前的最佳选择。其他一些方式如目标流传已经被作为训练神经网络的替代方式被提出,但其效果和普及还处于早期阶段。但一些研究表明,目标流传最多可达到和反向流传一样的效果,并且实际上常常需要额外的反向流传来举行微调。换句话说,老掉牙的反向流传仍然是训练神经网络等可微分进修系统的最好方式。另一方面,探究运用非可微模块来建立多层或深度模型的可能性的需求不仅仅是学界的兴趣所在,其在现实应用上也有很大的潜力。例如,基于树的集成(例如随机丛林或梯度提升决策树(GBDT)仍然是多个领域中建模离散或表格数据的主要方式,为此在这类数据上运用树集成来获得分层分布式表征是个很有趣的研究方向。在这样的案例中,由于不能运用链式法则来流传误差,反向流传不再可行。这引发了两个基本的问题:首先,我们是否可以用非可微组件建立多层模型,从而中间层的输出可以被当作分布式表征?其次,如果是这样,如何在没有反向流传的帮助下,联合地训练这种模型?本文的目的就在于提供这种尝试。2017 年,周志华和冯霁等人提出了深度丛林框架,这是首次尝试运用树集成来建立多层模型的工作。具体来说,通过引入细粒度的扫描和级联操作(cascading operation),该模型可以建立多层结构,该结构具备适应性模型复杂度,且能够在多种类型的任务上取得有竞争力的性能。研究者们提出的 gcForest 模型利用了集成进修多样性增强的各种策略,然而该方式仅适用于监督进修设置。
深度丛林的模型框架。同时,该论文仍然不清楚如何利用丛林来建立多层模型,并明确地测试其表征进修能力。由于很多之前的研究者认为,多层分布式表征可能是深度神经网络成功的关键,为此我们应该对表征进修举行这样的探究。2018 年,周志华等人又在研究《Multi-Layered Gradient Boosting Decision Trees》中探究了多层的决策树。该工作力求利用两个方面的优势:树集成的出色性能和分层分布式表征的表达能力(主要在神经网络中举行探究)。具体来说,该研究提出了首个多层结构,每层运用梯度提升决策树作为构造块,明确强调其表征进修能力,训练过程可以通过目标流传的变体举行联合优化。在不断努力下,研究人员已经证明了深度丛林模型可以在有监督和无监督的环境下举行训练,人们可以运用决策树来获得分层和分布式表征。关于深度丛林系列研究才刚刚开始,对于不可微分进修模块的探究,有待更多的科研人员加入。相关资源在相关资源推荐中,作者推荐了深度丛林的相关论文与报告:论文:Deep Forest链接:https://arxiv.org/pdf/1702.08835.pdf报告:周志华:An exploration to non-NN deep models based on non-differentiable modules链接:https://aistats.org/aistats2019/0-AISTATS2019-slides-zhi-hua_zhou.pdf在此,我们也附上机器之心先前介绍深度丛林的相关内容,以供大家进修。9 大数据集、6 大度量指标完胜对手,周志华等提出用深度丛林处理多标签进修深度丛林第三弹:周志华组提出可做表征进修的多层梯度提升决策树南京大学提出运用树型集成算法建立自编码器模型:对比 DNN 有更高的准确性和高效性从 Boosting 到 Stacking,概览集成进修的方式与性能