机器学习之常见的损失函数(loss function)

解决一个机器学习问题主要有两部分:数据和算法。而算法又有三个部分组成:假设函数、损失函数、算法优化。我们一般在看算法书或者视频教学时,更多的是去推算或者说参数估计出其假设函数,而往往不太注重损失函数,但是损失函数在面试时却是一个很重要的知识点。所以仅在此以自己理解的方式总结一些常见的损失函数,作为笔记方便日后复习。

参考文章:

一、总览

在机器学习中,通常把模型关于单个样本预测值与真实值的差称为损失,损失越小,模型越好,而用于计算损失的函数称为损失函数。本文介绍的主要有以下的一些损失函数。

  1. logLoss (对数损失函数,LR)

  2. hinge loss (合页损失函数,SVM)

  3. exp-loss (指数损失函数,AdaBoost)

  4. cross-entropy loss (交叉熵损失函数,Softmax)

  5. quadratic loss (平方误差损失函数,线性回归)

  6. absolution loss (绝对值损失函数, )

  7. 0-1 loss (0-1损失函数)

二、 logLoss (对数损失函数,也叫binary cross entropy,二元交叉熵损失,LR)

逻辑回归模型中,通过把线性拟合分类边界的结果送入sigmoid函数,从而得到预测为正的概率。那么很多人可能认为logistics regression模型的损失函数为平方损失函数?其实不是,而是logLoss。为什么是logloss呢?在逻辑回归推导过程中,我们假设样本不是0就是1,即假设样本服从伯努利分布(0-1, 伯努利分布亦称“零一分布”、“两点分布”),然后求满足分布的似然函数,转成对数似然,在对对数似然求极值等。而逻辑回归并没有求似然函数的极值,而是把极大化当成一种思想,对极大取负号变成取极小值。从损失函数的角度去看,其就变成了log损失函数。

logLoss (log 损失函数)的函数标准形式:

                                                   L(Y,\ P(Y|X)) = - log\ P(Y|X)

