2015ICCV会议最佳论文奖,即有着“计算机视觉界最高奖”之称的马尔奖(Marr Prize)授予了由微软剑桥研究院(Microsoft Research, Cambridge UK)、卡内基梅隆大学和意大利布鲁诺凯斯勒研究中心(Fondazione Bruno Kessler)合作的论文“深度神经决策森林(Deep Neural Decision Forests)”。论文提出将分类树模型和深度神经网络的特征学习相结合进行端到端训练的深度学习方法。该方法使用决策森林(decision forest)作为最终的预测模型,提出了一套完整的、联合的、全局的深度学习参数优化方法。在手写数据库MNIST和图像分类数据库ImageNet的实验中都取得了超越当前最好方法的结果。这是傅建龙老师、梅涛老师和罗杰波老师对本篇论文的简介。
本人最近要作这篇文章的组会报告,在以上三位老师介绍的基础上,有了大概的了解,对这篇论文进行了学习。我们做深度学习的同学都知道,怎么训练学习模型和测试是重点,即将深度学习框架和随机森林结合在一起,如何前向传播和反向传播呢?以及叶子节点预测分布的更新?本篇博客分为三个部分重点阐述这些问题。
一、前向传播

预备知识:由图可知,每个分离节点(split nodes)的参数由DNN来学习(representation learning),DNN最后一层是全连接层,每个节点单元的输出作为分离节点决策函数(d1,d2,...)的输入参数,本篇论文采用的决策函数是sigmoid函数。知道决策函数后,我们可以计算其路径函数(routing
function),每棵树的根节点,其路径函数的值赋予1,然后乘以该节点的决策函数值d,得到左边子节点的路径函数1*d,右边子节点的路径函数值为1*(1-d),以此类推,可以计算出每颗决策树节点的路径函数。
首先,我们要初始化分离节点决策函数的参数(theta),以及对叶子节点分布参数(pai)初始化为均匀分布。然后根据上面内容计算各个节点的路径函数(routing function)。当数据集的标签确定时,叶子节点的预测类别也是确定的,初始化时是均匀分布,当训练完成时,其(prediction)满足一定的概率分布。
然后,当样本来时,通过DNN,得到分离节点决策函数的参数,从而计算出决策函数和路径函数(routing function),到叶子节点时,我们使用该节点的路径函数乘以该节点监督类别的概率,作为预测输出,并通过对每个节点的预测输出进行求和,得到这棵树的预测输出,这样,我们就可以得到各个类别的概率输出。
二、反向传播

本篇论文的反向传播分为两个部分,第一部分是决策树的反向传播,第二部分是DNN的反向传播,紧跟在决策树后面,DNN的反向传播大家都很清楚。下面我们重点说一下本篇论文决策树如何反向传播?

由Decision tree决定的梯度部分,可以换算成如下公式:


即,由决策函数和A函数决定,在反向传播的过程中,首先达到的是叶子节点,通过以上公式,可以计算出叶子节点的决策函数和A函数,再往上,父节点的A函数由子节点的A函数相加得到,以此类推,只需一次反向遍历,就可以完成反向传播。
三、叶子节点分布函数
本篇论文采用交替迭代的方法,依次更新决策函数的参数和叶子节点分布函数,以上内容是对决策函数参数的迭代,对叶子节点分布函数的迭代如下:

为什么采用这个更新策略,文章作者在补充材料里进行了证明,即采用这种方式,目标函数是收敛的。本篇论文的迭代策略是:

以上是我对本文的理解,错误之处,烦请指出,谢谢!

关于2015 ICCV会议情况,推荐这篇文章:【CCCF动态】视觉的饕餮盛宴:第15届国际计算机视觉会议

