怎么理解surrogate loss function代理损失函数?

  统计/机器学习 监督式学习 损失函数    浏览次数: 3313
16

怎么理解surrogate loss function代理损失函数?

 

数据痴汉   2017-04-19 10:33



   2个回答 
24

Surrogate loss function,中文可以译为代理损失函数。当原本的loss function不便计算的时候,我们就会考虑使用surrogate loss function。

在二元分类问题中,假如我们有$n$个训练样本$\{(X_1,y_1),(X_2,y_2),\cdots,(X_n,y_n)\}$,其中$y_i\in\{0,1\}$。为了量化一个模型的好坏,我们通常使用一些损失函数,损失函数越小,模型越好。最常用的损失函数就是零一损失函数$l(\hat y,y)$。

$$l(y, \hat y)=\sum_{i=1}^m\chi(y_i\neq\hat y_i).$$

比如说,测试集里有$5$个数据点,真实分类为$y=(1,1,1,-1,-1)$,预测分类为$\hat y =(1,-1,1,1,-1)$。那么

$$l(y, \hat y)=0+1+0+1+0=2.$$

对于一个loss function$l$,我们的目标是要找到一个最优的分类器$h$,使得这个分类器在测试样本上的期望损失最小。数学式子表达是

$$\min_{h}\mathbb{E}_{X\times y}[l(y, h(X))].$$

理论上,我们是可以直接对上式进行优化,得到最优的分类器$h$。然而这个过程是非常困难的(甚至不可行)。其一是因为$X\times y$的概率分布是未知的,所以计算loss的期望是不可行的。另外一个难处是这个期望值很难进行优化,因为这个loss function是非连续的,这个优化问题本质是NP-Hard的。举个例子来说,假定$X\in\mathbb{R}^2$,我们希望找一个线性分类器

$$h(X)=\begin{cases}1, ~Xw\geq 0\\ -1, ~Xw<0 \end{cases}$$

使得loss的期望最小化。所以我们也就是求解$w=(w_1, w_2)^T$。关于$w_1,w_2$以及loss的图像大致如下,


这个函数显然是非连续的。我们常用的优化方法,比如梯度下降,对此都失效了。正因此,我们可以考虑一个与零一损失相接近的函数,作为零一损失的替身。这个替身我们就称作surrogate loss function代理损失函数。为了计算的便利,这个函数通常是凸函数。例如逻辑回归的loss function,$\log(1+e^{-yXw})$,就是光滑可导的,更容易被求解。


最后补充几句。当我们把原来的零一损失函数替代为其他损失函数的时候,我们自然会问,当我们对代理损失函数进行优化的时候,原来的零一损失是否也被最小化了?它们的差距是多少呢?如果最优化代理损失函数的同时我们也最优化了原本的损失函数,我们就称校对性(calibration)或者一致性(consistency)。这个性质与我们所选择的代理损失函数相关。一个重要的定理是,如果代理损失函数是凸函数,并且在0点可导,其导数小于0,那么它一定是具有一致性的。这也是为什么我们通常选择凸函数作为我们的loss function的原因之一。

下图是零一损失函数与logloss,hinge loss,squared hinge loss以及modified Huber loss的联系。


我的回答主要是参考(翻译)了这篇文章

SofaSofa数据科学社区 DS面经 问答 实战

高代兄   2017-04-19 13:06

厉害了我的哥。。。我的智商只允许我看懂第一句话。不过似乎第一句搞明白也就够了吧吧吧 - ZackLi   2017-04-19 13:17
好理论啊 - sasa   2017-09-13 22:50
作为调参工程师,掩面。。。 - sasa   2017-09-13 22:51
所以可以理解为,计算上的代理? - ljljlj   2017-10-22 14:57
11

高代兄已经说得很多了。我补充一下。Surrogate loss function远比我们想象得重要。

当我们进行分类任务的时候,我们的目标常常是分错样本越少越好,也就是零一损失。

但是零一损失很难计算。我们就寻找一些可以进行计算的损失函数来替代零一损失。也就是说我们把原来的优化问题转化为一个近似的优化问题。不同的surrogate loss function对应着不同的优化问题,就有着不同的优化目标和优化方法,也就从本质上定义了不同类型的分类器。

当我们用hinge loss做surrogate loss function去找一个线性分类器的时候,实际上我们就是用的SVM。当我们用logloss作为surrogate loss function去求解一个线性分类器的时候,实际上我们的模型就是LogisticsRegression。


SofaSofa数据科学社区 DS面经 问答 实战

Nagozi   2017-04-20 01:27

赞同! - batmanX   2017-04-22 12:41
当我们用logloss时,会不会是在使用神经网络 *_* - dzzxjl   2018-03-07 20:08
如果是广义线性模型,就是逻辑模型。如果是有很多层堆积了不同的激活函数,那么就是神经网络了。 - Nagozi   2018-03-08 03:38


  相关主题

Hamming Loss汉明损失的计算公式是什么?   1回答

logloss的取值范围是多少?一般好的分类器能达到多少?   5回答

二元分类为什么不能用MSE做为损失函数?   6回答

cross entropy是什么意思?   1回答

如何理解GBDT里面“损失函数的负梯度在当前模型的值,可以作为残差的估计”?   1回答

关于损失函数h(x), J(x), cost的概念问题   1回答

python求logloss   1回答

hinge loss的公式是什么?   1回答

focal loss是什么?   0回答

Gini指数、Gini系数、Gini不纯是一回事吗?   2回答

逻辑回归的损失函数是怎么来的   2回答

LR中若标签为+1和-1,损失函数如何推导,求大佬解答   3回答



回答问题时需要注意什么?

我们谢绝在回答前讲“生动”的故事。

我们谢绝“这么简单,你自己想”、“书上有的,你认真看”这类的回答;如果你认为对方的提问方式或者内容不妥,你可以直接忽略该问题,不用进行任何作答,甚至可以对该问题投反对票。

我们谢绝答非所问。

我们谢绝自己不会、硬要回答。

我们感激每一个用户在编写答案时的努力与付出!