逻辑回归的P(Y=y|x)的表达式如下:

                            P(Y=y|x) = \left\{\begin{matrix} \ \ \ \ \ \ \ h_\Theta (x) = g(f(x)) = \frac{1}{1+e^{-f(x)}}, \ \ \ \ y=1\ \ \ \ \\\\ 1 - h_\Theta (x) = 1 - g(f(x)) = \frac{1}{1+e^{f(x)}}, \ \ y = 0 \end{matrix}\right.

把P(Y=y|x)带入log loss得:

                           L(y, P(Y=y|x)) = \left\{\begin{matrix} -log\ h_\Theta (x)\ \ \ \ \ \ \ \ \ ,\ y=1\\ \\ -log\ (1- h_\Theta (x))\ , \ y=0 \end{matrix}\right.

分段函数不太好求解,我们对其进行合并,则最后逻辑回归的目标式子为:

                                     J(\Theta ) = -\frac{1}{m}\sum_{i=1}^{m}[y_i logh_\Theta (x_i) + (1-y_i)log(1-h_\Theta (x_i))]

当然,一般我们在实际使用中会对目标函数加入正则化:

                            J(\Theta ) = -\frac{1}{m}\sum_{i=1}^{m}[y_i logh_\Theta (x_i) + (1-y_i)log(1-h_\Theta (x_i))]\ +\ \frac{\lambda }{2m}\sum_{j=1}^{n}\Theta_j^2

m为样本数,n为特征数。

上面就是逻辑回归使用log loss的推导过程了,得到该目标函数后就可通过梯度下降等优化方法进行求参咯,如果你还不了解逻辑回归,请点这里

三、hinge loss (合页损失函数,SVM)

在机器学习中,SVM是你不可能绕过去的模型,SVM有两种解释方式:

第一种是我们非常熟悉的是通过间隔最大化方式,通过拉格朗日乘子法转化成对偶问题进行建模求解的,其(此处是说线性支持向量机)原始优化问题为:

                                                           \underset{w,b}{min}\ \ \frac{1}{2}||w||^2+C\sum_{i}^{m}\xi_i

                                                           st. \ \ \ y_i(w^Tx_i+b)\geq 1-\xi_i,\ \ \ i=1,2,...,m

                                                                               \xi_i\geq 0,\ \ \ \ \ i=1,2,...,m 

通过拉格朗日乘子法转化并求解之后,得到的式子为:

                                                                      \underset{\alpha }{min}\ \ \frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^{m}\alpha _i\alpha _jy_iy_jx_i^Tx_j\ -\ \sum_{i=1}^{m}\alpha _i

                                                                     st. \ \ \ \ \sum_{i=1}^{m}\alpha _iy_i=0

                                                                                0\leq \alpha _i\leq C,\ \ i=1,2,...,m

第二种就是包含有hinge loss的解释方式,其通过最小化下面的目标函数:

                                                        \sum_{i=1}^{m}[1 - y_i(w^Tx_i+b)]_+\ + \ \lambda ||w||^2 

而上面的式子中,第1项是经验损失或者经验风险第二项为系数为\lambda的w的L2范数,为正则化项,对于第1项经验损失,函数

                                                                  L(y(w^Tx+b)) = [1-y(w^Tx+b)]_+

称为合页损失函数(hinge loss function)。下标“+”表示下面取正值的函数:

                                                                  [z]_+=\left\{\begin{matrix} z,\ \ \ z> 0\\ \\ 0,\ \ \ z\leq 0 \end{matrix}\right.

也可以这样理解:

                                                                 [z]_+ = max(0, 1-z)

                                                                 \sum_{i=1}^{m}max(0, 1-y_i(w^Tx_i+b)) + \lambda ||w||^2

hinge loss function 表示,当样本点(x_i, y_i)被正确分类且函数间隔y_i(w^Tx_i+b)大于1时,其损失为0,否则损失为1-y_i(w^Tx_i+b)。所以在使用hinge loss function时,我们的最优化问题为最小化损失函数:

                                                                 \underset{w,b}{min} \ \ \ \sum_{i=1}^{m}[1-y_i(w^Tx_i+b)]_+\ +\ \lambda||w||^2

转化证明详见《统计学习方法》-- 李航。

对于多分类的linear SVM,我们的损失函数为多分类的hinge loss:

           

                 

现在我们来讲一下下面公式的意思:

                                          L_i = \sum_{j\neq y_i}max(0, w^T_jx_i-w^T_{y_i}x_i+\Delta )

                                               = \sum_{j\neq y_i}max(0, w^T_jx_i+\Delta -w^T_{y_i}x_i)

也就说对于样本x_i,对于判定为其他类别的得分w_j^Tx_i与其正确的类型w_{y_i}^Tx_i的距离不能小于\Delta,如果超过范围,则其损失为超过的值,如下图:

 其中2的黄色框的红方点为正确类型的得分w_{y_i}^Tx_i,delta为最小的安全距离,则预测为其他类型的得分w_j^Tx_i不能超过1的黄色框中的红方点,或在1的左边损失为0,在1的右边则其损失为得分减去1的分值。

四、exp-loss (指数损失函数,AdaBoost)

集成学习中,主要有三种集成方法Boosting、Bagging、Stacking,而Boosting中著名的代表为AdaBoost算法。

Boosting是一簇可将弱学习器提升为强学习器的算法。其工作机制为:先从初始训练集训练出一个基学习器,再根据基学习器的表现对样本分布进行调整,使得先前的基学习器做错的训练样本在后续收到更多的关注,然后基于调整后的样本分布来训练下一个基学习器;如此重复进行,直至基学习器数目达到实现指定的值T,或整个集成结果达到退出条件,然后将这些学习器进行加权结合。

Adaboost 算法采用调整样本权重的方式来对样本分布进行调整,即提高前一轮个体学习器错误分类的样本的权重,而降低那些正确分类的样本的权重,这样就能使得错误分类的样本可以受到更多的关注,从而在下一轮中可以正确分类,使得分类问题被一系列的弱分类器“分而治之”。对于组合方式,AdaBoost采用加权多数表决的方法,具体地,加大分类误差率小的若分类器的权值,减小分类误差率大的若分类器的权值,从而调整他们在表决中的作用。

Adaboost的损失函数为指数损失函数。在Adaboost算法学习的过程中,经过m轮迭代之后,可以得到f_m(x):

                                                   f_m(x) = f_{m-1}(x)+\alpha _mG_m(x)

而Adaboost每次迭代时的目的是为了得到:

                                                     (\alpha_m,G_m(x))=arg\ \underset{\alpha,G}{min}\sum_{i=1}^{N}exp[-y_if_{m}(x_i)]

                                                                          =arg\ \underset{\alpha,G}{min}\sum_{i=1}^{N}exp[-y_i(f_{m-1}(x_i)+\alpha_mG_m(x_i))]

而指数损失(exp-loss)函数的标准形式为:

                                                    L(y, f(x)) = exp[-yf(x)]

与Adaboost每次迭代时的目标函数类似。可以看出,Adaboost的目标式子就是指数损失,所以在给定n个样本的情况下,Adaboost的损失函数为:

                                                    L(y,f(x)) = \frac{1}{n}\sum_{i=1}^nexp(-y_if(x_i))

五、cross-entropy loss (交叉熵损失函数,Softmax)

1、先来看看什么是交叉熵?

上过信息论的同学都知道,交叉熵是信息论中的概念,其原来是用来估算平均编码长度的。给定两个概率分布p和q,通过q来表示p的交叉熵为:

                                      H(p,q) = - \sum_{y}p(y)\ log\ q(y)

交叉熵刻画的是两个概率分部之间的距离,或可以说其刻画的是通过概率分布q来表达概率分布p的困难程度,p代表正确答案,q代表的是预测值,交叉熵越小,两个概率的分布越接近。

交叉熵损失函数通常使用在softmax上,而softmax通常使用在神经网络的末端,使其预测结果以概率的形式输出。Softmax函数为:

                                     {\color{DarkRed} \sigma (Z)_j=\frac{e^{z_j}}{\sum_{k=1}^Ke^{z_k}}}

 其把原始输出z_j转化成概率,从而可以通过交叉熵来计算预测的概率分布和真实答案的概率分布之间的距离。

举例子说就是,假设有一个3分类问题,某个样例的正确答案是(1,0,0),这个模型经过softmax回归之后的预测答案是(0.5,0.4,0.1),那么预测和正确答案之间的交叉熵为:

                                  H((1, 0,0),\ (0.5,0.4,0.1))=-(1*log\ 0.5+0*log\ 0.4+0*log\ 0.1)\approx 0.3

如果另一个模型的预测是(0.8,0.1,0.1),那么这个预测值和真实值之间的交叉熵是:

                                 H((1, 0,0),\ (0.8,0.1,0.1))=-(1*log\ 0.8+0*log\ 0.1+0*log\ 0.1)\approx 0.1

明显可见,模型2要优于模型1。也就是对于真实的概率分布(1,0,0),使用预测的概率分布(0.8, 0.1, 0.1去表达比使用(0.5,0.4,0.1)去表达要难度更小。

从上面的例子,我们发现,对于第i个样本x_i,在给定参数W下的得分结果为f_{yi},则其损失函数为:

                                L_i=-log(\frac{e^{f_{y_i}}}{\sum_je^{y_j}})

这就是交叉熵损失。

在多分类问题中,我们还可使用多分类hinge loss作为损失函数,多分类的hinge loss如下:

六、quadratic loss (平方误差损失函数,线性回归)

在回归问题中,我们常常使用平方误差作为其损失函数,其公式为:

                      L(Y,\ f(X))=(f(X)-Y)^2

但更多的是使用其平均值,即

                                 l(Y,f(X))=\frac{1}{2m}\sum_{i=1}^m(f(x_i)-y_i)^2

线性回归中常常添加正则化:

加入L1正则化为Lasso回归:

                    L(Y,f(X))=\frac{1}{2m}\sum_{i=1}^{m}[f(x_i)-y_i]^2\ +\ \lambda\sum_{j=1}^n|w_j|

加入L2正则化则为岭回归:

                     L(Y,f(X))=\frac{1}{2m}\sum_{i=1}^{m}[f(x_i)-y_i]^2\ +\ \lambda\sum_{j=1}^nw_j^2

 

七、absolution loss (绝对值损失函数)

绝对值损失函数的公式:

                      L(Y,f(X))=|Y-f(X)|

表示预测值与真实值的距离。

八、0-1 loss (0-1损失函数)

                                   L(y,f(x)) = \left\{\begin{matrix} 0 \ \ \ if\ \ y=f(x)& \\ & \\ 1 \ \ \ if\ \ y\neq f(x)& \end{matrix}\right.

                                   L(y,f(x))=I(y\neqf(x))

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值