解读“Deep Neural Decision Forests” 2015 Winner of the David Marr Prize的更多相关文章

  1. On Explainability of Deep Neural Networks

    On Explainability of Deep Neural Networks « Learning F# Functional Data Structures and Algorithms is ...

  2. 深度神经网络如何看待你,论自拍What a Deep Neural Network thinks about your #selfie

    Convolutional Neural Networks are great: they recognize things, places and people in your personal p ...

  3. Must Know Tips/Tricks in Deep Neural Networks

    Must Know Tips/Tricks in Deep Neural Networks (by Xiu-Shen Wei)   Deep Neural Networks, especially C ...

  4. Coursera Deep Learning 2 Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization - week1, Assignment(Initialization)

    声明:所有内容来自coursera,作为个人学习笔记记录在这里. Initialization Welcome to the first assignment of "Improving D ...

  5. Must Know Tips/Tricks in Deep Neural Networks (by Xiu-Shen Wei)

    http://lamda.nju.edu.cn/weixs/project/CNNTricks/CNNTricks.html Deep Neural Networks, especially Conv ...

  6. [C4] Andrew Ng - Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization

    About this Course This course will teach you the "magic" of getting deep learning to work ...

  7. Training Deep Neural Networks

    http://handong1587.github.io/deep_learning/2015/10/09/training-dnn.html  //转载于 Training Deep Neural ...

  8. Introduction to Deep Neural Networks

    Introduction to Deep Neural Networks Neural networks are a set of algorithms, modeled loosely after ...

  9. Classifying plankton with deep neural networks

    Classifying plankton with deep neural networks The National Data Science Bowl, a data science compet ...

随机推荐

  1. H3C交换机如何配置管理VLAN

    1.输入"system-view"(简写"sys"),进入系统配置模式[H3C],2.下面就可以开始取消默认管理vlan了,输入"undo inter ...

  2. python map filter reduce的优化使用

    这篇讲下python中map.filter.reduce三个内置函数的使用方式,以及优化方法. map()函数 map()函数会根据提供的函数对指定序列做映射. 语法: map(function,it ...

  3. js修改伪类元素样式

    <style type="text/css"> .htmlbox_close::before, .htmlbox_close::after { content: ''; ...

  4. NVIDIA Titan Xp Star Wars Collector's Edition显卡深度学习工作站 + Ubuntu17.10 + Tensorflow-gpu + Anaconda3 + Python 3.6 设置

    为了能让 Tensorflow GPU 版本跑起来,我折腾了1个多星期. 总体参照 https://zhuanlan.zhihu.com/p/32118549 ,安装成功,但还是有不足的地方, 在此记 ...

  5. ubuntu远程桌面连接命令rdesktop连接windows远程桌面详解

    sudo apt-get install rdesktoprdesktop 124.42.120.174:1433 呵呵,连接成功了. -f 全屏-a 16位色默认端口是3389(linux 22 s ...

  6. 托管C++、C++/CLI、CLR

    1.什么是托管C++? 在回答这个问题,首先要搞清楚什么是"托管"(Managed).托管是.NET的一个专门概念,它是融于通用语言运行时(CLR)中的一种新的编程理念,因此我们完 ...

  7. 使用Boost program_options控制程序输入

    简介 很多人使用界面来输入数据,本文的程序介绍如何使用Boost的program_options控制输入. 程序中使用了: 1. 短选项 2. 可以指定多个参数的选项 程序 #include < ...

  8. 搜索引擎solr和elasticsearch

    刚开始接触搜索引擎,网上收集了一些资料,在这里整理了一下分享给大家. 一.关于搜索引擎 搜索引擎(Search Engine)是指根据一定的策略.运用特定的计算机程序从互联网上搜集信息,在对信息进行组 ...

  9. Android的Intent机制详解

    Intent 是一个消息传递对象,您可以使用它从其他应用组件请求操作.尽管 Intent 可以通过多种方式促进组件之间的通信,但其 基本用例主要包括以下三个: 启动 Activity: Activit ...

  10. Mybatis源码分析--返回值ResultType和ResultMap

    这一篇博客我们来介绍一下Mybatis执行sql语句返回的结果值的到实体对象的映射机制.首先ResultType和ResultMap的使用方式是不同的. ResultType的使用方式: result ...