机器学习科研的十年,陈天奇( 五 )


相对于更深度的树 , 这样的方差较低 , 但偏置更高 。这可以通过应用复杂度约束来完成 。XGBoost 相对于 MART 的优势之一是复杂度的惩罚 , 这对叠加树模型而言并不常见 。目标函数的惩罚项可以写成: 其中第一项是每个单个树的终端节点的数量 , 第二项是在该项权重上的 L2 正则化 , 最后一项是在该项权重上的 L1 正则化 。
Friedman(2002) 最早引入了随机化 , 这是通过随机梯度下降实现的 , 其中包括在每次迭代时进行行子采样(row subsampling) 。随机化有助于提升泛化性能 。子采样的方法有两种:行子采样与列子采样(column subsampling) 。MART 仅包含行子采样(没有替代) , 而 XGBoost 包含了行子采样和列子采样两种 。
正如前面讨论的那样 , MART 和 XGBoost 使用了两种不同的 boosting 算法来拟合叠加树模型 , 分别被称为 GTB(梯度树提升)和 NTB(牛顿树提升) 。这两种算法都是要在每一次迭代 m 最小化: 其基函数是树: 其一般步骤包含 3 个阶段:1. 确定一个固定的候选树结构的叶权重 ;2. 使用前一阶段确定的权重 , 提出不同的树结构 , 由此确定树结构和区域;3. 一旦树结构确定 , 每个终端节点中的最终叶权重(其中 j=1,..,T)也就确定了 。
算法 3 和 4 使用树作为基函数 , 对算法 1 和 2 进行了扩展:XGBoost 和 MART 的差异最后 , 论文对两种树提升算法的细节进行了比较 , 并试图给出 XGBoost 更好的原因 。算法层面的比较正如之前的章节所讨论的那样 , XGBoost 和 MART 都是要通过简化的 FSAM(Forward Stage Additive Modelling/前向阶段叠加建模)求解同样的经验风险最小化问题:即不使用贪婪搜索 , 而是每次添加一个树 。
在第 m 次迭代时 , 使用下式学习新的树:XGBoost 使用了上面的算法 3 , 即用牛顿树提升来近似这个优化问题 。而 MART 使用了上面的算法 4 , 即用梯度树提升来做这件事 。这两种方法的不同之处首先在于它们学习树结构的方式 , 然后还有它们学习分配给所学习的树结构的终端节点的叶权重的方式 。再看看这些算法 , 我们可以发现牛顿树提升有 Hessian 矩阵 , 其在确定树结构方面发挥了关键性的作用 , XGBoost: 而使用了梯度树提升的 MART 则是: 然后 , XGBoost 可以直接这样定义牛顿树提升的叶权重:使用梯度树提升的 MART 则这样定义:总结一下 , XGBoost 使用的 Hessian 是一种更高阶的近似 , 可以学习到更好的树结构 。
但是 , MART 在确定叶权重上表现更好 , 但却是对准确度更低的树结构而言 。在损失函数的应用性方面 , 牛顿树提升因为要使用 Hessian 矩阵 , 所以要求损失函数是二次可微的 。所以它在选择损失函数上要求更加严格 , 必须要是凸的 。当 Hessian 每一处都等于 1 时 , 这两种方法就是等价的 , 这就是平方误差损失函数的情况 。
因此 , 如果我们使用平方误差损失函数之外的任何损失函数 , 在牛顿树提升的帮助下 , XGBoost 应该能更好地学习树结构 。只是梯度树提升在后续的叶权重上更加准确 。因此无法在数学上对它们进行比较 。尽管如此 , 该论文的作者在两个标准数据集上对它们进行了测试:Sonar 和 Ionosphere(Lichman, 2013) 。
这个实证比较使用了带有 2 个终端节点的树 , 没有使用其它正则化 , 而且这些数据也没有分类特征和缺失值 。梯度树提升还加入了一个线搜索(line search) , 如图中红色线所示 。这个比较图说明这两种方法都能无缝地执行 。而且线搜索确实能提升梯度提升树的收敛速度 。正则化比较正则化参数实际上有 3 类:1.boosting 参数:树的数量 M 和学习率η2. 树参数:在单个树的复杂度上的约束和惩罚3. 随机化参数:行子采样和列子采样两种 boosting 方法的主要差别集中在树参数以及随机化参数上 。

推荐阅读