AdaBoost 自适应提升(二)公式推导

前面对算法训练过程的描述都只是思路,到底错一个样本,样本权重该涨多少?模型权重应该怎么计算?这些问题全靠猜或者拍脑袋,算法就没法落地。

为了让样本权重怎么调、模型权重怎么定都变成精确而可执行的规则,我们需要进行公式推导,把这些口头的直觉,变成清晰的数学步骤,让 AdaBoost 的机制从想法变成算法。

1. 目标函数

其中:

  • \( F_{m}(x) \) 也是一个 \( K \) 维的向量,表示每个类别预测得分
  • \(\alpha_{t}\)​ 表示第 t 个弱分类器的权重
  • \( h_{t}(x) \) 表示弱分类器输出的类别标签

假设共有 \(K\) 个类别,输出类别为 \(c\),我们将其编码为一个 \(k\) 维的向量 \(y=(y_{1}…y_{k})\) ,则:

假设有 \( 3 \)个类别,假设某个样本的真实标签为:

  • 如果标签 1 时,可示为 \( (1, -\frac{1}{2}, -\frac{1}{2}) \) 向量。
  • 如果标签 2 时,可示为 \( (-\frac{1}{2}, 1, -\frac{1}{2}) \) 向量。
  • 如果标签 3 时,可示为 \( (-\frac{1}{2}, -\frac{1}{2}, 1) \) 向量。

AdaBoost 的目标是最小化加权指数损失,单个样本的损失表示可表示为:

假设:真实标签 \(y\) 为: \((1, -1/2, -1/2)\)

  • 如果预测正确,\( F_{m}(x) \) 输出分数为:\((0.8, -0.4, -0.4)\),则指数损失为:0.67
  • 如果预测错误,\( F_{m}(x) \) 输出分数为:\((-0.4, 0.8, -0.4)\),则指数损失为:1.22

并且,预测正确的分数越大,则损失越小。预测错误的分数越大,则损失越大。所有训练样本的损失表示如下,我们优化的目标就是得到每个弱学习器的权重,从而使得正确类别预测的分数尽可能的大。

2. 模型权重

在第 \( m \) 轮的输出,可以由下面的公式表示:

我们的损失函数可以表示为:

将目标函数展开:

上述公式中:

  • 第一项:表示第 i 个样本在 m 弱学习器的损失时的样本权重,权重的大小由前面弱学习器对该样本的预测情况来决定,如果预测正确,并且预测正确分数较高,则权重较低。如果预测错误,则预测错误分数越高,则权重越高。
  • 第二项:表示第 i 个样本在 m 弱学习器的损失

我们把第一项样本权重使用 \( w_{i}(m) \) 表示,则得到公式:

样本权重是由上一个弱学习器的预测结果来确定的。如果上一轮弱学习器预测错误,则样本的权重在下一轮中会相应增大。反之,若预测正确,样本权重会减小。这样,新的弱学习器在训练时会更加关注那些此前被错误分类的样本,从而逐步提升整体模型的分类性能。


损失函数是由分类正确的样本的损失、分类错误样本的损失构成,因此目标函数可以写成:

接下来,我们推导一下 \( y_{i}^{T}h_{m}(x_{i}) \) 在预测正确和错误时的结果是什么。假设预测正确,则真实标签和模型预测标签可以表示如下:

那么,如果预测错误的话:

把分类正确、分类错误时得到的公式代入原来损失函数,得到下面的公式:


我们希望知道当前弱学习器的权重 \( \alpha_{m} \) 是什么,才能使得损失函数最小。接下来,对 \( \alpha_{m} \) 进行求导,并令导数为 0,再化简之后,得到下面的公式:

我们看到,分母表示错误样本的权重,表示当前弱学习器的加权错误率。我们用 \( err_{t} \) 来表示分母的加权错误率,则分子加权正确率可以表示为 \( 1- err_{t} \)。

我们再把前面的系数 \( \frac{(K-1)^2}{K} \) 去掉,则得到模型的权重计算公式:

在三分类场景中,随机猜测的准确率为 1/3,对应错误率为1−1/3 ​≈ 0.67。若某弱学习器的错误率高于此(如取 err ​= 0.68),代入多分类 AdaBoost 的权重公式,计算得模型权重约为−0.06。

这一结果揭示了 AdaBoost 的核心约束:算法要求每个弱学习器的错误率必须低于随机猜测的错误率(即二分类中 err​ < 0.5,多分类中 err ​<1−1/K​)。若弱学习器无法满足这一条件,其权重会为负,纳入集成后反而会降低模型性能。因此,AdaBoost 在迭代训练时,若找不到错误率低于随机猜测的弱学习器,会直接停止训练。

3. 样本权重

每一轮弱学习器训练时,样本的权重是由前面弱学习器的预测情况来确定:

当前弱学习器训练完成之后,下一轮弱学习器训练时的样本权重可以用下面的公式表示:

我们把前面得到的 \( y_{i}^{T}h_{m}(x_{i}) \) 代入到公式中,可得下一轮样本权重的更新公式(注意:这是未归一化的权重):

我们让两者都乘以相同的常数 \( \exp\left(\frac{K-1}{K}\,\alpha_m\right) \),则可得:

这个公式表示:当前弱学习器预测正确样本,则样本权重不调整。当预测错误,则样本权重提升。最后,对所有样本的权重进行归一化,