coding
unsky
deepdim
thought

损失函数

损失函数(loss function)是用来估量模型的预测值 $f(x)$ 与真实值Y的不一致程度,它是一个非负实值函数,通常使用 $L(Y, f(x))$ 来表示,损失函数越小,模型的鲁棒性就越好。损失函数是经验风险函数的核心部分,也是结构风险函数重要组成部分。模型的结构风险函数包括了经验风险项和正则项,通常可以表示成如下式子:

$$\theta^{*}=arg\underset{\theta}{\min}\frac{1}{N}\sum_{i=1}^N{L\left( y_i,f\left( x_i;\theta \right) \right) +\lambda \varPhi \left( \theta \right)}$$

其中,前面的均值函数表示的是经验风险函数,L代表的是损失函数,后面的 $\varPhi$ 是正则化项(regularizer)或者叫惩罚项(penalty term),它可以是L1,也可以是L2,或者其他的正则函数。整个式子表示的意思是找到使目标函数最小时的θ 值。下面主要列出几种常见的损失函数。

log对数损失函数(逻辑回归)

有些人可能觉得逻辑回归的损失函数就是平方损失,其实并不是。平方损失函数可以通过线性回归在假设样本是高斯分布的条件下推导得到,而逻辑回归得到的并不是平方损失。在逻辑回归的推导中,它假设样本服从伯努利分布(0-1分布),然后求得满足该分布的似然函数,接着取对数求极值等等。而逻辑回归并没有求似然函数的极值,而是把极大化当做是一种思想,进而推导出它的经验风险函数为:最小化负的似然函数(即max F(y, f(x)) —-> min -F(y, f(x)))。从损失函数的视角来看,它就成了log损失函数了。

log损失函数的标准形式:
$$ L\left( Y,P\left( Y|X \right) \right) =-\log P\left( Y|X \right)
$$
刚刚说到,取对数是为了方便计算极大似然估计,因为在MLE中,直接求导比较困难,所以通常都是先取对数再求导找极值点。损失函数 $L(Y, P(Y|X))$ 表达的是样本X在分类Y的情况下,使概率 $P(Y|X)$ 达到最大值(换言之,就是利用已知的样本分布,找到最有可能(即最大概率)导致这种分布的参数值;或者说什么样的参数才能使我们观测到目前这组数据的概率最大)。因为log函数是单调递增的,所以 $logP(Y|X)$ 也会达到最大值,因此在前面加上负号之后,最大化 $P(Y|X)$ 就等价于最小化 $L$ 了。
逻辑回归的 $P(Y=y|x)$ 表达式如下(为了将类别标签y统一为1和0,下面将表达式分开表示):

将它带入到上式,通过推导可以得到logistic的损失函数表达式,如下:

逻辑回归最后得到的目标式子如下:
$$J\left( \theta \right) =-\frac{1}{m}\sum_{i=1}^m{\left[ y^i\log h_{\theta}\left( x^i \right) +\left( 1-y^i \right) \log \left( 1-h_{\theta}\left( x^i \right) \right) \right]}$$
上面是针对二分类而言的。

平方损失函数(最小二乘法, Ordinary Least Squares )

最小二乘法是线性回归的一种,OLS将问题转化成了一个凸优化问题。在线性回归中,它假设样本和噪声都服从高斯分布(为什么假设成高斯分布呢?其实这里隐藏了一个小知识点,就是中心极限定理,可以参考central limit theorem),最后通过极大似然估计(MLE)可以推导出最小二乘式子。最小二乘的基本原则是:最优拟合直线应该是使各点到回归直线的距离和最小的直线,即平方和最小。换言之,OLS是基于距离的,而这个距离就是我们用的最多的欧几里得距离。为什么它会选择使用欧式距离作为误差度量呢(即Mean squared error, MSE),主要有以下几个原因:

  1. 简单,计算方便;
  2. 欧氏距离是一种很好的相似性度量标准;
  3. 在不同的表示域变换后特征性质不变。
    平方损失(Square loss)的标准形式如下:
    $$L\left( Y,f\left( X \right) \right) =\left( Y-f\left( X \right) \right) ^2$$
    当样本个数为n时,此时的损失函数变为:
    $$L\left( Y,f\left( X \right) \right) =\sum_{i=1}^n{\left( Y-f\left( X \right) \right) ^2}$$
    $Y-f(X)$ 表示的是残差,整个式子表示的是残差的平方和,而我们的目的就是最小化这个目标函数值(注:该式子未加入正则项),也就是最小化残差的平方和(residual sum of squares,RSS)。
    而在实际应用中,通常会使用均方差(MSE)作为一项衡量指标,公式如下:
    $$MSE=\frac{1}{n}\sum_{i=1}^n{\left( \widetilde{Y_i}-Y_i \right) ^2}$$
    note:

其求解过程转化为LSR(最小二乘回归)在求解时候。

  1. 加入L1惩罚项,将变为 lasso问题,具体对lasso的求解将另起一文
  2. 加入L2惩罚项,将变为岭回归问题

指数损失函数(Adaboost)

学过Adaboost算法的人都知道,它是前向分步加法算法的特例,是一个加和模型,损失函数就是指数函数。在Adaboost中,经过m此迭代之后,可以得到
$$f_m\left( x \right) =f_{m-1}\left( x \right) +\alpha _mG_m\left( x \right) $$
Adaboost每次迭代时的目的是为了找到最小化下列式子时的参数α 和G:
$$arg\underset{\alpha ,G}{\min}=\sum_{i=1}^N{\exp \left[ -y_i\left( f_{m-1}\left( x_i \right) +\alpha G\left( x_i \right) \right) \right]}$$
而指数损失函数(exp-loss)的标准形式如下
$$L\left( Y,f\left( X \right) \right) =\exp \left[ -yf\left( x \right) \right] $$
可以看出,Adaboost的目标式子就是指数损失,在给定n个样本的情况下,Adaboost的损失函数为:
$$L\left( Y,f\left( X \right) \right) =\frac{1}{n}\sum_{i=1}^n{\exp \left[ -yf\left( x \right) \right]}$$

Hinge损失函数(SVM)

在机器学习算法中,hinge损失函数和SVM是息息相关的。在线性支持向量机中,最优化问题可以等价于下列式子:
$$\underset{w,b}{\min}\sum_i^N{\left[ 1-y_i\left( w\cdot x_i+b \right) \right] _++\lambda ||w||^2}$$
下面来对式子做个变形,令:
$$\left[ 1-y_i\left( w\cdot x_i+b \right) \right] _+=\xi _i$$
于是,原式就变成了:
$$\underset{w,b}{\min}\sum_i^N{\xi _i+\lambda ||w||^2}$$
另 $\lambda =\frac{1}{2C}$

$$\underset{w,b}{\min}\frac{1}{C}\left( C\sum_i^N{\xi _i+\frac{1}{2}||w||^2} \right)$$
可以看出,该式子与下式非常相似:

Hinge 损失函数的标准形式:

$$L\left( y \right) =\max \left( 0,1-y\tilde{y} \right) ,y=\pm 1$$
可以看出,当 $|y|>=1$ 时,$L(y)=0$ 。

其它损失函数

0-1损失函数

绝对值损失函数

总结


参数越多,模型越复杂,而越复杂的模型越容易过拟合。过拟合就是说模型在训练数据上的效果远远好于在测试集上的性能。此时可以考虑正则化,通过设置正则项前面的hyper parameter,来权衡损失函数和正则项,减小参数规模,达到模型简化的目的,从而使模型具有更好的泛化能力。

坚持原创技术分享,您的支持将鼓励我继续创作!