作者 | 陈大鑫
在人工智能的发展历史上,神经网络这一“物种”可谓是经历了起起伏伏,不过时至今日,神经网络总算是修得一段“正果”,而在中国近几年的AI发展中,也有那么几个研究总是时不时撩人心弦,今天要介绍的于2017年被南京大学周志华和其博士生冯霁等人提出的深度森林框架gcForest就是其中之一。
就在今日,南京大学人工智能学院周志华教授在微博上公开表示:“其经过南京大学LAMDA实验室徐轶轩同学的不懈努力,深度森林DF21在Github和开源中国同时开源。”
有些巧合的是,关于此项目的名称,有网友表示道起的很是霸气。。
据了解,徐同学开源的这一版相比之前的版本做了很好的封装,更为简单易用,同时也进行了高性能优化,大幅降低了内存依赖,对于科研和落地应用都是很好的工具。
此外,这个模型的全名是:DF21: A Practical Deep Forest for Tabular Datasets。内存消耗是 DF21 主要解决的问题,在此版本中,在千万级别的表格型数据集上进行训练,模型占用的内存一下减少到了原来的十分之一左右,这在一定程度上解决了深度森林固有的内存消耗、只能用 CPU 训练等问题。
- 项目地址:http://www.lamda.nju.edu.cn/deep-forest/
- Github链接:https://github.com/LAMDA-NJU/Deep-Forest
- Gitee 地址:https://gitee.com/lamda-nju/deep-forest
1
Deep Forest 21项目介绍
本项目中的 DF21 是深度森林的 2021.2.1 实现版本。深度森林是基于决策树的深度学习模型。使用如随机森林、GBDT 等树模型的应用都可以尝试使用 DF21。
它具有以下优势:
- 拥有比其他基于决策树的集成学习方法更好的性能。
- 拥有更少的超参数,并且无需大量的调参。
- 训练速度快,效率高。
- 扩展性好,能够处理大规模数据。
安装教程
深度森林的最新稳定版本已经发布在 PyPi上面,可以通过pip install一键安装:
$ pip install deep-forest
关于 Nightly-Build 版本以及如何对源代码进行编译请读者自行参考官网的安装说明。
使用示例
深度森林采用了与 Scikit-Learn类似的 API 设计。例如,下面的代码展示了如何将深度森林利用在一个简单的数字分类数据集上:
实验
研究者使用随机森林、XGB、LightGBM等5种流行的基于决策树的集成学习方法作为 baseline,在所有 baseline上都设置决策树的数量相同,将其余超参数设置为其默认值。
分类精度
研究者在11项数据集上进行了测试,每个数据集的 SOTA 结果如黑体加粗字体所示,可以看出深度森林算法在6个数据集上面都实现了SOTA性能。
运行时间
下图是以秒为单位的训练阶段和评估阶段的运行时间,可以看出深度森林算法的表现有好有坏。
2
“深”为什么重要,以及还有什么深的网络
在2019年8月14 日下午,IJCAI 2019大会召开期间,周志华教授进行特邀大会演讲,演讲主题是《Deep Learning: Why deep and is it only doable for neural networks?》。
在演讲中,周志华教授从自己的角度解读了深度神经网络之所以获得成功的本质因素,以及如何在兼顾这些因素的同时,找到神经网络之外的其它的深度模型。
深度森林框架gcForest是一个基于决策树森林的算法,是基于集成模型的深度模型;具体来说,通过引入细粒度的扫描和级联操作(cascading operation),该模型可以构建多层结构,该结构具备适应性模型复杂度,它也可以在除了大规模图像数据之外的任务中获得和深度神经网络相似的表现。而在大规模图像数据任务中不能取胜,其中原因是目前没有适当的硬件训练足够大的模型。
从名字可以看出,这个模型有两个关键性质:级联树结构,以及多粒度。
下图是模型的级联树结构:
图中用红色标出了原始的输入特征向量。基于输入的特征向量,我们可以训练出一些森林,每个森林都是多个决策树的集成模型。假设我们有三个分类需要预测,每个分类用一个 bit 来表示,那么每个森林的输出就有 3 个 bit 长。在第一个标签训练完成后,我们把这 3bit 输出和原始的输入特征向量串联起来,也就是说我们用更多的特征扩增了原始的输入向量;接着,我们用扩增后的向量,训练模型的下一层。
这个过程可以不断地重复,直到最后一个标签,就可以对所有预测值取平均,得到最终的预测结果。模型的最终层数可以由各种指标决定,比如当你发现增加更多的层之后模型的表现并没有提升,这时候你就可以停下来了。这样,你就不需要在开始训练前就设定好模型有多少层。另外,在工业应用中,当你的数据非常大的时候,你也可以用训练误差(training error)来控制这个过程什么时候停止:当训练误差不再继续下降的时候,就可以停止。就这么简单。
下图是gcForest模型的总体架构:
更多内容请查看AI科技评论之前报道过的“深度 | 周志华:“深”为什么重要,以及还有什么深的网络”一文。
3 gcForest 的前途和未来挑战 gcForest 发展瓶颈: 从目前的计算架构来看,任务的规模很大程度上限制了深度森林的表现,任务过大内存会很快耗光,但深度森林不能像深度学习一样使用GPU进行加速。树结构很难像矩阵操作一样在 GPU 上运行,因为它中间涉及到很多分支选择。 几个发展方向: 1、探索深度森林的能力边界,比如探索深度森林是否具有传统认为只有神经网络才具有的的自编码能力; 2、研究如何调动更多计算资源,更好利用其自身的高并行性的特点,做任务级的并行; 3、在应用层面检验深度森林算法在一个真实场景下的真实任务(比如从有大量离散特征的网上金融交易数据中进行非法套现检测)里效果如何。
另外,Keras 创始人 François Chollet 曾说,可微分的层是当前的模型的基础弱点;gcForest 不使用任何可微分的层。深度学习之父 Geoffery Hinton 说,他想把反向传播扔掉、从头再来;gcForest 就不使用反向传播,连梯度都不使用。所以,从学术研究的角度讲,研究 gcForest 这样的不依赖梯度的深度模型将会是机器学习的重要分支............
周志华教授对gcForest的发展现状表示:
需要克服的问题还有很多,不过所有这些付出都是值得的。因为,「没有免费的午餐」,没有哪个学习模型永远都是最好的,尽管深度神经网络很成功,我们还是要继续探索其他类型的模型。我们猜测深度神经网络确实是适用于数值建模问题的,但是当你面对的是符号化、离散、表格数据的时候,深度森林可以做得更好。
周志华教授去年在AI科技评论的文章留言下也曾回复道:
现有模型上的改进会比较快进入应用。基础研究的进展,从雏形出现到广泛应用通常要走很长的路。深度神经网络研究了三十多年,十百万技科学家工程师的努力改进才有今天。深度森林提出两年不到,已经有应用就很超预期了,需要解决的问题很多。并且这个工作的真正价值并不在于提出某个应用模型,而是开拓一条值得探索的新路。
而对于gcForest未来面临的挑战,周志华教授接着表示道:
由于目前我们不知道深度森林可以发展到什么程度,因为我们还构建不出非常深的模型,但即便未来我们构建出很深的模型了、而且发现它的表现没有我们预想的那么好,我们的研究也仍然是有价值的。 因为深度森林的构建过程为我们的这几个猜测提供了证据:当你用一个模型就可以做到逐层信号处理、特征变换、足够的模型复杂度的时候,你就可以享受到深度模型的好处。这也就是深度森林比之前的各种森林都有更好的表现的原因。 它也带给我们新的启示:我们是否有可能设计出同时兼顾到这几点的新的模型?
周志华教授最后总结道:“曾经我们认为深度学习是一个「小黑屋」,里面只有深度神经网络。现在我们打开门,发现了里面有深度森林,也许未来还能发现更多别的东西。”
资源链接:
论文:《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