slide
slide2 问题的引出,也就是为什么写这篇文章的原因。
大家都知道,最近几年深度神经网络非常火,它在很任务上达到了很的效果,比如图像识别领域,比如语音识别,这样一来大家自然就减少了对传统机器学习方法的关注。但是呢,深度神经网络虽然好用,它也不是万能的,它也它的很多不足之处,比如训练时需要大量的训数据才能有好的效果,比如它需要强的计算设备支持复杂的模型,还有超参数的选择(我们知道神经网络的性能严重依赖调参过程,而它的超参数 实在是太多了。)这些因素都会导致神经网络模型训练起来非常麻烦,
周志化老师在一个采访中说过:做这个的主要思想是,现在大家谈到深度学习就觉得它就等于深度神经网络。我们认为解决复杂问题把模型变深可能是有必要的,但是深度学习应该不只是深度神经网络,还可以有其他形式,与神经网络相比,其他形式也许有更好的性质。
就本着这样的思想,经过他们的探索与实践,成功地使用树模型构建出了一个深层 的集成学习模型,用来作为神经网络的一个替代方式。于是也就有了这篇文章。
那么他们探索出来的这个模型有什么优势呢?我们先来看摘要。
slide3 摘要
在这篇论文里,我们提出了 gcForest,这是一种决策树集成方法(decision tree ensemble approach),性能较之深度神经网络有很强的竞争力。深度神经网络需要花大力气调参,相比之下gcForest要容易训练得多。实际上,在几乎完全一样的超参数设置下,gcForest在处理不同领域(domain)的不同数据时,也能达到极佳的性能。gcForest的训练过程效率高且可扩展。在我们的实验中,它在一台PC上的训练时间和在GPU设施上跑的深度神经网络差不多,有鉴于gcForest天然适用于并行的部署,其效率高的优势就更为明显。此外,深度神经网络需要大规模的训练数据,而gcForest在仅有小规模训练数据的情况下也照常运转。不仅如此,作为一种基于树的方法,gcForest在理论分析方面也应当比深度神经网络更加容易。
具体我就不念了,大致就是说他们提出的这个gcforest西式能够之前列举的几个DNN的缺点,比如数据量不足,计算能力不足,调参困难等等。
这个gcforest听起来很不错,那么它到底是怎么做到把树模型堆叠起来的,我们来一下它的整体结构。
slide4 整体结构图
在一般的机器学习模型中,我们对于任何一个输入的样本,都要先对做特征工程,接下来再用模型对样本进行预测,在这里也不例外。 左边的Multi-grained Scanning就是一个对特征进行提取的过程,经过对原始输入的处理,得到不同尺寸的新特征(论文中是叫做 transformed feature)。然后把它拼接起来,送到右边这个级联森林中。 右边的级联森林做了什么呢?它分为很多层,每层都是相同的结构,比如说图中的第一层就都包括4个forest,这四个森林会根据不同的类别产生各自的分类概率,图中假设这模型解决的是一个三分类问题,当之前提出出的新特征送到第一层时,这样4个forest中的每个森林就输出它预测的样本属于三个类别的概率 。 ,,假设我们这个模型的目标是从三个分类中预测样本所属的分类 。 。。。。 这就是gcforest整体模型的大概思想。 好,我们现在已经对模型的预测思路有了了解,那么现在就深入细节,
在结构图中我们可以看到,Forest有两种颜色,代表着两种不同的集成树模型,其中黑色的是随机森林模型,蓝色的是完全随机树森林(complete-random tree forest,
slide5 随机森林
随机森林模型大家应该都知道,这是一个经典的机器学习模型,随机森林简单来讲就是利用多棵相互之间有差异的决策树,给出一个样本,让森林中的每一颗子树进行预测 ,最后综合他们的预测结果作为最终预测结果,
这个完全随机树森林模型,大家可能不熟悉,它其实只是一个随机森林的变种,要了解它是变在哪里,我们得首先回顾一下随机森林模型的训练过程。那么随机森林是怎么训练的呢?
假设我有样本数为N的数据集,我们从这N个样本中有放回地抽取N次样本,作为一个新的数据集,抽取多少回就有多少个新的数据集,然后用每个数据集来分别训练一颗决策树。从根结点开始,让这棵树不断往下生长,直到达到停止条件就结束训练。 我们知道决策树在每次生长过程中,它要选择一个特征来对当前结点进行划分,在传统决策树模型中,我们对于特征的选取都是采用具有最优划分属性的特征,这最优特征属性比如信息增益或者是基尼指数,就是从所有的特征中选最好的那一个,在随机森林的划分有些不同,他是先从全部特征中随机抽取n个特征,这个n是远远小于特征总数的,一般取根号m,这样一来被选择的特征可能就不是所有特征中最优的那一个,而是相对较优的一个。让随机森林中子树变成一个相对更弱的分类器,拟合能力没那么强。
而完全随机树森林主要就是在这里做了文章,他直接从全部特征中随机地选择了一个特征来进行划分,不去看这个最优特征属性比如信息增益之类的,完全随机的。每次往下生长都是随机地选取一个特征,一直生长直到每个叶节点细分到只有1个类别或者不多于10个样本。
slide7 级联森林
现在再回过来看级联森林的训练过程,我们知道在深层神经网络中,这个网络的层次都是在训练前预先设定的,它作为一个超参数需要每次实验中不断尝试去调整 ,但是在这个级联森林中这个层数是模型自动生成的。我们来看一下它是怎么做到的。 这里给定一批训练集,每个样本都有输入特征。拿这批样本去训练第一层的4个forest,对于每个Forest也就是先有放回地采样,再用每一批采样后的样本训练对应的一棵子数,训练完成后拿验证集去验证,得到它的分类错误率。接下来训练下一层的四个子树,又得到新的错误率。如果更低就继续,更高就停止。或者达到预先给定的条件比如最大层数限制就停止,就通过这种方式自适应地得到了级联森林中的层数。 这就是级联森林的训练过程。
我们之前说道,在一般的机器学习模型中,我们对于输入的样本,都要先对做特征处理,接下来再用模型对样本进行预测,那么我们这个模型的训练和预测过程都介绍了,还剩下特征的处理过程。在这个Deepforest里这一部分被称作是multi-grained scanning.多粒度扫描。
slide8 多粒度扫描
这个多粒度扫描根据数据类型的不同稍微有些区别,对于序列形式的数据,是在一个方向上扫描,而对于图像类的数据,是在两个方向上扫描,我们看下面这个例子,假设输入的图片是一个20×20的样本,这时候我们用一个10×10的滑动窗口在行和列两个方向上进行扫描,得到了121个不同的instance,这一个在文章中也叫sub-sample,子样本。得到了子样本后我们把它送到两个森林中进行分类的预测。121个子样本一共得到了121*3个分类概率。把它们拼接起来就是这个transformed feature.