通俗来讲Loss函数是一种关于fitness的测度(关于数据是否合适模型的匹配度),或者是对于预测是否准确的一种判断,如果预测和判断没有错误,则损失函数的值为0;如果有错误则会进行一些“惩罚”措施,也可以称之为代价(风险)函数。借助文献中的原话:“the loss function measures “how bad” the mistake is. The loss can be interpreted as a penalty or error measure.”回到最开始的机器学习的问题上,对于机器学习一般会包含以下五个部分:
- 假设空间:如在线性回归、逻辑回归以及SVM中的参数
- 测度函数:最大似然或最小损失
- 是否有偏和方差的权衡:正则项或MAP最大后验估计
- 在假设空间中找到一个好的假设模型:优化模型、全局凸模型等
- 验证模型:在测试数据上实现预测,进行交叉验证 通常我们定义Loss function如下:
图1 优化目标:损失函数 正则项
通常我们的误差函数包含以下五种:
- 黄金标准损失即 0-1 loss(在理想状态下的判别:下图中蓝色线)
- 铰链函数即 hinge loss(用于SVM中soft margin情况:下图中红色线)
- 对数函数即 log loss(用于逻辑回归、交叉熵损失:下图中黄色线)
- 平方损失即 square loss(用于线性回归:下图中黑色线)
- 指数损失即 exponential loss(用于boost情况:下图中绿色线)
下面我们来一一解释这些loss函数:
1. 0-1 Loss作为最为基本的分类器的评价函数,对于错误分类结果的一种计数,比较好理解:
这里需要引用参考文献的原文说明一点:
“The cost function induced by the 0-1-loss is the average misclassification error and the cost function induced by the squared loss is the mean squared error (MSE).
However, there are cost functions which cannot be decomposed using a loss function. For example, the area under the curve (AUC). In other words, all loss functions generate a cost function, but not all cost functions must be based on a loss function.“
cost函数可以归结为0-1Loss平均误分类的误差或由square损失的均方误差(最小二乘法推演);可能在一些问题上有所区分。
2. Hinge Loss作为SVM推导的损失函数去逼近0-1 Loss;很明显可以看出0-1是理想情况下的损失函数显式表达,SVM在感知机(Perceptron)的基础上,通过最大化分类边界(max margin)去进行分类;
然而对于不可分的情况下,引入soft margin,加入松弛,允许分类数据存在异常点:
所以SVM参数中,最重要的就是求解C和hinge loss,不同的情况下soft margin是不一样的,有待优化。所以最终的hinge loss的形式才会变成:
这样的近似对于优化来讲,就可以用一些凸优化的方法,第一项正则项为凸,hinge loss也是凸函数:
3. Log Loss看形式我们基本可以猜测是从概率的方向得到的;看过经典斯坦福的ML课程的同学都知道,先是讲 linear regression 然后引出最小二乘误差,之后概率角度高斯分布解释最小误差。然后讲逻辑回归,使用MLE来引出优化目标是使得所见到的训练数据出现概率最大。
如果我们在逻辑回归模型中,利用逻辑回归sigma函数,带入判别参数,求出最大似然估计式,其对应的就是我们的最小化的交叉熵函数。关于交叉熵与KL divergence关系,读者可以自行查找资料验证。
4. Square Loss就是这里大家最为熟知的最小二乘法在线性回归中的推导,最小二乘法是线性回归的一种,OLS将问题转化为一个凸优化的问题,假设样本和噪声满足高斯分布,最后通过极大似然推导出最小二乘,将样本点到拟合最优的回归线的距离最小,即残差最小化。
5. Exponential Loss 指数损失可能会有些陌生,形式如下:
用在boosting机制中,本公众号的经典算法文章中有关于boosting的介绍。可以作为补充阅读。
其实简明来讲就是通过弱分类器投票进行强分类器的合成,优势有很多,比如,序列性迭代决策,分类函数线介于square和log,对于过拟合的情况不必担心,但是计算量会较大。在学习boosting的过程中,会发现通过弱分类器发现的错误的会被逐渐削弱,弱分类器在已有分类器分出的错误空间上不断切割(分类空间),如图:
上图中,关于迭代停止条件,因为弱分类器的定义就是分类判别概率小于0.5,就像一枚硬币一样。大家应该会比较疑惑,关于参数是怎么得到的,然后去更新每一个弱分类器的权重,下图会根据定理求出上边界
参数a表示分类误差率越小的基本分类器在最终分类器中的作用越大。参考文献【5】中,July在博文中推导了,作为加法模型的指数损失函数的原型:向前分步学习算法的损失函数证明为指数形式,下图中,在做相关公式推导的过程中,也是比较直接的通过已经在算法中设定好的指数形式loss函数,根据最小化函数目标,求导得出a的参数值。
当然,现实情景中的损失函数可以进行自定义,但是需要考虑数据本身和未来通过什么优化的方法去求解更为方便。而且在真正的优化函数中会涉及到正则项,对于特征筛选和防止过拟合问题也是十分关键。需要各位读者认真领会Loss函数和正则项的意义才能更好地设计出符合实际的优化目标函数。
参考文献:
【1】https://www.youtube.com/watch?v=BsqqMVjzxCY
【2】https://github.com/JohnLangford/vowpal_wabbit/wiki/Loss-functions
【3】http://image.diku.dk/shark/sphinx_pages/build/html/rest_sources/tutorials/concepts/library_design/losses.html
【4】http://www.cs.cmu.edu/~yandongl/loss.html
【5】http://blog.csdn.net/v_july_v/article/details/40718799