损失函数的定义
我们以分类问题为例来讨论,假如分类器f,那么对于输入X,输出为f(X)那么,如何衡量这个分类器的好坏,我们用f(X)和真正的Y值进行比较,来衡量分类器f的好坏,这种衡量的标准就是损失函数,损失函数越小,代表分类器的性能越好。 损失函数的输入为f(x)和Y,输出是一个非负实数,记做L(f(x),Y)。
期望风险、经验风险和结构风险
在学习损失函数时候,经常冒出来几个概念:经验风险、期望风险、结构风险。这些是什么意思?
期望风险:
当损失函数越小,表示我们的模型越好。但是我们不能用一个样本来进行预测,然后说这个模型的性能比较好。正确的做法是比较所有的样本,这里的所有包括我们已有的训练数据还有未知的所有数据。这里有一个前提,那即是我们假设我们的样本x和y服从某种概率的分布P(x,y)。我们用所有样本的损失函数的均值,也就是期望风险(expected risk)来进行度量。
$ R_{exp}(f) = E_P[L(Y,F(X))] =\int_{x\times y} L(y,f(x)) P(x,y) dxdy$
但是这里的问题是这样的,x和y的联合概率分布式不能够得知的,所以我们想要使用期望风险来度量模型的性能是不可以的。
经验风险:
虽然,我们不知道x和y的分布情况,但是我们手里有一些训练数据,我们直接在这训练数据上面的风险最小,于是,就引入了经验风险(empirical risk)的概念:
$R_{emp}(f) = \frac{1}{N} \sum \limits_{i=1}^N L(y_i, f(x_i))$
结构风险:
根据大数定理,当样本N的数量无限多的时候,经验风险就等于期望风险,但是实际当中我们的数据是有限的,在有限的数据下面让经验风险最小容易产生“过拟合”的现象。 于是我们加入正则化项,让模型不要太拟合,加上正则化项以后的经验风险叫做结构风险(structural risk):
$R_{srm}(f) = \frac{1}{N} \sum \limits_{i=1}^N L(y_i, f(x_i)) + \lambda J(f)$
所以,最终我们用结构风险来对我们的模型进行度量和优化,让我们的模型使得结构风险最小化。
上面的结构风险为一个通用的目标优化函数,很多优化模型都具有这样的函数形式。
注:以上内容参考 李航《统计学习》的1.3节。 周志华 《机器学习》6.4节将上式中的后面项$\lambda J(f)$称为结构风险,前面项称为经验风险,和本文介绍的稍有出入。
让我们再看看一下周志华《机器学习》当中对于这两项的描述,它说的也很有道理。结构风险反应的是模型当中固有的性质,经验风险反应的是数据和模型的契合程度(只有在引入数据的情况下才有经验这个概念),那么上面的式子当中哪个是固有性质的表述,当然是 $J(f)$了,哪个是关于经验的表述,当然是$ \frac{1}{N} \sum \limits_{i=1}^N L(y_i, f(x_i))$。所以它把经验风险和结构风险分别定义为上面两项。
损失函数的作用
有了上面的知识,我们再来看一句话,也就是大多数文章当中出现的,“损失函数是经验风险函数的核心部分,也是结构风险函数的重要组成部分。模型的结构风险函数包括了经验风险项和正则项,” 通常表达式如下:
$\theta^* = arg \min \limits_{\theta} \frac{1}{N} \sum \limits_{i=1}^{N} L(y_i,f(x_i ;\theta)) + \lambda \Phi (\theta) $
式子的前面一项为经验风险函数,后面的$\Phi$为正则化项或者惩罚项,整个式子表示找到使得函数最小的$\theta$的值。从上面的式子可以看出来,模型的经验风险基本上由损失函数来决定,不同的损失函数,模型的形式是不一样的。经验风险+正则项构成了最终的结构风险
在了解了损失函数在结构风险函数的重要性之后,下面我们以分类问题介绍一下几种损失函数。 我们令z = Yf(x)表示的是我们预测的值和实际的值的乘积。
各种损失函数介绍:
0-1损失
0-1损失是一种最理想的损失函数,当Y和f(x)的值不一样的时候,也就是预测错误的时候,那么损失的值为1,当Y的值和f(x)的值一样的时候,损失的值为0。所以0-1损失的表达式如下:
$L(Y, F(\mathbf{x})) = \left\{ \begin{aligned} 1, & \ Y \neq f(x) \\ 0, & \ Y = f(x) \\ \end{aligned} \right. $
在分类问题当中,预测的值f(x)和Y的值的乘积z小于0的时候,则惩罚1,大于0则不惩罚,所以0-1损失的另一种形式如下:
$L_{0/1}= \left\{ \begin{aligned} 1, &\quad if \ z < 0; \\ 0, & \quad otherwise \\ \end{aligned} \right. $
svm和Hinge损失
在svm当中,硬间隔当中所有的样本满足$y_i(\mathbf{w}^T \mathbf{x}_i+b) \geq 1$ 也就是所有的样本都被分类正确。
这在实际当中这很难做到,于是采用软间隔,也就是允许部分样本不满足上述的条件。当然,我们还是希望不满足上述条件的样本尽量的少,哪些样本不满足上述条件?如下图所示,一种是下图中的棕色圆圈类的样本,虽然分类正确,但是在虚线和红线的内部,它满足 $1> y_i(\mathbf{w}^T \mathbf{x}_i+b) > 0$ 。 另外一类是分类错误的。也就是下图中的蓝色圆圈内的样本,它们满足$y_i(\mathbf{w}^T \mathbf{x}_i+b) < 0$
所以,在svm当中,带有软间隔的优化函数可以写作下面的式子:$\min \limits_{\mathbf{w}, b} \frac{1}{2} {\Vert \mathbf{w} \Vert}^2 + C \sum \limits_{i=0}^{N} {[ 1-y_i({\mathbf{w}}^Tx_i+b)]}_+$ 其中C是惩罚系数。
注意到上式中的${[ 1-y_i({\mathbf{w}}^Tx_i+b)]}_+$, 它的含义是这样的,只取那些使得$1-y_i({\mathbf{w}}^Tx_i+b) \geq 0$的值,也就是我们上面分析的那两类样本。当满足$y_i(\mathbf{w}^T \mathbf{x}_i+b) \geq 1$的时候,它的值为0,不进行惩罚。
我们令${[ 1-y_i({\mathbf{w}}^Tx_i+b)]}_+ = \xi_i$ 并且为了书写的方便,我们令$y_i({\mathbf{w}}^Tx_i+b)$=$z_i$。 于是${[ 1-y_i({\mathbf{w}}^Tx_i+b)]}_+ = \xi_i$ 就变成了${[ 1-z_i]}_+ = \xi _i$ 结合我们上面分析的右下角的加号的含义,我们可以得知
当$z$的值小于1的时候,$\xi = 1-z$
当$z$的值大于1的时候,$\xi = 0$
即$z和\xi$满足这样的关系: $\xi= \left\{ \begin{aligned} 1-z, & \ z<1 \\ 0, & \ z>1 \\ \end{aligned} \right. $
上面的式子就是hinge损失,它可以写作一般的形式 $\ell_{hinge}(z) = max(0, 1-z)$
于是上式中的svm优化算法用hinge损失函数表示为: $\min \limits_{\mathbf{w}, b} \frac{1}{2} {\Vert \mathbf{w} \Vert}^2 + C \sum \limits_{i=0}^{N} \ell_{hinge}{( y_i({\mathbf{w}}^Tx_i+b))}$
如果将svm的优化函数看作是一种结构风险函数的,它为经验风险和正则项的和。 其中结构风险采用的是hinge损失函数,正则项采用了L2正则化。即svm=hinge损失+L2正则化。
AdaBoost和指数损失
指数损失:$L_{exp}(z) = exp(-z)$
AdaBoost是采用加法模型,损失函数为指数函数,学习算法为前向分步算法的二分类学习算法。[来自李航《统计学习方法》8.3节]
并且在这一节当中证明AdaBoost损失函数为指数函数。
逻辑回归和对数损失以及交叉熵损失
当有人问逻辑回归的损失函数是什么的时候,有的说是交叉熵损失,有的说是对数损失,其实这两者都对。
在逻辑回归,二分类的情况下推导如下:
$$J(\theta) = –ln(L(\theta) = -\sum \limits_{i=1}^{m} (y_i ln(h_{\theta}) +(1-y_i) ln(1-h_{\theta}) )$$
这个公式和交叉熵的定义是一样的,所以逻辑回归的损失函数是交叉熵损失。
对于逻辑回归,它的通用的损失函数是这样定义的:$L(Y,P(Y|X)) = -\log P(Y|X)$
而取$P(Y|X) = \frac{1}{1+e^{-z}}$的时候,对数损失变为了:$L_{log}(z) =log(1+e^{-z})$
对数损失是在逻辑回归建模的时候推导出来的,推导过程如下:
我们令$p(Y=y|x) = \frac{1}{1+e^{ -y( \mathbf{w}^T \mathbf{x}+ b}) }$
在求解最优的参数的时候,我们使用了最大似然函数的方法来进行求解,对似然函数取对数,变为对数似然函数。
对数似然函数为:$ln(L(\mathbf{w},b) = \sum \limits_{i=1}^{m} ln (\frac{1}{ 1 + e^{-y_i ({\mathbf{w}}^T \mathbf{x}_i+ b)} })$。(对数似然函数的求解很简单,只需要将各个概率相乘,然后取对数就可以了)
求最大的对数似然函数,也就是求最小的负对数似然函数。于是优化目标变为$J(\mathbf{w},b) = -ln(L(\mathbf{w},b) = \sum \limits_{i=1}^{m} ln( 1 + e^{-y_i ({\mathbf{w}}^T \mathbf{x}_i+ b)} ) = \sum \limits_{i=1}^{m} ln( 1 + e^{-z} )$ 。
用上面的式子和经验风险函数的式子相比,可以看出来在逻辑回归当中使用的对数损失函数为:$L(z) = ln( 1 + e^{-z} )$
总结:
对于算法和损失函数来说,可以从正面来说,一种损失函数是由一种算法推导出来的,比如SVM推导出hinge损失,LR推导出对数损失。另外,你也可以说损失函数+正则化项确定了一个算法,比如hinge损失+l2正则化就是SVM算法。
参考:
机器学习优化问题-经验风险、期望风险、结构风险
机器学习-损失函数
SVM等于Hinge损失 + L2正则化