- 本文详细阐述了周志华教授及其学生冯霁于2017发表的一篇关于深度森林的学术论文。
- 注意:本文不是对原论文的逐句翻译,而是提取论文中的关键信息,重点是是多粒度级联森林的原理部分。
- 同时也增加了自己的一些理解和感悟。
论文标题译为:深度森林:深度神经网络的替代方案
🌺摘要:
- 在本文中,我们提出了gcForest(multi-Grained Cascade Forest 多粒度级联森林),这是一种决策树集成方法,在广泛的任务范围内与深度神经网络具有高度竞争力。
- 与深度神经网络相比,gcForest更容易训练;即使在我们的实验中,它应用于不同领域的不同数据,通过几乎相同的超参数设置也可以获得出色的性能。
- gcForest的训练过程是高效的,用户可以根据可用的计算资源来控制训练成本。执行效率也可以进一步提高,因为gcForest自然倾向于并行实现。
- 此外,与需要大规模训练数据的深度神经网络相比,即使只有小规模的训练数据,gcForest也能很好地工作。
1 Introduction💝
目前深度神经网络存在的一些问题
- 首先,众所周知,训练通常需要大量的训练数据,这使得深度神经网络无法直接应用于具有小规模数据的任务。值得注意的是,即使在大数据时代,由于标注成本高,许多真实任务仍然缺乏足够的标记数据量,导致深度神经网络在这些任务中的表现不佳。
- 其次,深度神经网络是非常复杂的模型,训练过程通常需要强大的计算设施,阻碍了大公司之外的个人充分利用学习能力。(成本高)
- 更重要的是,深度神经网络有太多的超参数,学习性能严重依赖于对它们的仔细调整。即使几个作者都使用卷积神经网络[LeCun等人,1998;Krizhenvsky等人,2012;Simonyan和Zisserman, 2014],他们实际上使用了不同的学习模型,因为有许多不同的选择,比如卷积层结构。这一事实不仅使得深度神经网络的训练非常棘手,就像一门艺术而不是科学或工程,而且由于有太多干扰因素和几乎无限的配置组合,深度神经网络的理论分析也非常困难。(可解释性较差)
对于深度神经网络来说,表征学习能力是至关重要的。同样值得注意的是,要利用大的训练数据,学习模型的容量应该很大;这部分解释了为什么深度神经网络非常复杂,比支持向量机等普通学习模型复杂得多。我们推测,如果我们可以将这些属性赋予一些其他合适形式的学习模型,我们可能能够实现与深度神经网络竞争的性能,但具有较少的上述缺陷。(从深度学习的网络结构中取其精华)
深度森林的一些优势
- 在本文中,我们提出了一种新的决策树集成方法gcForest (multi-Grained Cascade Forest)。该方法生成一个深度森林集成,具有级联结构,使gcForest能够进行表示学习。当输入具有高维时,它的表示学习能力可以通过多粒度扫描进一步增强,这可能使gcForest具有上下文或结构感知能力。
- 级联级别的数量可以自适应地确定,从而可以自动设置模型复杂性,使gcForest即使在小规模数据上也能出色地执行。此外,用户可以根据可用的计算资源控制训练成本。
- gcForest的超参数比深度神经网络少得多;更好的消息是,它的性能对于超参数设置非常健壮,因此在大多数情况下,即使跨来自不同域的不同数据,它也能够通过使用默认设置获得出色的性能。这不仅使得gcForest的训练方便,而且理论分析也很方便,树学习器通常比神经网络更容易分析。
- 在我们的实验中,gcForest获得了与深度神经网络高度竞争的性能,而gcForest的训练时间成本小于深度神经网络。
目前的深度模型总是神经网络,多层参数化可微非线性模块,可以通过反向传播训练。考虑深度学习是否可以与其他模块一起实现是很有趣的,因为它们有自己的优势,如果能够深入,可能会表现出巨大的潜力。本文致力于解决这一根本问题,并举例说明如何建立深度森林;这可能为在许多任务中替代深度神经网络打开了一扇门。
2.1 Cascade Forest Structure🎃
所谓的级联森林(Cascade Forest),指的构建一种类似神经网络的处理结构,如下所示,其中级联的每一级接收其前一级处理的特征信息,并将其处理结果输出到下一级。
- 而和神经网络不同的是,这里构成网络状结构的节点不再是激活函数,而是随机森林。其中每一层的深度森林包括两种模型,完全随机森林(completely-random tree forests)(蓝色)和随机森林(random forests)(黑色),在实际使用过程中,每一层两类模型的种类是超参数,可以人工调节。(在这里,我们包括不同类型的森林以鼓励多样性,因为众所周知,多样性对于整体建设至关重要[Zhou, 2012]。)
- 上图展示了两个随机森林与两个完全随机森林集成的情况。每个完全随机树森林包含500棵完全随机树,通过在树的每个节点随机选择一个特征进行分割,并不断生长树,直到每个叶节点只包含同一类实例而生成。同样,每个随机森林包含500棵树,通过随机选择√d(根号d)个特征作为候选(d为输入特征的数量),并选择基尼值最好的一个进行分割。每个森林中的树木数量是一个超参数。
- 上述结构实际上就是一个集成算法的集成(ensemble of ensembles),每一层都是决策树森林的集成。
然后,非常关键的环节是,在实际训练过程,每个随机森林模型(也包括完全随机森林)的输出并不是模型的预测概率,而是叶节点中不同样本的数量占比,并且是按照每一条数据来进行的计算。例如当我们带入全部数据集进行一个随机森林进行计算时,假设该随机森林只有3颗树(实际默认情况是500颗树,上述情况只是简化情况),那么在每一棵树中,某条数据x(也就是某个样本)一定被分在了树的某个叶节点上,例如下图所示的第一棵树的最左边叶节点、第二棵树的中间叶节点、第三棵树的右边叶节点,如上图所示。
此时样本总共有三个不同类别,分别是绿色圆圈、红色的方框和黄色的三角,第一棵树上叶节点上三个不同类别样本占比分别为0.2:0.5:0.3,第二棵树上叶节点中三类占比为0.3:0.4:0.3,第三棵上叶节点中三类占比为1:0:0,然后计算三个类别占比的均值,即:
- 由此x样本就可以获得额外的3个特征(也被称作增强特征),即0.5、0.3、0.2。需要注意的是,每个样本都可以按照这个规则进行计算,假设当前数据集有m条数据,那么把这m条数据各自的增强特征按照样本顺序进行拼接,则可以拼接成规模为m行3列的增强特征集。即按照上述规则,一个随机森林即可创造一个包含3个特征的数据集,而如果进一步增加模型数量,即带入两个随机森林和两个完全随机森林进行计算,则可以创造包含3*4=12个特征的增强特征数据集。(一个样本)
- 这里需要简单讨论,为何要求每个评估器输出叶节点上不同类别样本占比而不是模型预测结果,这里其实有两层考虑:首先,对于一个随机森林集成算法的集成,其本质仍然还是借助决策树的分类原理进行预测,即希望通过某些规则的叠加最终提升叶节点的不同样本类别的纯度;其次由于当前算法是借鉴了神经网络算法结构,而神经网络算法的核心优势就在于不同层其实能进行“有侧重”的学习,而其实深度森林也希望最终模型的不同层能呈现出“有侧重”的学习情况。当然,这也是后续模型为何要多粒度扫描的核心原因。
- 当然,与其说模型输出的是样本预测结果,不如说此时每个单独的随机森林输出的是某种形式的模型分类效力指标。无论如何,每个模型的输出结果将成为一个增强特征(augmented features),当该层有4个模型时候,下一层将接收到12个增强特征。不难看出,这种增强特征数量较少,而在深度森林论文中,作者给出了这种增强特征“少但有效”的证明,我们只需要知道其确实有效即可。此外,为了减少过拟合风险,一般来说深度森林的每个随机森林在进行计算时也是需要经过交叉验证的,即得到的样本占比的均值,实际上是经过交叉验证后得到的结果。
2.2 Multi-Grained Scanning🍄
多粒度扫描是博主本人认为深度森林最像深度学习的地方。
- 深度神经网络在处理特征关系方面非常强大,例如卷积神经网络对原始像素之间的空间关系非常关键的图像数据非常有效[LeCun et al ., 1998;Krizhenvsky等,2012];循环神经网络对序列数据有效,其中顺序关系至关重要[Graves等人,2013;Cho等人,2014]。
- 受到这一认识的启发,我们用多粒度扫描过程增强级联森林。
在了解了每个模型的训练过程和输出结果之后,接下来进一步看不同层的训练过程。这里最重要的概念就是多粒度扫描(Multi-Grained Scanning)。所谓的多粒度扫描,实际上指的是每一层接收到的特征和样本各不相同,从数据集角度来看,这个过程就类似于随着模型训练,逐渐扫描二维数据集。很明显,这个过程也是受到卷机神经网络和循环神经网络的启发——通过滑动窗口来学习完整数据集的信息。
先举个简单的例子了解什么是滑动窗口,假设现在某数据集有5个特征,我们以两个特征为窗口大小,滑动窗口的过程总共能创造4个包含两个特征的数据集,如上图所示。
- 如上图所示,滑动窗口用于扫描原始特征。假设有400个原始特征,窗口大小为100个特征。对于序列数据,滑动一个特征窗口,生成一个100维的特征向量;总共产生了301个特征向量。如果原始特征具有空间关系,例如一个20 × 20的400图像像素面板,那么一个10 × 10的窗口将产生121个特征向量(即121个10 × 10的面板)。滑动过程中就能创建301个包含100个特征的数据集。这其实就相当于是一种划分数据集的方法。
- 接下来,针对这301个包含100个特征的数据集,我们可以按照之前所说的单模型训练过程,逐个带入这些数据集进行训练。注意,虽然是训练,但实际这也是一个数据增强的过程,即每个数据集训练完毕之后都将创造一个m*3的强化特征矩阵(假设总共是m条样本),而总共有301个数据集,因此一个模型就将产生一个包含301*3=903个特征的强化特征矩阵。而如果是带入两个模型,则将创造1806个特征的强化特征矩阵,即创造一个m*1806的数据集。注意该数据集也被称为原始强化数据集,需要带入到后续模型中进行训练。
- 请注意,当转换的特征向量太长而无法容纳时,可以进行特征采样,例如,通过对滑动窗口扫描生成的实例进行子采样,因为完全随机树不依赖于特征分割选择,而随机森林对不精确的特征分割选择相当不敏感。
- 上图只显示了滑动窗口的一种大小。通过使用多种大小的滑动窗口,将生成不同粒度的特征向量。
2.3 Overall Procedure and Hyper-Parameters😡
在了解了强化特征矩阵的创建过程后,接下来我们进一步来讨论如何进行级联训练。整个训练过程可以由下图进行表示,我们逐部分进行介绍。
- 通过多粒度扫描创建原始增强特征矩阵
首先是通过多粒度扫描创建原始增强特征矩阵。需要注意的是,之前我们介绍过,在原始数据集有400个特征,并且窗口大小在100的情况下,通过一个随机森林和一个完全随机森林两个模型,就能创造一个m*1806的增强特征矩阵。而这个滑动窗口的大小是可以调整的,例如如果将窗口大小设置为200,则能创造201个包含200个特征的的数据集,按照每个数据集带入一个模型能创建3个增强特征的情况来进行计算,201个数据集*3*2个模型=能创建1206个特征的增强数据集。类似的如果窗口为300,则总共能创建101个数据集,带入两个模型则最终能创建一个包含606个特征的增强数据集。
总的来看,在三个不同窗口大小设置的情况下,最终我们能获得A、B、C三个增强特征数据集。接下来我们就用这三个数据集来进行级联模型的训练。当然需要注意的是,这里选择几个窗口、每个窗口选择多少特征,都是可以作为超参数进行人工调整的。
- 级联模型训练
在准备了基础数据集之后,接下来开始进行级联模型训练。如上图所示,每一层我们都打算训练一组2个随机森林+2个完全随机森林的模型组,这里我们首先带入数据集A完成这第一组组模型的训练,训练完成后该组模型同样也将创建一个m*12的增强特征数据集。我们将该数据集与A数据集拼接,就得到了一个m*1818增强数据集,然后以该数据集训练第二层模型组,注意,每一层的模型组都是相同的,第二层模型组仍然是2个随机森林+2个完全随机森林,并且第二层模型组的训练和第一层模型组训练过程完全相同,在训练结束后将创造一个m*12增强特征矩阵,我们将其和数据集B进行拼接,最终构成一个m*1218数据集,并带入到第三层进行计算。第三层计算过程也类似,结束后得到一个C矩阵拼接后的增强特征矩阵(𝐿𝑒𝑣𝑒𝑙1𝐶),并且得到一组预测结果。此时我们可以根据实际情况是否构建第二层的级联模型,如果继续构建下一层级联模型,则以𝐿𝑒𝑣𝑒𝑙1𝐶作为初始矩阵进行带入训练,再次进行训练,如此往复。整体来看,这个过程其实就是级联的级联。
- 收敛条件
那么何时训练停止呢?一方面我们可以根据实际硬件情况决定迭代停止条件,此外也可以比较两个相邻的级联结果差异,如果发现增加一个级联并不能大幅提升模型效果,则可以考虑停止增加级联。
- 预测过程
而当我们完成了模型训练之后,接下来就可以进行预测了。实际上深度森林的预测过程会非常高效,当带入某条测试数据时,我们只需要根据最终预测预测结果,即先寻找该样本的最高评分(即某个随机森林模型的叶节点的最高平均占比),然后根据该叶节点的类别判定当前样本所属类别即可。
- 上表总结了深度神经网络和gcForest的超参数,其中给出了我们实验中使用的默认值。
- 粗体突出显示影响相对较大的超参数;"?"表示默认值未知,或一般情况下不同任务需要不同设置。
3.1 Experimental result💕
Image Categorization:
Comparison of test accuracy on MNIST
Face Recognition:
Comparison of test accuracy on ORL
Music Classification:
Comparison of test accuracy on GTZAN
Hand Movement Recognition:
Comparison of test accuracy on sEMG data
Sentiment Classification:
Comparison of test accuracy on IMDB
Low-Dimensional Data:
Comparison of test accuracy on low-dim data
总结:gcForest极具竞争力。
3.2 Influence of Multi-Grained Scanning❓
为了研究级联森林结构和多粒度扫描的单独贡献,上表比较了MNIST、GTZAN和sEMG数据集上的gcForest和级联森林。很明显,当存在空间或顺序特征关系时,多粒度扫描过程对提高性能有明显的帮助。
3.3 Running time😈
多粒度扫描会增加gcForest的成本;然而,不同的扫描颗粒本质上是平行的。另外,完全随机树森林和随机森林都是并行集成方法[Zhou, 2012]。
因此,通过优化的并行实现,可以进一步提高gcForest的效率。请注意,训练成本是可控的,因为用户可以通过考虑可用的计算成本来设置粒度、森林和树木的数量。
4 Related Work💥
- gcForest是一种决策树集成方法。集成方法[Zhou, 2012]是一种强大的机器学习技术,它将多个学习器组合在一起完成同一任务。实际上,有一些研究表明,通过使用集成方法,例如使用深度神经网络特征促进的随机森林,性能甚至可以比简单地使用深度神经网络更好[Kontschieder等人,2015]。然而,我们使用集成的目的是完全不同的。我们的目标是替代深度神经网络,而不是与深度神经网络相结合。特别是,通过级联森林结构,我们不仅希望进行表示学习,还希望自动确定合适的模型复杂度。
- 多粒度扫描过程使用不同大小的滑动窗口来检查数据;这在一定程度上与小波和其他多分辨率检查程序有关[Mallat, 1999]。对于每个窗口大小,从一个训练示例生成一组实例;这与多实例学习[Dietterich et al, 1997]的包发生器[Wei and Zhou, 2016]有关。特别是上述滑动窗口图片的底部部分,如果应用到图像上,可以视为SB图像包生成器[Maron and Lozano-Pérez, 1998;魏,周,2016]。
- 级联方法与Boosting方法有关[Freund and Schapire, 1997], Boosting方法能够自动决定集合中学习器的数量,特别是级联Boosting方法[Viola and Jones, 2001]在目标检测任务中取得了很大的成功。注意,当使用多个grain时,gcForest的每个级联级别由多个等级组成;这实际上是级联中的级联。 每个等级中的级联都可以看作是一个集成算法的集成;与之前的研究(如使用Bagging作为Boosting的基础学习器[Webb, 2000])相比,gcForest使用相同级别的集合一起进行特征重新表示。 将一个级别的学习者的输出作为输入传递给另一个级别的学习者与堆叠有关[Wolpert, 1992;Breiman, 1996]。基于堆叠研究的建议[Ting和Witten, 1999;Zhou, 2012],我们使用交叉验证程序从一个等级生成下一个等级的输入。注意,超过两个等级的堆叠很容易过拟合,并且不能单独启用深度模型。
- 众所周知,要构建一个良好的整体,个体学习者应该是准确的和多样化的,但目前还没有被广泛接受的多样性的正式定义[昆切瓦和惠特克,2003;周,2012]。因此,研究人员通常尝试启发式地增强多样性,例如我们在每个等级使用不同类型的森林所做的工作。实际上,gcForest利用了所有四大类多样性增强策略[Zhou, 2012]。特别是,当将原始实例的标签分配给滑动窗口生成的所有实例时,如上述滑动窗口图片所示,一些标签分配本质上是不正确的;这与翻转输出方法有关[Breiman, 2000],这是一种用于增强多样性的输出表示操作的代表。
- 作为一种基于树的方法,gcForest可能比深度神经网络更容易进行理论分析,尽管这超出了本文的范围。事实上,最近一些关于深度学习的理论研究,例如[Mhaskar et al, 2017],似乎与基于树的模型更密切相关。
5 Conclusion💖
- 在认识到深度学习的关键在于表示学习和大模型容量的基础上,本文尝试将这些特性赋予树集合,并提出了gcForest方法。与深度神经网络相比,gcForest在实验中获得了极具竞争力的性能。更重要的是,gcForest具有更少的超参数,在我们的实验中,通过使用相同的参数设置,在各个领域都获得了出色的性能。
- 建造深度森林还有其他的可能性。作为一项开创性的研究,我们在这个方向上只探索了一点点。(周志华教授真的太强了)
- 为了解决复杂的任务,学习模型很可能必须深入。然而,目前的深度模型总是神经网络。本文阐述了如何构建深度森林,我们相信这可能会为在许多任务中替代深度神经网络打开一扇门。
6 Supplement😲
- 实验的目的是证明gcForest适用于几乎相同超参数设置的各种任务;与对超参数设置相当敏感的深度神经网络相比,这是一个明显的优势。
- 默认设置的gcForest,即gcForest(default),不如最先进的dnn;然而,它已经是非dnn方法中最好的。gcForest的性能可以通过特定于任务的调优来进一步提高,例如,通过包括更多的粒度(即在多粒度扫描中使用更多的滑动窗口大小),就像gcForest(5grains)一样,它使用五个粒度。同样有趣的是,gcForest(gbdt)的性能得到了显著提高,它只是用gbdt取代了最终级别[Chen和Guestrin, 2016]。
- 不可忽视的是,dnn已经被大量的研究人员和工程师研究了很多年,图像任务是dnn的杀手级应用。一般来说,要想在它们的杀手级应用上击败强大的技术是太过雄心勃勃了;例如,线性核支持向量机仍然是文本分类的最先进技术,尽管dnn已经热了很多年。在其他任务中,森林深处应该能提供很多帮助。
- 由于计算资源的限制,我们还没有尝试拥有更多粒度、森林和树木的更大的模型,尽管我们的初步结果表明,更大的模型可能会提供更好的性能,如图1所示。 请注意,计算设施对于训练更大的模型至关重要;例如,用于dnn的gpu。一方面,一些新的计算设备,如MIC(多集成核心)架构的英特尔KNL,可能会为gcForest提供潜在的加速,就像dnn的gpu一样。另一方面,gcForest的某些组件,例如多粒度扫描,可以通过利用gpu来加速。 此外,分布式计算实现还有很大的改进空间。
- 如下图所示:随着粒度/森林/树木数量的增加,gcForest的测试精度。红色突出显示默认设置的性能。
- 如上文所述,当多粒度扫描产生的变换后的特征向量太长而无法容纳时,可以进行特征采样;这不仅有助于减少存储,而且还提供了另一种渠道来增强集合的多样性。这有点像随机树森林和随机子空间的结合[Ho, 1998],另一种强大的集成方法[Zhou, 2012]。在这种情况下,增加集合的规模通常是有帮助的。除了随机抽样,探索更智能的抽样策略也很有趣,比如BLB [Kleiner等人,2012],或特征哈希[Weinberger等人,2009]。此外,可以分别实现多粒度扫描和级联森林构建过程。
- 特征重表示过程中的许多问题值得进一步探讨。例如,我们现在采用类向量的最简单形式,即相关实例所在的叶节点上的类分布。显然,可以合并更多的特征,如父节点的类分布表示先验分布,兄弟节点表示互补分布,决策路径编码等。直观地说,更多的特征可以编码更多的信息,尽管不一定对泛化有帮助。此外,较长的类向量可以支持联合的多粒度扫描过程,从而使重新表示更具灵活性
- 难负例挖掘策略可能有助于提高泛化性能,提高难负例挖掘效率的工作也可能有助于多粒度扫描过程[Henriques et al, 2013]。通过在不同粒度的扫描、类向量生成、森林训练、完全随机树生成等过程中重用部分组件,可以进一步提高gcForest的效率。
- 使用完全随机的树木森林不仅有助于增强多样性,而且还提供了利用未标记数据的机会。注意,完全随机树的生长不需要标签,而标签信息只需要注释叶节点。直观地说,对于每个叶节点,如果要根据节点上的多数的集群注释节点,则可能只需要一个标记示例;如果节点中的所有集群都不可忽略,则每个集群需要一个标记示例。这也为gcForest提供了整合主动学习的机会[Freund等人,1997;Huang等,2014]和/或半监督学习策略[Zhou和Li, 2010;李和周,2007]。
在学习模型较大的情况下,可以使用twice-learning策略将其缩减为较小的模型[Zhou and Jiang, 2004];这可能不仅有助于减少存储,而且有助于提高预测效率。
7 个人总结✨
- 机器学习是我在大学最感兴趣的学科,当时使用的教材也就是周志华教授主编的《机器学习》,不过大家都习惯叫它西瓜书。
- 周志华教授作为国内集成学习领域的先驱,则在借鉴了深度学习算法结构的基础上,提出了深度森林算法;深度森林是集成学习的一个重大突破。
- 在学习和研究人工智能的过程中,我们要善于学习和吸收相关领域的成功之处,并尝试创新性应用到自己的领域之中。
- 理论学习固然重要,但是理论的落地,也就是代码的实现能力也很重要。
8 学习资料🎶
1. 论文PDF:文章来源:https://www.toymoban.com/news/detail-400593.html
- 链接:https://pan.baidu.com/s/1qbjV-aQQlYEf47rDGU9CzQ?pwd=gsjy
- 提取码:gsjy
2. 视频资料:深度森林原理与实践文章来源地址https://www.toymoban.com/news/detail-400593.html
到了这里,关于【论文精读】Deep Forest: Towards an Alternative to Deep Neural Networks的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!