![0b819e92c303871e94b210440ff8ec93.png](https://i-blog.csdnimg.cn/blog_migrate/937c8cb437d87012adaba71267bbf517.jpeg)
损失函数(loss function)是用来估量你模型的预测值f(x)与真实值Y的不一致程度,它是一个非负实值函数,通常使用L(Y, f(x))来表示,损失函数越小,模型的鲁棒性就越好。损失函数是经验风险函数的核心部分,也是结构风险函数重要组成部分。模型的结构风险函数包括了经验风险项和正则项,通常可以表示成如下式子
![9a776909eefb67226672dc9aed2c73b0.png](https://i-blog.csdnimg.cn/blog_migrate/ef13dc42393970614f5cc2d39eafa241.jpeg)
其中,前面的均值函数表示的是经验风险函数,L代表的是损失函数,后面的是正则化项(regularizer)或者叫惩罚项(penalty term),它可以是L1,也可以是L2,或者其他的正则函数。整个式子表示的意思是找到使目标函数最小时的值。下面主要列出几种常见的损失函数
1. 均方误差、平方损失——L2损失:
均方误差(MSE)是回归损失函数中最常用的误差,它是预测值与目标值之间差值的平方和,其公式如下所示:
![259f5779b3ce1d99197e0eea9ca78ace.png](https://i-blog.csdnimg.cn/blog_migrate/747eeb2ed0b581ee89e0f45195e2527d.png)
2. 平均绝对误差——L1损失函数
平均绝对误差(MAE)是另一种常用的回归损失函数,它是目标值与预测值之差绝对值的和,表示了预测值的平均误差幅度,而不需要考虑误差的方向,其公式如下所示:
![2526778e9476a3b8e135e1e704a12e6c.png](https://i-blog.csdnimg.cn/blog_migrate/3b97f9ecad154c989989eec0c3909e6e.png)
平均绝对误差和均方误差(L1&L2)比较:
L1损失对于异常值更鲁棒,但它的导数不连续使得寻找最优解的过程低效;L2损失对于异常值敏感,但在优化过程中更为稳定和准
3. log对数损失函数(逻辑回归)
对数损失, 即对数似然损失(Log-likelihood Loss), 也称逻辑斯谛回归损失(Logistic Loss)或交叉熵损失(cross-entropy Loss), 是在概率估计上定义的.它常用于(multi-nominal, 多项)逻辑斯谛回归和神经网络,以及一些期望极大算法的变体. 可用于评估分类器的概率输出. 对数损失通过惩罚错误的分类,实现对分类器的准确度(Accuracy)的量化. 最小化对数损失基本等价于最大化分类器的准确度.为了计算对数损失, 分类器必须提供对输入的所属的每个类别的概率值, 不只是最可能的类别
log损失函数的标准形式:
![05722cc1e5bc2af3237ea9c4b96b364c.png](https://i-blog.csdnimg.cn/blog_migrate/11e66749e0a8738d6331b752ea33db9c.png)
其中, Y 为输出变量, X为输入变量, L 为损失函数. N为输入样本量, M为可能的类别数, yij 是一个二值指标, 表示类别 j 是否是输入实例 xi 的真实类别. pij 为模型或分类器预测输入实例 xi 属于类别 j 的概率.
如果只有两类 {0, 1},即 yij =0或1,则对数损失函数的公式简化为
![130af779049554641dd6b3ca4f082634.png](https://i-blog.csdnimg.cn/blog_migrate/257e54dce11eb91d0634df3240990659.png)
这就是逻辑回归的损失函数
4. 指数损失函数(Adaboost)
指数损失函数一般用于adaboost集成算法中,简单说一下Adaboost算法是对于分错类别的样本给予更高的权重,通过不断的迭代建立一些弱分类器,然后根据权重将分类器进行投票的算法。一般来说,找到弱学习算法要相对容易一些,然后通过反复学习得到一系列弱分类器,组合这些弱分类器得到一个强分类器。Boosting算法要涉及到两个部分,加法模型和前向分步算法。加法模型就是说强分类器由一系列弱分类器线性相加而成。一般组合形式如下:
![9d216e85257a0bafbc152c8d920c1177.png](https://i-blog.csdnimg.cn/blog_migrate/42daf04728f6e17453bb2e26793f551a.png)
前向分步就是说在训练过程中,下一轮迭代产生的分类器是在上一轮的基础上训练得来的。也就是可以写成这样的形式:
![5f8907761653163308151cb98752800b.png](https://i-blog.csdnimg.cn/blog_migrate/dbbbbd83a5dd818e95065b863fcf7112.png)
其中,h(x;am)就是一个个的弱分类器,am是弱分类器学习到的最优参数,βm就是弱学习在强分类器中所占比重,P是所有am和βm的组合。这些弱分类器线性相加组成强分类器
指数损失函数的标准形式:
![db80dd981cffb1346d818df798ef2ff0.png](https://i-blog.csdnimg.cn/blog_migrate/ea5e7d62a833abeb6dcb37767bde08a1.png)
Adaboost每次迭代时的目的是为了找到最小化下列式子时的参数 和G:
![00c9a0de19c03f0f14ffc16d8e685e8d.png](https://i-blog.csdnimg.cn/blog_migrate/ac915cc0ce258238d3bc7ebdf0b4f80f.png)
5. 0-1损失函数:
0-1损失当预测值与实际值相等时,损失为0,预测值与实际值不相等时,损失为1。
![2899274def0b8897c7e0f6448e877aba.png](https://i-blog.csdnimg.cn/blog_migrate/bcdba46e110404e6fdddf62c538558e9.png)
感知机就是用的这种损失函数。但是由于相等这个条件太过严格,因此我们可以放宽条件,等价于
![6c3a4837722f8c686363a9da32f55d7a.png](https://i-blog.csdnimg.cn/blog_migrate/9b448ca3be7ef36e084dff7191387748.png)
6. Hinge损失函数
Hinge Loss 是机器学习领域中的一种损失函数,可用于“最大间隔(max-margin)”分类,其最著名的应用是作为SVM的目标函数。 在二分类情况下,公式如下:
![1bca82cdda622e21973788aa49fe7a84.png](https://i-blog.csdnimg.cn/blog_migrate/5af9d1426afe303d1e0f9588c1b9e3a3.png)
其中,y是预测值(-1到1之间),t为目标值(1或 -1)。其含义为,y的值在 -1到1之间即可,并不鼓励 |y|>1,即让某个样本能够正确分类就可以了,不鼓励分类器过度自信,当样本与分割线的距离超过1时并不会有任何奖励。目的在于使分类器更专注于整体的分类误差
在实际应用中,一方面,预测值y并不总是属于[-1,1],也可能属于其他的取值范围;另一方面,很多时候我们希望训练的是两个元素之间的相似关系,而非样本的类别得分。所以下面的公式可能会更加常用:
![a4a02f7a62b694c87c8601cf71fcc0af.png](https://i-blog.csdnimg.cn/blog_migrate/9ae422ad9802cc6cb22646b06b7fb795.png)
其中,y是正确预测的得分,y′是错误预测的得分,两者的差值可用来表示两种预测结果的相似关系,margin是一个由自己指定的安全系数。我们希望正确预测的得分高于错误预测的得分,且高出一个边界值 margin,换句话说,y越高越好,y′ 越低越好,(y–y′)越大越好,(y′–y)越小越好,但二者得分之差最多为margin就足够了,差距更大并不会有任何奖励。这样设计的目的在于,对单个样本正确分类只要有margin的把握就足够了,更大的把握则不必要,过分注重单个样本的分类效果反而有可能使整体的分类效果变坏。分类器应该更加专注于整体的分类误差。一般而言margin取1
7. 交叉熵损失函数
交叉熵是一个信息论中的概念,它原来是用来估算平均编码长度的。给定两个概率分布p和q,通过q来表示p的交叉熵为
![34a99b01860cb56935b5774cc499ca39.png](https://i-blog.csdnimg.cn/blog_migrate/ad44612ef678cebb5cd7b9f6827b300e.png)
注意,交叉熵刻画的是两个概率分布之间的距离,或可以说它刻画的是通过概率分布q来表达概率分布p的困难程度,p代表正确答案,q代表的是预测值,交叉熵越小,两个概率的分布约接近
交叉熵经常和softmax一起使用,因为softmax分类器可以将输出结果转换为概率值,这样就把神经网络的输出也变成了一个概率分布,从而可以通过交叉熵来计算预测的概率分布和真实答案的概率分布之间的距离了
![f1f33cb3796e61bf930b37e111d5a64e.png](https://i-blog.csdnimg.cn/blog_migrate/ddbffac663ff74985d163f44c845ca49.png)
举个例子,假设有一个3分类问题,某个样例的正确答案是(1,0,0),这个模型经过softmax回归之后的预测答案是(0.5,0.4,0.1),那么预测和正确答案之间的交叉熵为
![27253252778e790dd0f6637362d2bc5b.png](https://i-blog.csdnimg.cn/blog_migrate/9bf3d8c157691ac56708efb9dcaa3678.png)
Softmax可以看作是广义的逻辑回归,因此我们在之前的逻辑回归中其实也用到了交叉熵函数。
在逻辑回归中,预测输出即 Sigmoid 函数的输出表征了当前样本标签为 1 的概率:
![69d2eb8b0394fd88dd1ce59243c1b4a3.png](https://i-blog.csdnimg.cn/blog_migrate/edb6e275f188461f232f2bc7b9a4dfe8.png)
很明显,当前样本标签为 0 的概率就可以表达成:
![d52cf5e1a3c5684f603ff7eac9393ace.png](https://i-blog.csdnimg.cn/blog_migrate/75a03cfe435164c5338fca703f69dde3.png)
如果我们从极大似然性的角度出发,把上面两种情况整合到一起:
![f9e5d109974471d321b3addb06e73d94.png](https://i-blog.csdnimg.cn/blog_migrate/82d5859b35b955491f4d5e80adf0832f.png)
上式和交叉熵原理是相同的p(x)是0-1的真实值的分布,q(x)是经过sigmold函数激活后概率分布,最终得到的结果是一样的。
我们从图形的角度,分析交叉熵函数。首先,还是写出单个样本的交叉熵损失函数
![aff80a49bf34ed699b3161e50b36d245.png](https://i-blog.csdnimg.cn/blog_migrate/75f93b7a85498e839d19f80b5bfb6ada.png)
我们知道,当 y = 1 时:
![e6d32ef546c5424723c37e06607201c4.png](https://i-blog.csdnimg.cn/blog_migrate/b017fd538bf329221acfb6df5ac8ffa1.png)
![d6ff1d25508427354e9ce9a30938757a.png](https://i-blog.csdnimg.cn/blog_migrate/f2356c19abf8c35c423137b73b8b9a81.png)
当 y = 0 时:
![32c9f6ec915a69015f3efd78c3343f25.png](https://i-blog.csdnimg.cn/blog_migrate/e6b3a28a624006bc0c1b24134f4f1f73.png)
![ff9b7221f111301656c9524db9fdf394.png](https://i-blog.csdnimg.cn/blog_migrate/3461713a5ac83a4eba8ef3ea672851c5.png)