欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld。
技术交流QQ群:433250724,欢迎对算法、技术感兴趣的同窗加入。html
深度学习最大的贡献,我的认为就是表征学习(representation learning),经过端到端的训练,发现更好的features,然后面用于分类(或其余任务)的输出function,每每也只是普通的softmax(或者其余一些经典而又简单的方法)而已,因此,只要特征足够好,分类函数自己并不须要复杂——博主本身在作research的时候也深有同感,之前不少paper实际上是误入歧途,采用的feature很是混淆模糊没有区分性,却期望在分类器上得到好的结果,可能么?深度学习能够说是回到了问题的本源上来,representation learning。算法
目前DL的成功都是创建在多层神经网络的基础上的,那么这种成功可否复刻到其余模型上呢?我相信,是能够的。南京大学的周志华老师尝试提出一种深度的tree模型,叫作gcForest,用文中的术语说,就是“multi-Grained Cascade forest”,多粒度级联森林。此外,还提出了一种全新的决策树集成方法,使用级联结构让 gcForest 作表征学习。markdown
Title:Deep Forest: Towards An Alternative to Deep Neural Networks
做者:Zhi-Hua Zhou and Ji Feng网络
在这篇论文里,咱们提出了 gcForest,这是一种决策树集成方法(decision tree ensemble approach),性能较之深度神经网络有很强的竞争力。深度神经网络须要花大力气调参,相比之下 gcForest 要容易训练得多。实际上,在几乎彻底同样的超参数设置下,gcForest 在处理不一样领域(domain)的不一样数据时,也能达到极佳的性能。gcForest 的训练过程效率高且可扩展。在咱们的实验中,它在一台 PC 上的训练时间和在 GPU 设施上跑的深度神经网络差很少,有鉴于 gcForest 自然适用于并行的部署,其效率高的优点就更为明显。此外,深度神经网络须要大规模的训练数据,而 gcForest 在仅有小规模训练数据的状况下也照常运转。不只如此,做为一种基于树的方法,gcForest 在理论分析方面也应当比深度神经网络更加容易。[1]app
级联森林结构的图示。级联的每一个级别包括两个随机森林(蓝色字体标出)和两个彻底随机树木森林(黑色)。假设有三个类要预测; 所以,每一个森林将输出三维类向量,而后将其链接以从新表示原始输入。注意,要将前一级的特征和这一级的特征链接在一块儿——在最后会有一个例子,到时候再具体看一下如何链接。dom
论文中为了简单起见,在实现中,使用了两个彻底随机的树森林(complete-random tree forests)和两个随机森林[Breiman,2001]。每一个彻底随机的树森林包含1000个彻底随机树[Liu et al。,2008],每棵树经过随机选择一个特征在树的每一个节点进行分割实现生成,树一直生长,直到每一个叶节点只包含相同类的实例或不超过10个实例。相似地,每一个随机森林也包含1000棵树,经过随机选择sqrt(d) 数量的特征做为候选(d是输入特征的数量),而后选择具备最佳 gini 值的特征做为分割。每一个森林中的树的数值是一个超参数。机器学习
给定一个实例(就是一个样本),每一个森林会经过计算在相关实例落入的叶节点处的不一样类的训练样本的百分比,而后对森林中的全部树计平均值,以生成对类的分布的估计。以下图所示,其中红色部分突出了每一个实例遍历到叶节点的路径。叶节点中的不一样标记表示了不一样的类。函数
被估计的类分布造成类向量(class vector),该类向量接着与输入到级联的下一级的原始特征向量相链接。例如,假设有三个类,则四个森林每个都将产生一个三维的类向量,所以,级联的下一级将接收12 = 3×4个加强特征(augmented feature)。性能
为了下降过拟合风险,每一个森林产生的类向量由k折交叉验证(k-fold cross validation)产生。具体来讲,每一个实例都将被用做 k -1 次训练数据,产生 k -1 个类向量,而后对其取平均值以产生做为级联中下一级的加强特征的最终类向量。须要注意的是,在扩展一个新的级后,整个级联的性能将在验证集上进行估计,若是没有显着的性能增益,训练过程将终止;所以,级联中级的数量是自动肯定的。与模型的复杂性固定的大多数深度神经网络相反,gcForest 可以适当地经过终止训练来决定其模型的复杂度(early stop)。这使得 gcForest 可以适用于不一样规模的训练数据,而不局限于大规模训练数据。学习
(注:级联数量自动肯定能够有助于控制模型的复杂性,实际上在每一级的输出结果都用ground truth label来训练的,这里和CNN的理解不一样,CNN认为特征是逐层抽象的,而本文在每一层都直接拿label的高层语义来训练——我本人有一些担心,直接这样的级联会不会使得收益并不能经过级数的加深而放大?好比CNN目前能够作到上百层的net,而这里会自动肯定深度,也就是说可能没办法作的很深。但愿随着更多人的分析,能够在这一点上给出一些结论)
深度神经网络在处理特征关系方面是强大的,例如,卷积神经网络对图像数据有效,其中原始像素之间的空间关系是关键的。(LeCun et al., 1998; Krizhenvsky et al., 2012),递归神经网络对序列数据有效,其中顺序关系是关键的(Graves et al., 2013; Cho et al.,2014)。受这种认识的启发,咱们用多粒度扫描流程来加强级联森林。
滑动窗口用于扫描原始特征。假设有400个原始特征,而且使用100个特征的窗口大小。对于序列数据,将经过滑动一个特征的窗口来生成100维的特征向量;总共产生301个特征向量。若是原始特征具备空间关系,好比图像像素为400的20×20的面板,则10×10窗口将产生121个特征向量(即121个10×10的面板)。从正/负训练样例中提取的全部特征向量被视为正/负实例;它们将被用于生成类向量:从相同大小的窗口提取的实例将用于训练彻底随机树森林和随机森林,而后生成类向量并链接为转换后的像素。如上图的上半部分所示,假设有3个类,而且使用100维的窗口;而后,每一个森林产生301个三维类向量,致使对应于原始400维原始特征向量的1,806维变换特征向量。
经过使用多个尺寸的滑动窗口,最终的变换特征矢量将包括更多的特征,以下图所示。
concat成一个3618-dim的原始数据,表示原始的一个数据样本,第一级的输出是12+3618=3630,后面也是同样,直到最后第N级,只有12个输出,而后在每一类别上作avg,而后输出max那一类的label,那就是最终的预测类别。
这一部分也是网上你们有疑问的地方,主要是数据集选取都是比较小的实验数据,这个方法能不能火仍是要看在real data上能不能作到和DL同样的效果。
下面简单贴几个结果
带着深度学习的关键在于特征学习和巨大模型的能力这一认识,咱们在本文中试图赋予树集成这些属性,并提出了 gcForest 方法。与深度神经网络相比,gcForest在咱们的实验中表现了极高的竞争力或更好的性能。更重要的是,gcForest 具备少得多的超参数,而且对参数设置不太敏感;实际上在咱们的实验中,经过使用相同的参数设置在不一样的域中都得到了优异的性能,而且不管是大规模仍是小规模的数据,它的工做都很好。此外,做为一种基于树的方法,gcForest 应该比深度神经网络更容易进行理论分析,不过这超出了本文的讨论范围。咱们很快会提供 gcForest 的代码。
出自原文[2]:“构建深度森林还存在其余可能性。做为一个会议论文,咱们只朝这个方向进行了一点点探索。若是咱们有更强大的计算设施,咱们想尝试大数据和深度森林,这将留待之后讨论。原则上,深度森林应该可以展现出深度神经网络的其余能力,如充当特征提取器或预训练模型。 值得一提的是,为了解决复杂的任务,学习模型可能须要更深刻。然而,当前的深度模型老是神经网络。本文说明了如何构建深度森林,咱们相信它是一扇门,可能替代深度神经网络的许多任务。”
这篇文章通俗易懂,要详细了解的话须要对决策树,random forest稍有了解,能够去看一下我前面的博客:机器学习方法(四):决策树Decision Tree原理与实现技巧 以及 机器学习方法(六):随机森林Random Forest,bagging;和离散类别特征不一样,本文都是基于连续特征为数据特征的,好比像素等等,所以,决策树都是基于连续特征构建的。
仅经过原本说DL算法可取代还为时过早,神经网络有其独特性,并且存在着设计上的美——计算模式统一,端到端,没有过多人文设计;而本文说实话,我仍是以为有不少人为设计的痕迹,但愿更多的学者能够在tree based learning method方向上找到更多突破。
[1] http://it.sohu.com/20170302/n482153688.shtml [2] Deep Forest: Towards An Alternative to Deep Neural Networks, 2017