作者 | 梁唐
出品 | 公众号:Coder梁(ID:Coder_LT)
大家好,我是梁唐。
今天我们来聊聊损失函数和风险函数。
损失函数可以说是机器学习当中的核心概念了,损失函数的英文叫做loss function
,这里的损失其实可以理解成误差的意思。一个模型的误差越小,那么自然说明模型的结果越逼近真实值,也就是效果越好。
损失函数大家都熟悉,那么这个风险函数又是什么呢?根据李航老师在《统计学习原理》一书当中给出的定义,损失函数衡量的是模型一次预测的好坏,而风险函数衡量的是平均意义下模型预测的好坏。
损失函数
在监督学习当中,我们可以把模型看成是一个函数f,对于给定的输入X,由f(X)给出对应的输出hat{Y}=f(X) 。这个输出值 hat{Y}和真实值Y之间必然存在一定的误差,我们用一个损失函数(loss function)或代价函数(cost function)来衡量误差的大小。
损失函数是hat{Y} 和Y的非负实函数,记作L(Y, hat{Y}) 。
我们常用的损失函数有如下几种:
- 0-1 损失函数
- 平方损失函数
- 绝对损失函数
- 对数损失函数或对数似然损失函数
经验风险
不论是哪一种损失函数,都满足损失函数的值越小,模型的效果越好。
我们假设f(X)的风险定义成损失函数的期望值:
这个就是理论上模型f(X)关于联合分布P(X, Y) 的平均意义上的损失,称为风险函数(risk function)或期望损失(expected loss)。
我们模型学习的目标就是选取期望风险最小的模型,但由于联合分布P(X, Y)是未知的,我们无法直接计算这个风险函数。
所以通常我们会对训练集上的损失函数平均值来计算一个近似值,这个值就被成为经验风险或经验损失:
这个式子是什么?其实就是我们模型在训练集上的损失函数。绕了一圈其实并没有走远,还在原地。所以经验风险最小化,其实就是训练集上的平均损失函数最小化,也就是说追求模型在训练集上的表现尽量好。
结构风险
很明显,使用经验风险最小化是有问题的,因为过分追求模型在训练数据上的表现,可能会导致模型陷入过拟合,使得模型没有能力在测试集中表现出色。
相对于经验风险最小化,与之对应的概念就是结构风险最小化。这是为了防止模型陷入过拟合而提出的策略,它等价于正则化。其实就是在经验风险的基础上加上表示模型复杂度的正则化项:
这里的J(f)为衡量模型复杂度的函数,模型越复杂,那么复杂度J(f)的值也就越大。复杂度表示了对复杂模型的惩罚, lambda ge 0表示惩罚项的系数,用来权衡经验风险和模型复杂度。
和MLE以及MAP的联系
在上一篇文章当中我们分析了最大似然估计和最大后验概率之间的联系,我们发现了这两者的式子非常相似:
其实就只是差了对参数theta 求先验这个部分,如果我们代入样本,把式子展开会得到:
我们再来看MAP的式子展开:
神奇的是,如果我们假设参数theta 满足拉普拉斯分布,那么log P(theta) 简化之后的结果恰好为frac 1 b |theta - mu| ,由于mu 是常数,所以它完全可以看成是theta 的L1正则项。
同样,如果我们假设theta 满足高斯分布,那么log P(theta) 化简之后的结果恰好是theta 的L2正则项。也就是说我们给模型加上的正则项,本质上是一种对模型参数服从某种先验分布的假设。当然,我们也可以假设模型的参数服从其他的分布,那么最后得出的正则项也会不同。
无论是把正则项看成是对模型复杂度的惩罚也好,看成是参数的先验假设也好,本质上是一回事,只不过看待的角度不同。不同的理解方式,不同的推导过程,最后居然会得到几乎一样的结果,不得不说实在是太神奇了。