Gradient Boosting —— 梯度迭代增强

回归问题(Regression)

考虑一个回归问题,已知n个样本
需要拟合一个函数 ,使得误差最小。

迭代拟合残差

当然,通常很难找到一个非常准确的 F,于是我们先找到一个预测准确性比较弱的 ,其预测值 与实际 y 值之间的差异,也就是残差

现在问题可以变成,尽量找到一个好的 来拟合 。假设我们拟合了一个 ,现在总的拟合函数就是 。不幸的是, 虽然比 有提升,但依然存在残差

于是我们再寻找一个 来拟合 ,于是 。
这个迭代可以一直进行下去,使函数 F(x) 不断逼近目标值 y。这样迭代拟合残差来构造的模型函数可以写作

即,初始模型 的预测就用所有样本目标值y的均值。第m轮迭代得到的模型函数 ,等于上一轮函数 ,加上对上一轮函数残差的拟合函数 。

不求一次性找到一个最优的拟合函数 F,而是采用迭代的方法构造出一系列函数,组合起来构成总的拟合函数 F,在迭代过程中不断逼近要拟合的真实函数,这是 Boosting 算法家族的共同特点。

梯度

我们现在要讨论的算法叫 Gradient Boosting,但是上面说了半天就是在拟合残差,好像跟梯度没啥关系啊!那么现在来研究一下误差函数 L 对拟合函数 F 的梯度。

对拟合函数 F,设拟合值
采用平方误差函数
对所有样本,总的误差

样本的目标值 是已知的,误差J 最后算出来的结果就是一个数值标量,总共有n个样本,所以 误差J 是n元变量 的函数。

计算 函数J 的梯度:


残差 = 负梯度

说明一下,上面偏导数写法是 ,不过有些文章会写作 。刚开始看到对 求偏导感觉有点疑惑,对函数求偏导怎么理解?仔细想想,其实 就是拟合函数的输出值,对于J来说,它也是一个变量。所以上面设 ,这两个偏导是一样的,引入 主要是帮助理解。

在机器学习领域,梯度下降是很常用的算法,通常应用梯度下降是 误差J 对模型 F(x,w)的参数w 计算梯度,也就是说使用梯度下降的目的是 寻找最优的参数,使得模型的预测值 与目标值y 的误差J 最小。

而这里 Gradient Boosting 是 误差J 对 F的值 计算梯度,即对 计算梯度,而不关心F的参数w。实际上也没法关心,因为在迭代过程中,F的参数在上一轮迭代已经确定好了,F已经是确定的(记得第一个是先给出的,然后再开始迭代),现在的关注点是残差。

其它误差函数

上面推导出 残差=负梯度,但两者既然一样,好像也没有引出什么新的东西。不过,上面的结论是采用平方误差函数的情况。如果考虑其它误差函数,用梯度计算时我们可以得到一些不同的特性。我们对比看几个例子:

1. 残差

2. 平方误差

负梯度

3. 绝对误差

负梯度

4. Huber 误差

负梯度

可见,平方误差的负梯度=残差,而绝对误差和Huber误差的 负梯度 残差。
这些差异会带来什么不同的特性呢?

公式(1)表明,绝对误差的负梯度是 {-1,1},每个样本的残差都映射到 {-1,1},差别大小被忽略了。
公式(2)表明,Huber误差的负梯度,在 误差绝对值 时等于残差,但 误差绝对值 时被限制为 ,即“残差”上限是 。
所以,相对原始的残差 ,这两种负梯度都弱化了异常值的影响。如果我们拟合这三种负梯度,会发现平方误差对异常值(outliers)的敏感度较高,Huber 误差、绝对误差对异常值的敏感度较低。

负梯度 / 伪残差
虽然绝对误差和Huber误差的 负梯度 残差,但负梯度也是根据误差 L 计算出来的,从上面的分析也可以看出,不同误差函数得到的负梯度主要是对残差进行了一些限制或调整,所以,我们可以把负梯度理解为一种“伪残差”,或者说,经过调整的残差。

Gradient Boosting 算法步骤

对于回归问题,已知n个样本 ,求拟合函数 ,使得误差最小。
首先选取一个可微分的误差函数L。

  1. 产生一个初始模型,比如
  2. 进行M次迭代
    2.1 计算L对F的负梯度
    2.2 构建函数 h 拟合负梯度
    2.3 计算h的权重系数 ,使得F增加h后的总误差 最小。
    这里 y、F、h 都已知,可以用一维优化方法计算出 。(参考 维基百科 - Line search)。
    2.3 F 更新为 F+h(为h的权重系数)

Gradient Boosting vs AdaBoost

同属 Boosting 家族,Gradient Boosting vs AdaBoost 在大方向上是一致的,都是通过迭代构建弱模型,逐步增强(Boosting)并组合为强模型。
主要的差别集中在,Gradient Boosting 迭代拟合负梯度(“伪残差”),AdaBoost 迭代调整样本的权重
关于 AdaBoost 可以参考上一篇文章 Boosting/AdaBoost —— 多级火箭助推。

另外,Gradient Boosting 并不只用于回归问题,也可以用在分类和排名问题,本文不再详述。

参考

A Gentle Introduction to Gradient Boosting
维基百科 - Gradient boosting

你可能感兴趣的:(Gradient Boosting —— 梯度迭代增强)