非神经网络的深度模型

深度学习最大的贡献,个人认为就是表征学习(representation learning),通过端到端的训练,发现更好的features,而后面用于分类(或其他任务)的输出function,往往也只是普通的softmax(或者其他一些经典而又简单的方法)而已,所以,只要特征足够好,分类函数本身并不需要复杂——博主自己在做research的时候也深有同感,以前很多paper其实是误入歧途,采用的feature非常混淆模糊没有区分性,却指望在分类器上获得好的结果,可能么?深度学习可以说是回到了问题的本源上来,representation learning。

目前DL的成功都是建立在多层神经网络的基础上的,那么这种成功能否复刻到其他模型上呢?我相信,是可以的。南京大学的周志华老师尝试提出一种深度的tree模型,叫做gcForest,用文中的术语说,就是“multi-Grained Cascade forest”,多粒度级联森林。此外,还提出了一种全新的决策树集成方法,使用级联结构让 gcForest 做表征学习。

先说下 representation learning。应用于《 Representation Learning: A Review and New Perspectives

机器学习算法的成功主要取决于数据的表达 data representation 。我们一般猜测,不同的表达会混淆或者隐藏或多或少的可以解释数据不同变化的因素。尽管特定的领域知识可以有助于设计或者选择数据的表达,但通过一般的先验知识来学习表达也是有 效的。而且,人工智能 AI 的要求也迫使我们去寻找更强大的特征学习算法去实现这些先验知识。

我们为什么要关心表达学习?

表达学习(亦被大家称作深度学习或者特征学习)已经在机器学习社区开辟了自己的江山,成为学术界的一个新宠。在一些顶尖会议例如NIPS和ICML中都有了自己的正规军(研究它的workshops),2013还专门为它搞了一个新的会议,叫ICLR(International Conference on Learning Representations),可见它在学术界得到的宠爱招人红眼。尽管depth(深度)是这个神话的一个主要部分,但其他的先验也不能被忽视,因为有时候,先验知识会为表达的学习献上一臂之力,画上点睛之笔,更容易地学习更好的表达。在表达学习有关的学术活动中最迅速的进展就是它在学术界和工业界都得到了经验性的显著性的成功。下面我们简单的聚焦几点。

Speech Recognition and  Signal Processing 语音识别 与信号处理

          语音也是神经网络诞生时其最早的一个应用之一,例如卷积(或者时延)神经网络(Bengio在1993年的工作)。当然,在HMM在语音识别成功之后,神经网络也相对沉寂了不少。

到现在,神经网络的复活、深度学习和表达学习的运用在语音识别领域可谓大展拳脚,重展雄风,在一些学术派和工业派人士(Dahlet al., 2010; Deng et al., 2010; Seide et al., 2011a; Mohamedet al., 2012; Dahl et al., 2012; Hinton et al., 2012)的努力下取得了突破性的成果,使得这些算法得到更大范围的应用,并且实现了产品化。例如,微软在12年发布了它们的语音识别MAVIS (Microsoft Audio Video Indexing Service)系统的一个新版本,这个版本是基于深度学习的(Seide et al., 2011a)。对比现有的一直保持领先位置的高斯混合模型的声学建模方法,他们在四个主要的基准 测试 集中把错误率降低了30%左右(例如在RT03S 数据库 中从 27.4%的错误率降到18.5%)。在2012年,Dahl等人再次书学神话,他在一个小的大词汇量语音识别基准测试集中(Bing移动商业搜索数据库,语音长40小时)的错误率降到16%与23%之间。

          表达学习算法还被应用的音乐方面上,在四个基准测试集中,比当前领先的polyphonic transcription (Boulanger-Lewandowskiet al., 2012)在错误率上取得了5%到30%之间的提升。深度学习还赢得了MIREX (Music Information Retrieval)音乐信息检索竞赛。例如2011年的音频标注audio tagging上(Hamelet al., 2011)。

  Object Recognition 目标识别

          在2006年,深度学习的开始,主要聚焦在MNIST手写体图像分类问题上(Hinton et al.,2006; Bengioet al., 2007),它冲击了SVMs在这个数据集的霸主地位(1.4%的错误率)。最新的记录仍被深度网络占据着:Ciresanet al.(2012)声称他在这个任务的无约束版本(例如,使用卷积 架构 )的错误率是0.27%,为state-of-the-art。而Rifaiet al.(2011c)在MNIST的knowledge-free版本中保持着0.81%的错误率,为state-of-the-art。

