关于深度森林的一点理解

2017年年初,南京大学周志华老师上传了一篇名为:Deep Forest:Towards An Alternative to Deep Neural Networks的论文,一石激起千层浪,各大媒体纷纷讨论着,这似乎意味着机器学习的天色要变,实则不然,周志华老师通过微博解释道,此篇论文不过是为机器学习打开了另一扇窗,是另一种思维,而不是真的去替代深度神经网络(DNN)。

下面我就简单概括一下我对这篇论文的理解,如过存在问题希望看客帮楼主提出来,一起解决。

全篇论文重在介绍Deep Forest与Deep NN的比较,对于Deep Forest的结构解释比较简单,如果你是初学者,也许不太能够理解其中的Random Forest等。当然,为了体现出gcForest(Deep Forest的另一种说法,因为它的结构可以理解为:multi-Grained Cascade forest(多粒度级联森林))的优势,首先还是要说一下他的对比方法,DNN存在哪些不足之处。

DNN的不足之处:1、需要大量的数据集来训练;2、DNN的模型太复杂,导致它的运行环境更适合公司,个人的使用还是比较局限;3、DNN有着太多的超参数(hyper-parameters),学习性能太依赖与对它们的调节。

在gcForest中,作者沿用了DNN中的类似于表征学习等特性,摒弃了DNN中复杂的逻辑结构。

gcForest原理,这个结构是生成一个深度树集成方法,使用级联结构让gcForest做表征学习,当输入带有高维度时,通过多粒度扫描,其表征学习能力还能得到进一步的提升,而且这种方法还能让gcForest注意到上下文结构,重要是:级联的数量能自行调节,因此,即使在处理小数据量的时候效果依然是有可能不错的。相对于DNN而言,gcForest的超参数数量是很少的,且设定性能的鲁棒性很高,因此,对于跨域的时候依旧可行,根据gcForest的结构,显然,它天生就适合并行,因此在性能上绝对不会弱于DNN。

gcForest方法:也是延续DNN的对原始特征做逐层处理,其中的级联森林结构如下图所示:

(图片来源是周先生论文原文)

每一级都是决策森林的集合,在原文的实验中使用的是两个完全随机森林和两个随机森林,每个完全随机的树森林包含1000个完全随机树,通过随机选择一个特征在树的每个节点进行分割实现生成,树一直生长,直到每个叶节点只包含相同类的实例或不超过10个实例。类似地,每个随机森林也包含1000棵树,然后选择具有最佳 gini 值的特征作为分割。生成类如下图:

(叶节点中的不同标记表示了不同的类)

通过这个结构之后,每个森林都会生成一个三维的类向量。那么,是怎么实现自动调整级数的呢?在该结构中,首先会在一级结束后做一个性能测试,然后再继续生成下一级,当扩展一个新的级后,整个级联的性能将在验证集上进行估计,如果没有显着的性能增益,训练过程将终止。因此,gcForest能够通过适当的终止,来决定其模型的复杂度,这就使得相对于DNN,gcForest在即使面对小数据集的情况下一样使用,因为它的结构不依赖于大量的数据生成。

接下来,gcForest该处理数据的特征关系了,也是受到DNN的启发,对序列数据有效,其中顺序是极为关键的,因此,在gcForest中,用多粒度扫描来增强级联森林。如下图所示:

使用滑动窗口扫描的特征重新表示

上图分别表示了两种原始输入特征所用的方法,其大致思想都是采用滑动窗口的方法,先生成若干个实例,然后通过实例生成两个森林,一个完全随机森林,一个随机森林,然后再把生成的两个森林生成对应的相同维度的“类向量”,最后把这两大类向量连接在一起,综上,就是通过某段原始特征生成部分深度森林的想法,但应对的一般来说会采用多个不同大小的窗口做扫描,如论文中就采用了三个不同大小的窗口,如图所示:

(gcForest的整体流程)

实验对比:图题所述,这篇论文主要还是在于gcForest对DNN的比较上,首先,论文中指出了在前期准备上,两种结构所存在的差异,如下图:


如图所示,gcForest在很多地方都是确定的,这就使得在建立结构时期,所做的工作是稳定的,接下来,论文中把gcForest和其它几个流行的学习算法在不同领域的实验结果放在论文上:

(图像分类)

(人脸识别)

(音乐分类)

(手部运动识别对比)

(情感分类结果对比)

(低维度的数据)

如上面几幅图,gcForest确实在大多数实验中的效果还是很有竞争力的,最后,论文中为了进一步介绍gcForest,把其中两个重要的特征,级联森林和多粒度扫描做了对比:


运行时间:因为gcForest本身就适用于大规模的并行运算,因此它的时间也是很有竞争力的。正如论文末尾提到的,这篇论文还只是一个半成品,1、它提出了一种新的想法,2、这个方法虽然新,但其实是和DNN做结合的方法,他们最后的目的是找到一种能代替DNN的方法,特别是通过级联森林结构,不仅进行表示特征学习,还能够自动决定模型的复杂度。

文章的最后提到了堆叠方面的研究,一般存在与将一级学习者的输出传递给另一个学习者的过程,原文中使用的是交叉验证程序从下一个级别生成输入,级联程序也与Boosting有关,它能够自动决定级联中学习者的数量,特别是级联增强程序效果尤其明显,在之前,都是使用Bagging作为Boosting的基础学习者,而gcForest将同一级别的合奏用于特征重新表示,目前的问题是对于多样性的把握还不够,因此,研究人员试图增加多样性的启发,如,可以在级联结构中使用不同类型的森林。

总结:这里就引用原文的结论做一下这篇论文的总结,首先,gcForest的优点如下:1、gcForest具有少得多的参数(和DNN相比),并且对参数设置都不太敏感;2、无论是大规模或者是小规模数据,在不同领域中gcForest的表现都是不错的;3、作为一种基于树的方法,gcForest更容易做理论分析。

发展,这个gcForest具体性能如何,我还没有去验证,不过在理解上确实要比DNN简单的多(目前对DNN的了解知之甚少),不过gcForest相对于看似成熟的DNN还有非常非常大的提升空间。



猜你喜欢

转载自blog.csdn.net/yanhuibin315/article/details/70186823