论文选读Global Refinement of Random Forest

背景及简介

  一作Shaoqin Ren是中科大与MSRA联培博士生,二三四作都是就职于MSRA。
  传统的随机森林是对于每棵树随机抽取样本和特征进行训练的。训练完成后不剪枝。
  文章针对传统的随机森林在训练时最小化误差表达式(目标函数)的不一致性,提出了一种全局化的优化方法。针对传统随机森林未剪枝进而树的深度过高导致占用存储空间过大的问题,提出了一种全局化的剪枝方法。

对随机森林进行回顾

  随机森林里的“随机”是对于节点分裂时随机选取参数,和/或随机抽取样本进行独立的树的训练。单棵的深度是随机森林得以拥有强大分类能力的原因。随机森林可以用在视觉字典中(通常会接着用SVM进行分类),现在也有alternating decision forests和alternating regression forests取得不错的效果。不过本文提出的方法的效果比起ADF和ARF更好,实验部分有对比。

本文方法

符号约定

  一棵树的预测输出为:

y=wϕ(x)

其中 ϕ(x) 为指示集,为二值列向量。一棵树可以表示为从样本数据通过 ϕ(x) 映射到叶节点,显然其维度为叶节点 × 1。 ϕ(x) 中为1的位表示样本落入这个叶节点,0则表示未落入。 w 为对应叶节点的预测值(对于分类问题是一个后验概率,对于回归问题是一个向量)。

随机森林叶节点的原始优化形式

  对于随机森林,先用各类方法决定分裂节点(split node)的特征。对于叶节点,使用标准的随机森林训练方法进行训练。于是可以得出随机森林单棵树的损失函数(优化的目标函数)如下:
  

minw1Ni=1Nl(yi,y^i)  s.t.yi=wΦ(xi),i[1,N]

式中,N是训练样本数据, l(yi,y^i) 是损失函数,其中 yi 是预测输出, y^i 是真实值。对于分类问题,损失函数定义为hinge loss(最大间隔分类器),对于回归问题,损失函数定义为均方差。
  因为叶节点互不影响取值,是独立的,所以上面的优化问题可以转化成N个子问题,即对每个叶节点进行优化。对于分类问题,最优的预测是叶节点后验概率组成的分布。对于回归问题,只需对落入该叶节点的向量求平均即可。
  对于整棵随机森林,其损失函数表示如下:
  
minw1NTi=1Nt=1Tl(yti,y^i)  s.t.yti=wtΦt(xi),i[1,N],t[1,T]

  式中,T为树的棵数, Φt(x) wt 是指示向量和叶节点预测值。 yti 为第t棵树的预测输出值。
  由上式可知,叶节点预测值 [w1,w2,,wT] 是互相独立的,因此上式的优化又可分解为T个独立的问题,即回到上面单棵树优化的情况。这样经过两重分解,那么随机森林的训练就可以变为仅在互相独立的叶节点上训练的问题了。

global refinement

  本文提出了global refinement对于一棵已经用原始方法训练好的随机森林进行叶节点预测值进行优化。
  从原始随机森林方法的损失函数可以看出,原始随机森林在训练和测试时的损失函数计算存在不一致性,具体表示如下:
  这个是随机森林训练时的损失函数(隐去约束条件):
  

1Tl(yti,y^i)

  这是随机森林测试时的错误评估函数也就是损失函数(同样隐去约束条件):
  
l(yi,y^i),yi=1Tt=1Tyti

  可见,后一式中 yi 是对所有树的输出求平均而成的随机森林的输出。
  两者的不一致性在于,训练时的损失计算是通过对每棵树分别单独与真实值比较,计算损失,再对损失的值求平均;而测试时的损失计算是对每棵树的结果求平均,得出的总结果再与真实值进行比较计算损失。这种不一致将会导致随机森林训练出的结果是次优的,无法达到全局最优。
  本文作者针对这个问题,提出了通过把损失函数直接设定为上两式中的后式,也就是全局性的损失函数的global refinement方法。叙述如下:
  随机森林的预测输出为:
  
y=WΦ(x)

  其中,把之前分开的指示集和叶节点预测值写在一个大的矩阵中,如下:
  
Φ(x)=[ϕ1(x);;ϕt(x);;ϕT(x)],  W=[w1,,wt,,wT]

  然后,可以得出global refinement的优化函数如下:
  
minW12W2F+CNi=1Nl(yi,y^i)  s.t.yi=WΦ(xi),i[1,N]

  作者在这里加入了一个L2的正则化项 12W2F 去减少过拟合的风险。而C则是平衡L2正则化项与损失函数的参数。在后面实验中,作者对于参数C是从 105,104,103,102,101,1 中通过交叉验证的方法选取。
  可以见到上述最优化目标函数与带(非线性可分)惩罚项SVM的目标函数有一样的形式。于是便可以用现成的优化工具得到凸优化的全局最优值。
  再次提起注意,global refinement仅改变叶节点的预测值,并不改变树的结构。而global refinement的相比原始的随机森林的好处在于可以利用节点与节点、树与树之间的关系信息,从整体的角度得到全局最优值。

global pruning

  在global refinement后,作者还提出了一个全局化剪枝方法,global pruning,用于减小节点数以减少存储随机森林的空间以及因为对叶节点进行全局优化带来的过拟合。现有的剪枝方法都是各自合并每棵树的节点,而作者的global pruning方法按照如下的迭代方式对随机森林里的树的结果进行优化:
  步骤1、用global refinement的方法对叶节点预测值进行优化。其中参数C采用交叉验证的方法优化,如前文所述。
  步骤2、剪枝。对于两个相邻的叶节点,如果其预测值的模接近于0,则合并这两个节点。
  步骤3、更新指示集 Φ(x)
  步骤4、重复步骤1、2、3,直到达到某种停止条件,例如模型的大小小于某个阈值,或者准确率达到要求等等。
  这样做的好处在于从全局的角度去进行剪枝,并且在迭代中优化随机森林中叶节点的预测值以确保其处在最优。(icelights注:其实这一段作者并没有说得非常清楚,具体的合并叶节点的方式有点些许模糊,望同行们能指点)

总结和实验

  本文中作者提出了全局优化的目标函数和剪枝方法。在实验中(这里没贴上来)无论在运算效率上还是存储空间上都有所提高。论文实验部分对树进行boosting集成时也应用了这个方法进行了对比,以及对比了在同样叶节点数时树的深度和树的棵树的性能。
  论文原文下载地址:http://download.csdn.net/detail/icelights/8735067
  
  
  
  
  
  

你可能感兴趣的:(随机森林,CVPR2015,全局优化)