在最近几年,深度学习将其目光从数字识别移到自然图像的目标识别,而最新的突破是在ImageNet数据库中把领先的26.1%的错误率拉低到15.3% (Krizhevskyet al., 2012)。

  Natural Language Processing 自然语言 处理

          除了语音识别,深度学习在自然语言处理中也有很多应用。symbolic 数据的分布式表达由Hinton在1986年引入,在03年由Bengio等人在统计语言模型中得到第一次的发展,称为神经网络语言模型neural net language models (Bengio,2008)。它们都是基于学习一个关于每个单词的分布式表达,叫做word embedding。增加一个卷积架构,Collobertet al.(2011)开发了一个SENNA系统,它在语言建模、部分语音标记、chunking(节点识别)、语义角色标记和句法分解中共享表达。SENNA接近或者超于目前的在这些任务中的当前领先方法。但它比传统的预测器要简单和快速。学习word embeddings可以以某种方式与学习图像表达结合,这样就可以联系文本和图像。这个方法被成功运用到谷歌的图像搜索上,利用大量的数据来建立同一空间中图像与问题之间的映射(Weston et al.,2010)。在2012年,Srivastava等将其拓展到更深的多模表达。

          神经网络语言模型也被通过在隐层中增加recurrence来改进(Mikolovet al., 2011)。改进效果比当下领先的平滑n-gram语言模型不仅在复杂度上降低,还降低了语音识别的错误率(因为语言模型是语音识别系统的一个重要组成部分)。这个模型还被应用到统计 机器翻译 上面 (Schwenk et al., 2012; Leet al., 2013),改进了复杂度和BLEU分数。递归自动编码机Recursive auto-encoders(产生recurrent网络)在全句释义检测full sentenceparaphrase detection上也达到了现有的领先水平,是以前技术的两倍F1分数(Socheret al., 2011a) 。表达学习还用到了单词歧义消除word sense disambiguation上 (Bordeset al., 2012),取得了准确率从67.8% 到 70.2%的提升。最后,它还被成功运用到sentimentanalysis (Glorotet al., 2011b; Socher et al., 2011b)上,并超越现有技术。

  Multi-Task and Transfer Learning, Domain Adaptation 多任务和迁移学习,域自适应

迁移学习(传统的机器学习假设训练数据与测试数据服从相同的数据分布。如果我们有了大量的、在不同分布下的训练数据,完全丢弃这些数据也是非常浪费的。如何合理的利用这些数据就是迁移学习主要解决的问题。迁移学习可以从现有的数据中迁移知识,用来帮助将来的学习。迁移学习(Transfer Learning)的目标是将从一个环境中学到的知识用来帮助新环境中的学习任务。)是指一个学习算法可以利用不同学习任务之间的共性来共享统计的优点和在任务间迁移知识。如下面的讨论,我们假设表达学习算法具有这样的能力,因为它可以学习到能捕捉隐含因素的子集的表达,这个子集是对每个特定的任务相关的。如图1所示。这个假设被很多的经验性结果所验证,并且展现了表达学习在迁移学习场合中同样具有优异的能力。

先简单说这些吧!

其实今天讲的大多数都是文字的分析与解释,所以有兴趣的朋友可以去参阅原作。

在这篇论文里,提出了 gcForest,这是一种决策树集成方法(decision tree ensemble approach),性能较之深度神经网络有很强的竞争力。深度神经网络需要花大力气调参,相比之下 gcForest 要容易训练得多。实际上,在几乎完全一样的超参数设置下,gcForest 在处理不同领域(domain)的不同数据时,也能达到极佳的性能。gcForest 的训练过程效率高且可扩展。在我们的实验中,它在一台 PC 上的训练时间和在 GPU 设施上跑的深度神经网络差不多,有鉴于 gcForest 天然适用于并行的部署,其效率高的优势就更为明显。此外,深度神经网络需要大规模的训练数据,而 gcForest 在仅有小规模训练数据的情况下也照常运转。不仅如此,作为一种基于树的方法,gcForest 在理论分析方面也应当比深度神经网络更加容易。

级联森林(Cascade Forest)

级联森林结构的图示。级联的每个级别包括两个随机森林(蓝色字体标出)和两个完全随机树木森林(黑色)。假设有三个类要预测; 因此,每个森林将输出三维类向量,然后将其连接以重新表示原始输入。注意,要将前一级的特征和这一级的特征连接在一起——在最后会有一个例子,到时候再具体看一下如何连接。

论文中为了简单 起见,在实现中,使用了两个完全随机的树森林(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,而这里会自动确定深度,也就是说可能没办法做的很深。希望随着更多人的分析,可以在这一点上给出一些结论)

多粒度扫描(Multi-Grained Scanning)

深度神经网络在处理特征关系方面是强大的,例如,卷积神经网络对图像数据有效,其中原始像素之间的空间关系是关键的。(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一样的效果。

下面简单给出几个结果:

Comparison of test accuracy on ORL

Comparison of test accuracy on GTZAN

Comparison of test accuracy on sEMG data

Comparison of test accuracy on IMDB

总结

带着深度学习的关键在于特征学习和巨大模型的能力这一认识,我们在本文中试图赋予树集成这些属性,并提出了 gcForest 方法。与深度神经网络相比,gcForest在我们的实验中表现了极高的竞争力或更好的性能。更重要的是,gcForest 具有少得多的超参数,并且对参数设置不太敏感;实际上在我们的实验中,通过使用相同的参数设置在不同的域中都获得了优异的性能,并且无论是大规模还是小规模的数据,它的工作都很好。此外,作为一种基于树的方法,gcForest 应该比深度神经网络更容易进行理论分析,不过这超出了本文的讨论范围。我们很快会提供 gcForest 的代码。

出自原文《 Deep Forest: Towards An Alternative to Deep Neural Networks, 》:“构建深度森林还存在其他可能性。作为一个会议论文,我们只朝这个方向进行了一点点探索。如果我们有更强大的计算设施,我们想尝试 大数据 和深度森林,这将留待以后讨论。原则上,深度森林应该能够展示出深度神经网络的其他能力,如充当特征提取器或预训练模型。 值得一提的是,为了解决复杂的任务,学习模型可能需要更深入。然而,当前的深度模型总是神经网络。本文说明了如何构建深度森林,我们相信它是一扇门,可能替代深度神经网络的许多任务。”

我来评几句
登录后评论

已发表评论数()

相关站点

+订阅
热门文章