本 blog 旨在对南京大学周老师团队近期的一篇paper进行解读;转载请注明出处

楔子

  1. 多层特征表示在神经网络中得到了充分地应用;然而,当模型不可微时 如针对离散型数据或表格型等结构化数据时,GBDTs通常是此类数据 的主流方法,这类方法通常很难学习到较好的特征表示能力。鉴于此 ,作者提出了通过stacking多层GBDTs来尽力一层一层的模块,通过此 种层次结构来获取数据特征的分层表示能力。
  2. 现今DL利用误差反向传播(back-prop)梯度下降方法成为主流,然而,此类方法大行其道的基础是激活函数是可微的。其它方法包括使用目标传播(target propagation),实验证明:基于目标传播的方法表现弱于误差传播方法
  3. 针对离散型数据或表格型数据,基于树的集成学习算法RF或GBDTs是目前主流的方法;起很大程度源于能够获取到数据的分层分布式表示(hierarchical distributed representation),针对此类数据类型,无法使用误差的链式传播算法(chain-rule),是的后向传播也变得不可能。
  4. (1)针对3中的情形,是否能够构造一个 非可微的多层模型(multi-layered model with non-differentiable components) 用于特征的分布式表示形式;(2)如果可以,如何将层次之间连接起来(不使用后向传播)
  5. 中心论点:多棵树的分层分布式表示(hierarchical distributed representations) 具有很大程度地来刻画数据的特性能力;更具象地:利用GBDTs来作为每层的块结构(blocks)来建立多层树结构的模型能够很好地将feature表示出来,与此同时,在训练时通过目标传播(target propagation) 来进行优化。

相关工作

  1. 目前为止,尚未出现一种通用的理论来解释为什么深度模型比浅度模型表现得更好;很多模型的建立过程都是建立在此种假设之上: 深度模型的分层分布式表示方法能够学习到数据更多的特征,亦有学者假设更好的表示方法能够诱导快速混合马尔科夫链(faster-mixing Markov chains),从而在深层次的模型上表现得更好
  2. 对于一个可微的多层次的深度模型而言,误差后向传播方式是主流;与此同时,目标传播方式target propagation传递的是当前实例的真实的label(通过逆变换)而非误差,此类传播方式能够有效地解决深度学习中梯度扩散(vanishing gradient)问题;于此种种,这些方式都是依赖于目标函数(主要指的是累加激活函数的雅克比行列式,即:激活函数的二次可微)可微的

算法核心

  • 针对一个含有M-1个中间层的前馈神经网络, oioi o_i 表示的是每层的输出,其中:i∈{0,1,2,...,M}i∈{0,1,2,...,M} i \in \{0, 1, 2, ..., M\} ,针对每一个特定的样本x,其每层相应的输出维度为: RdiRdi R^{d_i} ,其中:i∈{0,1,2,...,M}i∈{0,1,2,...,M} i \in \{0, 1, 2, ..., M\} ,然后,通过每一层来学习一种映射关系 Fi:Rdi−1→Rdi(i≥1)Fi:Rdi−1→Rdi(i≥1) F_i: R^{d_{i-1}} \rightarrow R^{d_i}(i \geq 1) ,最后一层的输出则为 OMOM O_M 。利用均方误差或者交叉熵作为损失函数 L, 针对非监督学习任务,期望输出Y可被当做是有一个自动编码器的输出,其损失函数则可表示为该自动编码器的输出和原始数据的重构误差,{注:此处译者认为和 RBM 的机制有异曲同工之妙}, 实际上,在下文中参数的更新过程中,也包含着 EM 的思想

  • 当每个 FiFiF_i 是参数化的且是可微的,此类学习任务可利用后向传播算法来高效地实现,其基本途径是利用链式求导规则,累积损失函数在每层中参数的梯度,然后沿各自的梯度方向来更新参数,当训练完成时,中间层的输出则可被当做是新学习到的特征表示,这种分层次的稠密的表示方法可被解释为对原始输入数据的多层抽象。然而,当 FiFiF_i 是非参或不可微时,后向传播算法则变得不可用;鉴于此,利用GBDTs来截距此类问题.

