【论文解读】关于深度森林的一点理解

article/2025/9/25 19:24:50

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的比较上,首先,论文中指出了在前期准备上,两种结构所存在的差异,如下图:
DNN
如图所示,gcForest在很多地方都是确定的,这就使得在建立结构时期,所做的工作是稳定的,接下来,论文中把gcForest和其它几个流行的学习算法在不同领域的实验结果放在论文上:
图像分类
人脸识别
音乐分类
手部运动识别对比
情感分类结果对比
低维度的数据
如上面几幅图,gcForest确实在大多数实验中的效果还是很有竞争力的,最后,论文中为了进一步介绍gcForest,把其中两个重要的特征,级联森林和多粒度扫描做了对比:

运行时间

Time
因为gcForest本身就适用于大规模的并行运算,因此它的时间也是很有竞争力的。

正如论文末尾提到的,这篇论文还只是一个半成品,

  • 1、它提出了一种新的想法,
  • 2、这个方法虽然新,但其实是和DNN做结合的方法,他们最后的目的是找到一种能代替DNN的方法,特别是通过级联森林结构,不仅进行表示特征学习,还能够自动决定模型的复杂度。

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

总结

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

发展

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

ps:欢迎小伙伴们访问我的个人主页,并与我交流哦!


http://chatgpt.dhexx.cn/article/rQpP9YyM.shtml

相关文章

随机森林算法的扩展-深度森林(deep forest)

深度学习最大的贡献,个人认为就是表征学习(representation learning),通过端到端的训练,发现更好的features,而后面用于分类(或其他任务)的输出function,往往也只是普通的…

多标签学习与深度森林学习笔记

周志华老师团队Multi-Label Learning with Deep Forest (MLDF)报道很多,各大机器学习平台也都就这篇文章的亮点给出了分析。近日在准备组会报告时较为详细地拜读了一下,也由此简单了解了一下多标签学习的相关内容。 正如论文作者所述,MLDF的…

论文阅读:Deep forest/深度森林/gcForest

最近组会汇报了这篇文章,简单把思想梳理下来了,对了搜索深度森林的时候可能会看到Deep Forest: Towards an Alternative to Deep Neural Networks,这两篇文章的内容基本上是一致的,只在叙述方面有一些很小的不同。 下面是我做的p…

【冰糖Python】深度森林 DeepForest

此文为记录DeepForest的简单使用 原文《Deep Forest: Towards an Alternative to Deep Neural Networks》 “A key advantage of deep forest is its adaptive model complexity depending on the dataset. The default setting on hyper-parameters enables it to perform r…

使用深度森林(Deep Forest)进行分类-Python

一、什么是深度森林? 传统DNN的不足: 1、需要大量的数据集来训练; 2、DNN的模型太复杂; 3、DNN有着太多的超参数 gcForest的优势: 1、更容易训练; 2、性能更佳; 3、效率高且可扩展、支持…

深度森林浅析

深度森林 深度学习最大的贡献是表征学习(representation learning),通过端到端的训练,发现更好的features,而后面用于分类(或其他任务)的输出function,往往也只是普通的softmax&…

深度森林原理及实现

目录 背景 级联森林 多粒度扫描 代码 总结 背景 深度森林(Deep Forest)是周志华教授和冯霁博士在2017年2月28日发表的论文《Deep Forest: Towards An Alternative to Deep Neural Networks》中提出来的一种新的可以与深度神经网络相媲美的基于树的模型,其结构…

论文阅读:深度森林

论文地址:https://arxiv.org/pdf/1702.08835.pdf 相关代码:https://github.com/kingfengji/gcForest 深度森林是南大周志华老师前两年提出的一种基于随机森林的深度学习模型。 当前的深度学习模型大多基于深度学习神经网络(DNN)…

Deep Forest(gcforest)通俗易懂理解

DeepForest(gcforest)深度森林介绍 1.背景介绍 当前的深度学习模型主要建立在神经网络上,即可以通过反向传播训练的多层参数化可微分非线性模块,周志华老师希望探索深度学习模型的新模式,探索不可微模块构建深度模型的可能性。从而提出了一…

