Deep Forest: gcForest论文知识梳理

来源:互联网 发布:自己制造游戏的软件 编辑:程序博客网 时间:2024/06/05 21:07

本文是对南京大学周志华教授写的Deep Forest: Towards An Alternative to Deep Neural Networks文章的知识梳理,主要总结一下gcForest的结构和过程。

文章下载地址:https://arxiv.org/abs/1702.08835

Cascade Forest
这里写图片描述
上图为Cascade Forest结构的事例。
gcForest采用了cascade的结构,每层接受特征信息,经过处理后传给下一层。
每一层都是一个决策树深林的总体,也就是由多个随机深林组成。随机深林的类型越多越好。论文中给定的有两种类型的随机深林,蓝色表示random forests,黑色表示complete-random tree forests。
每个complete-random tree forests中包含1000个complete-random trees , 每个树随机的选取数据的特征作为划分节点的父节点,当每个叶节点中的类型相同或者不超过10个样例时,停止划分,即树停止生长。 同样的,random forest 也包含了1000个树,但每个树划分节点的父节点是通过先随机的选取√d(根号d)个特征(d是总的特征个数),然后选择一个gini(基尼系数)值最大的特征作为父节点进行划分节点。 每个深林中树的个数其实是一个超参数,只不过本文设置为1000。

这里写图片描述
图2是一个为了讲解每一个Forest的内部如何进行操作的。
论文中是以三分类为例,每棵树对输入的x进行分类时,都会得到一个属于每一个分类的概率,三分类,也就产生了一个三维向量,将所有的树产生的向量进行取平均,就产生了最终的Forest生成三维向量。将同一个level的众多Forest产生的向量进行连接,就形成了新x,作为下一个level的输入。在Cascade的最后,将众多Forest产生的向量进行取平均,就产生了一个总重的三维向量,哪个概率大,则x就属于哪一类。

这里写图片描述
图3讲解的是如何将我们手中的数据转换成可以使用的向量。
当我们手中的数据是一个400-dim的向量时,我们可以用一个100-dim的向量在其上进行滑动取值,默认步长为1,则可产生301个100-dim的向量,再将所有的向量经过两种(也可是多种,前面说过鼓励使用多种类型的Forest,论文中是两种)Forest的处理,分别产生301个3-dim(三分类)的向量,最后将所有向量连接到一个,产生一个1803-dim的向量作为Cascade的输入。
当我们手中的数据是图片时,则像图3的下半部分一样进行处理。图中输入为20*20的图片,使用10*10的矩阵进行滑动截取,步长为1,则生成121个10*10的矩阵。同样,将这些矩阵经过两种Forest的处理,分别产生121个3-dim的向量,最后将所有向量连接起来作为Cascade的输入。

这里写图片描述
图4是整个gcForest的全部过程,也就是将图3和图1进行了合并,组成了全部的过程。
假设输入的是一个400-dim的向量,可以经过多种不同尺寸的滑动得到新的向量,图中使用了三种,分别是100-dim、200-dim、300-dim产生的结果经过多重Forest的处理分别产生一个1806-dim、1206-dim、606-dim的向量,最后将所有的向量全部链接到一个向量中,形成了一个3618-dim的向量作为Cascade的输入。经过1个level的处理变成了3630-dim的向量(将四个Forest产生的12个向量与之前的3618-dim向量进行连接得到)。
如果输入的是m个400-dim的向量,则经过sliding后会产生301*m个100-dim的向量(假设sliding的size为100),同样的,后面产生的结果也都会变成*m个,有m个3618-dim的向量经过Cascade Forest最终产生m个分类结果。

这里写图片描述
上图表格对比了gcForest和深度学习,说明了gcForest使用了更少的超产数,结构更加的简单。

以上是我对该文章的理解,有不对的地方还请指正。

0 0
原创粉丝点击