指数损失函数是什么?AdaBoost 背后的损失
指数损失函数(Exponential Loss Function)是一种用于二分类问题的损失函数,最著名的应用是提升算法 AdaBoost。它对分类错误的惩罚随着错误的严重程度以指数的速度增长。
它的形式
把两个类别的标签记为正 1 和负 1,模型对一个样本给出一个实数分数,分数的正负表示判断的类别,绝对值表示判断的把握。把标签与分数相乘,得到函数间隔:为正说明分类正确,为负说明分类错误,绝对值越大说明越确定。指数损失等于以 e 为底、以“负的函数间隔”为指数的值。当样本被正确分类并且很有把握时,函数间隔是很大的正数,损失接近于零;当函数间隔为零,也就是模型完全拿不准时,损失等于 1;当样本被分错时,函数间隔为负,损失大于 1,而且分错得越离谱,损失以指数的速度急剧增大。
与其他损失的比较
我们真正关心的是分类的错误率,对应的 0-1 损失不连续、难以优化,所以通常用一些连续的、凸的函数来代替它,这些函数都是 0-1 损失的上界。指数损失就是其中之一,其他常见的还有支持向量机使用的合页损失、逻辑回归使用的对数损失。把它们画在同一张图上可以看出:对于分类正确且很有把握的样本,合页损失直接为零,对数损失和指数损失都逐渐趋近于零;对于分类错误的样本,合页损失和对数损失都大致线性地增长,而指数损失增长得快得多。
与 AdaBoost 的关系
AdaBoost 最初由 Yoav Freund 和 Robert Schapire 在 1995 年前后提出时,是从提升弱学习器的角度设计的:每一轮提高被分错样本的权重,训练一个新的弱学习器,再根据它的错误率确定它的权重。2000 年,Jerome Friedman、Trevor Hastie 和 Robert Tibshirani 从统计的角度给出了一个重要的解释:AdaBoost 的整个过程,等价于用“前向分步加法模型”的方式,一步一步地最小化指数损失。每一轮新加入的弱学习器及其权重,正好是在固定前面所有学习器的前提下,使指数损失下降最多的选择;样本权重的更新规则,也正是由指数损失自然推导出来的。他们还证明,指数损失的最优解与对数几率有直接的联系,这说明 AdaBoost 实际上在估计类别的对数几率,从而把它与逻辑回归联系了起来。这一视角也启发了后来更一般的梯度提升方法:可以使用任意可导的损失函数,而不仅限于指数损失。
优点和缺点
指数损失光滑、可导、是凸函数,便于优化,并且让 AdaBoost 有简洁优雅的更新公式。但它的缺点也很明显:对噪声和异常值非常敏感。如果训练数据中有标错的样本,模型会因为它们而产生极大的损失,在后续的迭代中给它们越来越大的权重,花大量的精力去拟合这些错误的样本,从而损害整体的效果。相比之下,对数损失对错误的惩罚增长得慢得多,更加稳健,这也是梯度提升树在分类时更常使用对数损失的原因之一。为了缓解这一问题,研究者还提出了 LogitBoost、BrownBoost 等更稳健的提升算法。