【深度学习】Deep Forest:gcForest算法理解

一、相关理论 本篇博文主要介绍南京大学周志华教授在2017年提出的一种深度森林结构——gcForest(多粒度级联森林)。近年来,深度神经网络在图像和声音处理领域取得了很大的进展。关于深度神经网络,我们可以把它简单的理解为多层非…

从深度学习到深度森林方法(Python)

作者 |泳鱼 来源 |算法进阶 一、深度森林的介绍 目前深度神经网络(DNN)做得好的几乎都是涉及图像视频(CV)、自然语言处理(NLP)等的任务,都是典型的数值建模任务(在表格数据tabular …

深度森林(gcforest)原理讲解以及代码实现

GcForest原理 gcforest采用Cascade结构,也就是多层级结构,每层由四个随机森林组成,两个随机森林和两个极端森林,每个极端森林包含1000(超参数)个完全随机树,每个森林都会对的数据进行训练,每个森林都输出结…

有关 -fPIC 选项的编译问题

嵌入式 Linux 上基于 makefile 的编译,执行编译出现如下错误: error: test/fake_blemgr_test.o: requires unsupported dynamic reloc R_ARM_REL32; recompile with -fPIC 这个问题涉及到生成位置无关代码的机制,在我这里的情况是&#xff0…

-fpic 与-fPIC的区别

-fpic 与-fPIC的区别 前言 在编译动态库的时候,我们应该需要使用-fpic 或-fPIC参数。如下所示: 然后,使用gcc或g 命令生成动态库 pic 与PIC的异同 相同点:都是为了在动态库中生成位置无关的代码。通过全局偏移表(GOT&…

在字符串中删除指定的特定字符

使用C语言,编写一个尽可能高效的函数,删除字符串中特定字符。 思路:要求尽可能高效,定义一个256的int数组,将需要删除的字符ASCII作为数组下标,要删除的置1,注意点:处理后的字符串要…

实现一个删除字符串中的指定字符的简单函数

做出此函数只需将函数分步运行 第一步&#xff1a;确定函数接口和定义变量 因为是要删除字符串中的指定函数&#xff0c;所以要定义出字符串以及字符&#xff0c;即str[]和c。函数接口为void delchar&#xff08;char*str&#xff0c;char c); #include<stdio.h> int …

删除字符串某一指定子字符串

文章目录 功能&#xff1a;删除字符串某一指定子字符串业务场景实现方法1、Java实现 功能&#xff1a;删除字符串某一指定子字符串 业务场景 在数据库中有一个String类型的字符串&#xff0c;该字符串通过逗号进行分割&#xff0c;现在前端传过来字符串中的一个子字符串&…

删除字符串中指定的字符C语言详解

问题描述&#xff1a; 从键盘输入一个字符串和一个字符&#xff0c;删除字符串中所指定的字符&#xff0c;将结果保存到一个新的字符串中并输出 编译环境&#xff1a;vc 6.0; 代码 #include <stdio.h>int main() {char str1[80], str2[80], ch;int i,j0;printf("…

C语言删除字符串中的指定字符

一、函数方法&#xff08;推荐使用这个方法&#xff09; 只需要进行一次对目标字符串的遍历即可完成删除目标字符的功能&#xff0c;具体的代码如下所示&#xff1a; void delchar( char *str, char c ) {int i,j;for(ij0;str[i]!\0;i){if(str[i]!c)//判断是否有和待删除字符一…

C++ 删除指定字符串中的某些字符

C 删除指定字符串中的某些字符 题目 输入URL前缀和后缀&#xff0c;删除字符串中的“,/”&#xff0c;把URL拼接在一起且后边有“/”。 用例&#xff1a; 输入&#xff1a;/abhdsjvf/,/afsggfd 输出&#xff1a;/abhdsjvf/afsggfd/ 程序实现&#xff1a; #include<iostrea…