算法流程

  1. 对于第 t 次迭代,假设 Ft−1iFit−1F^{t-1}_i 表示的是 t - 1 次迭代所获取的映射,在此需要求得 Ft−1iFit−1F^{t-1}_i 的逆映射 GtiGitG^t_i ,存在函数关系:Gti(Ft−1i(oi−1))≈oi−1Git(Fit−1(oi−1))≈oi−1G^t_i(F^{t-1}_i(o_{i-1})) \approx o_{i-1},(注:此处的GtiGitG^t_i并不是Ft−1iFit−1F^{t-1}_i的逆变换,此处仅是一个近似值); 通过最小化期望重构损失函数: Gti^=argminGtiEx[Linverse(oi−1,Gti(Ft−1i(oi−1))]Git^=argminGitEx[Linverse(oi−1,Git(Fit−1(oi−1))] \hat{G_i^t} = argmin_{G_i^t}E_x[L^{inverse}(o_{i - 1}, G_i^t(F_i^{t-1}(o_{i-1}))],其中:损失函数 LinverseLinverse L^{inverse} 表示的是重构误差;类似自动编码器(autoencoding),建议在做 mapping 和 inverse-mapping 时,增加噪声(noise)增强其泛化能力,因此,其实际上的重构误差表示为 Linverse=||Gi(Fi(oi−1+ϵ))−(oi−1+ϵ)||2Linverse=||Gi(Fi(oi−1+ϵ))−(oi−1+ϵ)||2 L_{inverse} = ||G_i(F_i(o_{i - 1} + \epsilon)) - (o_{i - 1} + \epsilon)||_2 ,其中,ϵϵ \epsilon 服从正态分布,即:ϵ ˜N(0,diag(σ2))ϵ~N(0,diag(σ2)) \epsilon \widetilde{~} N(0, diag(\sigma^2))
  2. 当算法更新完 GtiGit G_i^t 后,然后根据 GtiGit G_i^t 来更新前一层的映射函数 Fi−1Fi−1 F_{i - 1};此步骤的关键之处在于给 Fi−1Fi−1 F_{i - 1} 指定一个伪标签(pseudo-labels) zti−1zi−1t z_{i - 1}^t ,其中 i∈{2,3,...,M}i∈{2,3,...,M} i \in \{2, 3, ..., M\} ,每层的伪标签定义为:zti−1=Gi(zti)zi−1t=Gi(zit) z_{i - 1}^t = G_i(z_i^t) ,即:在第 t 轮迭代,针对模型中所有的中间层,对伪标签进行自顶向底传播;一旦当前层的伪标签计算完之后,根据上一轮迭代计算的 Ft−1iFit−1 F_i^{t - 1} 的梯度方向,计算伪标签的残差值:−∂L(Ft−1i(oi−1),zti)∂Ft−1i(oi−1)−∂L(Fit−1(oi−1),zit)∂Fit−1(oi−1) -\frac{\partial L(F_i^{t - 1}(o_{i - 1}), z_i^t)}{ \partial F_i^{t - 1}(o_{i - 1}) }
  3. 针对最后一层伪标签 ztMzMt z_M^t 的设定,在第 M 层时,利用真实的标签来定义伪标签;例如:输出层的伪标签定义为: ztM=oM−α∂L(oM,y)∂oMzMt=oM−α∂L(oM,y)∂oM z_M^t = o_M - \alpha \frac{\partial L(o_M, y)}{\partial o_M} , FtMFMt F_M^t 的更新方式为伪标签残差的方向,亦即:−∂L(Ft−1M(oM−1),ztM)∂Ft−1M(oM−1)−∂L(FMt−1(oM−1),zMt)∂FMt−1(oM−1) - \frac{\partial L(F_M^{t - 1}(o_{M - 1}), z_M^t)}{\partial F_M^{t - 1}(o_{M - 1})} ;换句话说,在第 t 次迭代的过程中,输出层 FMFM F_M 计算伪标签 ztMzMt z_M^t ,然后通过逆映射(inverse mapping)变换生成每一层的伪标签。一旦所有的 FiFi F_i 都被更新之后,下一次迭代则是对 GiGi G_i 进行更新。

  4. 算法中两个重要的参数更新如下所示

  1. 算法流程如下:

译者注:此处算法流程中,首先根据最后一层的输出结点,以及输出节点与该样本真实标签的梯度来获取到初始的伪标签 ztMzMt z_M^t ,然后从后向前(M, M - 1, … 2)进行传播,用以更新逆映射 GtGt G^t ,当 GtGt G^t 更新完成之后,利用 GtjGjt G_j^t 和 ztjzjt z_j^t 对伪标签进行更新,亦即:利用当前层的逆映射 GtjGjt G_j^t 和当前层的伪标签 ztjzjt z_j^t ,亦即代码 ztj−1←Gtj(ztj)zj−1t←Gjt(zjt) z_{j - 1}^t \leftarrow G_j^t(z_j^t) ,此处传播时,输入数据为 ztjzjt z_j^t ,反射函数为 GtjGjt G_j^t ,输出为 ztj−1zj−1t z_{j - 1}^t 。当第 t 轮所有的伪标签更新完后,然后前向传播,用以计算正向反射函数 FtjFjt F_j^t ,然后使用上一轮的 Ft−1jFjt−1 F_j^{t - 1} 计算更新 FtjFjt F_j^t ,亦即:Ftj←FtjFjt←Fjt F_j^t \leftarrow F_j^t ;当第 t 轮所有的 FtjFjt F_j^t 都更新完成之后,则更新输出函数:oj←Ftj(oj−1)oj←Fjt(oj−1) o_j \leftarrow F_j^t(o_{j - 1})

注:译者认为此处算法流程中采用了 EM 算法,在更新所有层次的逆反射函数 G 之后,再对反射函数 F 进行更新;此处暗合了 EM 思想

参考文献:

  • Multi-Layered Gradient Boosting Decision Trees

建议可将周老师团队发表的下面两篇 paper 结合起来理解

  • deep forest_towards an alternative to deep neural networks
  • autoencoder by forest

Multi-Layered Gradient Boosting Decision Trees相关推荐

  1. Gradient Boosting, Decision Trees and XGBoost with CUDA ——GPU加速5-6倍

    xgboost的可以参考:https://xgboost.readthedocs.io/en/latest/gpu/index.html 整体看加速5-6倍的样子. Gradient Boosting ...

  2. 机器学习论文:《LightGBM: A Highly Efficient Gradient Boosting Decision Tree》

    翻译自<LightGBM: A Highly Efficient Gradient Boosting Decision Tree> 摘要 Gradient Boosting Decisio ...

  3. 机器学习算法系列(二十)-梯度提升决策树算法(Gradient Boosted Decision Trees / GBDT)

    阅读本文需要的背景知识点:自适应增强算法.泰勒公式.One-Hot编码.一丢丢编程知识 一.引言   前面一节我们学习了自适应增强算法(Adaptive Boosting / AdaBoost Alg ...

  4. GBDT(Gradient Boosting Decision Tree

     GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由 ...

  5. Gradient Boosted Decision Trees详解

    感受 GBDT集成方法的一种,就是根据每次剩余的残差,即损失函数的值.在残差减少的方向上建立一个新的模型的方法,直到达到一定拟合精度后停止.我找了一个相关的例子来帮助理解.本文结合了多篇博客和书,试图 ...

  6. Gradient Boosting Decision Tree学习

    Gradient Boosting Decision Tree,即梯度提升树,简称GBDT,也叫GBRT(Gradient Boosting Regression Tree),也称为Multiple ...

  7. Lightgbm源论文解析:LightGBM: A Highly Efficient Gradient Boosting Decision Tree

    写这篇博客的原因是,网上很多关于Lightgbm的讲解都是从Lightgbm的官方文档来的,官方文档只会告诉你怎么用,很多细节都没讲.所以自己翻过来Lightgbm的源论文:LightGBM: A H ...

  8. 《LightGBM: A Highly Efficient Gradient Boosting Decision Tree》论文笔记

    1 简介 本文根据2017年microsoft研究所等人写的论文<LightGBM: A Highly Efficient Gradient Boosting Decision Tree> ...

  9. 『 论文阅读』LightGBM原理-LightGBM: A Highly Efficient Gradient Boosting Decision Tree

    17年8月LightGBM就开源了,那时候就开始尝试上手,不过更多还是在调参层面,在作者12月论文发表之后看了却一直没有总结,这几天想着一定要翻译下,自己也梳理下GBDT相关的算法. Abstract ...

  10. LightGBM: A Highly Efficient Gradient Boosting Decision Tree

    论文杂记 图像检索--联合加权聚合深度卷积特征的图像检索方法 主目录 下一篇 文章结构 lightgbm原理 [前言] LightGBM: A Highly Efficient Gradient Bo ...

最新文章

  1. python爬虫流程-小白必看的Python爬虫流程
  2. 关于Android真机调測Profiler
  3. java手动提交事务_Mybatis是如何将事务和连接池高效的结合的
  4. 谈谈低代码趋势和开发人员的未来
  5. 带有HttpClient的自定义HTTP标头
  6. 短视频生产利器!视频裁剪之横屏转竖屏新技术,出自腾讯多媒体实验室
  7. 安装arm虚拟机_虚拟机Parallels出手:苹果M1的Mac能运行Win 10 还挺顺畅
  8. sql azure 语法_使用Azure Data Studio开发SQL Server数据库
  9. 【CS231n_2017】2-Image Classification
  10. 两个时间相减(vb.net)
  11. [翻译]深入解析Windows操作系统(下)之第十章 内存管理
  12. python 螺旋_用Python生成气候温度螺旋
  13. 进不去系统rpc服务器不可用,rpc服务器不可用_详细解决方法,彻底修复
  14. 数据库--MySQL
  15. 他安息,只因天使离去
  16. 【拉灯君第三弹】母函数-HDU1085-泰山下的AC
  17. [C#] DataView用法
  18. 【抽奖平台开发(1)】抽奖功能的前端实现(HTML+JS+CSS)
  19. 如何成为一名大数据开发工程师
  20. Nginx的一些配置项,Nginx调优

热门文章

  1. cad断点快捷键_CAD命令:打断(BREAK)命令的使用技巧
  2. python绘制基因结构图_使用TBtools绘制进化树+motif分析+基因结构~三图合一
  3. 大陆车牌识别算法的背景与技术
  4. JS短文 | 3分钟了解下 JS Sets 集合
  5. Python基础之列表、元组、字典、集合
  6. 手机数据连接接入(外网)访问xampp
  7. 抓包安卓7以上ca证书安装方法
  8. 从菜鸟到完全学不会二维傅立叶在图像处理算法中的应用【老司机教你学傅立叶】
  9. 台北 ModernWeb.tw 参会流水账以及感想
  10. BetaFlight模块设计之十三:Gyro过滤任务分析