更多腾讯海量技术文章,请关注云加社区:https://cloud.tencent.com/developer
作者:王相军
导语
花了一下午时间学习了周志华教授的新paper——《Deep Forest: Towards An Alternative to Deep Neural Networks》,论文主要介绍了一种新的集成机器学习方法——gcForest,其核心思想是:利用级联森林(决策树集成)方法去学习生成模型,一定程度上可以弥补DNN的部分劣势!(强烈说明:作为一个小菜鸟,里面有很多都是自己的个人理解,不对的地方希望看到的大神多多指教,感激不尽!!! )
一、DNN和gcForest的优缺点
DNN
1)DNN需要大的样本集,在小样本数据集上表现不可观;
2)DNN本身就是复杂的模型,所以训练过程很复杂,需要大量的复杂计算;
3)参数太多,需要花费大量的调参时间。(坊间流行一句话:DNN的训练更像是艺术,而不是科学或者工程);
4)DNN在大数据集上的效果确实很好。
gcForest
1)gcForest在大数据集上的表现和DNN分庭抗礼,在小数据集上也表现很好;
2)参数少,调参简单,在很多领域的不同数据集上,使用默认设置,结果都很好;
3)训练过程简单、理论体系更易懂;
4)执行效率高,gcForest在一台PC上的效率相当于DNN在GPU机器上的效率;
5)并行度高,作为Forest,有着天然的高并行性。
二、gcForest的方法论
gcForest的核心主要包括两大块:级联森林(Cascade Forest)和多粒度扫描(Multi-Grained Scanning)。
1、级联森林(Cascade Forest)
级联森林的构成:级联森林的每一层都是由好多个森林(既有随机森林,又有完全随机森林)组成,而每一个森林又是由好多个决策树(Decision Tree)组成,所以这种组合是集成的集成!其中每一层的随机森林和完全随机森林保证了模型的多样性!具体的级联森林结构如下图1所示。
图1 级联森林结构图
图1中的级联森林每一层包括两个完全随机森林(黑色)和两个随机森林(蓝色)。每个完全随机森林包含1000个完全随机的决策树,每个决策树的每个节点都是随机选择一个特征做分裂,直至每一个叶节点包含的实例属于同一个类,或者实例数目不多于10个;每个随机森林也是1000个决策树,每个决策树的生成是随机选择sqrt(d)个特征(d输入的总特征),每次选择gini值最高的做分裂。
级联森林的迭代终止条件:迭代到效果不能提升就停止!!!
级联森林中每个森林是如何决策的呢?
每个森林中都包括好多棵决策树,每个决策树都会决策出一个类向量结果(以3类为例,下面也是),然后综合所有的决策树结果,再取均值,生成每个森林的最终决策结果——一个3维类向量!每个森林的决策过程如下图2所示。
图2 每个森林的决策过程(决策树中的叶子颜色代表不同的类)
这样,每个森林都会决策出一个3维类向量,回到图1中,级联森林中的4个森林就都可以决策出一个3维类向量,然后对4个*3维类向量取均值,最后取最大值对应的类别,作为最后的预测结果!
2、多粒度扫描(Multi-Grained Scanning)
多粒度扫描是为了增强级联森林,为了对特征做更多的处理的一种技术手段。具体扫描过程如下图3所示。
图3 多粒度扫描过程
图3是分别对序列数据和图像数据的原始输入特征做Multi-Grained Scanning处理的过程。
对于序列数据,假设我们的输入特征是400维,扫描窗口大小是100维,这样就得到301个100维的特征向量,每个100维的特征向量对应一个3分类的类向量,即得到:301个*3维类向量!最终每棵森林会得到903维的衍生特征变量!
于图像数据的处理和序列数据一样,图像数据的扫描方式当然是从左到右、从上到下,而序列数据只是从上到下。
当然,可以用各种尺寸不等的扫描窗口去扫描,这样就会得到更多的、更丰富的特征关系!
三、整体实现
整个实现过程附上一张大图4。
图4 gcForest算法的实现流程图
四、结果分析
1、在大数据集上,分别和DNN类、LR、RF、SVM等算法做了对比。
1)图像分类(数据集:MNIST):略低于DNN,基本持平(99.05%与98.96%);
2)人脸识别(数据集:ORL):人脸图像数量不同时,gcForest都最好;
3)音乐分类(数据集:GTZAN):gcForest最好(65.67%);
4)手部运动识别(数据集:sEMG):gcForest最好(55.93%);
5)情感分类(数据集:IMDB):gcForest最好(89.32%)。
2、在几个小数据集上表现和很好。
五、总结
作为小菜鸟新人,自己写这篇文章的初衷只是简单的学习分享,把自己看到的觉得还不错的东西记录下来,以供交流学习;自己对DNN的了解也有限,所以,这篇文章也没有任何要抨击DNN的意思,自己也没有这个实力(这是重点,哈哈哈)!
最后,如果本文有写的不对的地方,请看到的大神不吝赐教!谢谢。
领取专属 10元无门槛券
私享最新 技术干货