文章目录

损失函数和风险函数

首先引入损失函数与风险函数的概念。损失函数度量模型一次预测的好坏,风险函数度量平均意义下模型预测的好坏。

监督学习问题是在假设空间$\Bbb F$中选取模型$f$作为决策函数,对于给定的输入$X$,有$f(X)$给出相应的输出$Y$,这个输出的预测值$f(X)$与真实值$Y$可能一致也可能不一致,用一个损失函数(loss function)或代价函数(cost function)来度量预测错误的程度。损失函数是$f(X)$和$Y$的非负实值函数,记作$L(Y,f(X))$。

损失函数值越小,模型就越好。由于模型的输入、输出$(X,Y)$是随机变量,遵循联合分布$P(X,Y)$,所以损失函数的期望是:$$R_{exp}(f)=E_p[L(Y,f(X))]=\int_{\Bbb x ×\Bbb y}L(y,f(x))dxdy$$

这是理论上模型$f(X)$关于联合分布$P(X,Y)$的平均意义下的损失,称为风险函数(risk function)或期望损失(expected loss)。

学习的目标就是选择期望风险最小的模型。由于联合分布$P(X,Y)$是未知的,$R_{exp}(f)$不能直接计算。实际上,如果知道联合分布$P(X,Y)$,可以从联合分布直接求出条件概率分布$P(X|Y)$,也就不需要学习了。这样一来,一方面根据期望风险最小学习模型要用到联合分布,另一方面联合分布又是未知的,所以监督学习就成为一个病态问题(ill-formed problem)。

给定一个训练数据集:$$T=\{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\}$$

模型$f(X)$关于训练数据集的平均损失称为经验风险(empirical risk)或经验损失(empirical loss),记作$R_{emp}$:$$R_{emp}(f)=\frac  1N\sum_{i=1}^NL(y_i,f(x_i))$$

期望风险$R_{exp}(f)$式模型关于联合分布的期望损失,经验风险$R_{emp}(f)$是模型关于训练样本集的平均损失。根据大数定律,当样本容量$N$趋于无穷时,经验风险$R_{emp}(f)$趋于期望风险$R_{exp}(f)$。所以一个很自然的想法是用经验风险估计期望风险。但是,由于现实训练样本数目有限,甚至很小,所以用经验风险估计期望风险常常并不理想,要对经验风险进行一定的矫正。这就关系到机器学习的两个基本策略:经验风险最小化和结构风险最小化。

经验风险最小化和结构风险最小化

在假设空间、损失函数以及训练数据集确定的情况下,经验风险函数式就可以确定$$R_{emp}(f)=\frac  1N\sum_{i=1}^NL(y_i,f(x_i))$$

经验风险最小化(empirical risk minimization,ERM)的策略认为,经验风险最小的模型是最优的模型。根据这一策略,按照经验风险最小化求最优模型。根据这一策略,按照经验风险最小化求最优模型就是求解最优化问题:$$\min_{f\in \Bbb F}\frac 1N\sum_{i=1}^NL(y_i,f(x_i))$$

其中,$\Bbb F$是假设空间。

当样本容量足够大时,经验风险最小化能保证有很好的学习效果,在现实中被广泛采用。比如极大似然估计就是经验最小化的一个例子。当模型是条件概率分布,损失函数是对数损失函数时,经验风险最小化就等价于极大似然估计。

但是,当样本容量很小时,经验风险最小化学习的效果就未必很好,会产生“过拟合”现象。

结构风险最小化是为了防止过拟合而提出来的策略。结构风险最小化等价于正则化(regularizer)。结构风险再经验风险上加上表示模型复杂度的正则化或罚项,在假设空间、损失函数以及训练数据集确定的情况下,结构风险的定义是:$$R_{emp}(f)=\frac  1N\sum_{i=1}^NL(y_i,f(x_i))+\lambda J(f)$$

其中$J(f)$为模型的复杂度,是定义在假设空间$\Bbb F$上的泛函。模型$f$越复杂,复杂度$J(f)$就越大;反之,模型$f$越简单,复杂度$J(f)$就越小。也就是说,复杂度表示了对复杂模型的惩罚。$\lambda \ge 0$是系数,用以权衡经验风险和模型复杂度。结构风险小需要经验风险与模型复杂度同时小。结构风险小的模型往往对训练数据以及未知测试数据都有较好的预测。

结构风险最小化的策略认为结构风险最小的模型时最优的模型。所以求最优模型,就是求解最优化问题:$$\min_{f\in \Bbb F}\frac 1N\sum_{i=1}^NL(y_i,f(x_i))+\lambda J(f)$$

这样,监督学习问题就变成了经验风险或结构风险函数的最优化问题。这是经验或结构风险函数是最优化的目标函数。

常见损失函数综述

回归常见的损失函数有:均方差(Mean Squared Error,MSE)、平均绝对误差(Mean Absolute Error Loss,MAE)、Huber Loss是一种将MSE与MAE结合起来,取两者优点的损失函数,也被称作Smooth Mean Absolute Error Loss 、分位数损失(Quantile Loss)损失函数。

分类常见的损失函数有:交叉熵损失(Cross Entropy Loss)、合页损失(Hinge Loss)、0/1损失函数、指数损失、对数损失/对数似然损失(Log-likelihood Loss)

回归常见的损失函数

均方差损失(Mean Squared Error Loss)

均方差(Mean Squared Error,MSE)损失是机器学习、深度学习回归任务中最常用的一种损失函数,也称为 L2 Loss。其基本形式如下:$$J_{MSE}=\frac 1N\sum_{i=1}^N(y_i-\hat y_i)^2$$

背后的假设

实际上在一定的假设下,我们可以使用最大化似然得到均方差损失的形式。假设模型预测与真实值之间的误差服从标准高斯分布$(\mu=0,\sigma=1)$,则定一个$x_i$,模型就输出真实值$y_i$的概率为:$$p(y_i|x_i)=\frac 1{\sqrt{2\pi}}e^{-\frac{(y_i-\hat y_i)^2}{2}}$$

进一步我们假设数据集中$N$个样本点之间相互独立,则给定所有$x$输出所有真实值$y$的概率,即似然(Likelihood)为所有$p(y_i|x_i)$的累乘:$$L(x,y)=\prod_{i=1}^N\frac 1{\sqrt{2\pi}}e^{-\frac{(y_i-\hat y_i)^2}{2}}$$

通常为了计算方便,我们通常最大化对数似然(Log-Likelihood):$$LL(x,y)=log(L(x,y))=-\frac N2log2\pi-\frac 12\sum_{i=1}^N(y_i-\hat y_i)^2$$

去掉与$\hat y_i$无关的第一项,然后转化为最小化负对数似然(Negative Log-Likelihood):$$NLL(x,y)=\frac 12\sum_{i=1}^N(y_i-\hat y_i)^2$$

可以看到这个实际上就是均方差损失的形式。也就是说在模型输出与真实值的误差服从高斯分布的假设下,最小化均方差损失函数与极大似然估计本质上是一致的,因此在这个假设能被满足的场景中(比如回归),均方差损失是一个很好的损失函数选择;当这个假设没能被满足的场景中(比如分类),均方差损失不是一个好的选择。

平均绝对误差损失(Mean Absolute Error Loss)

平均绝对误差(Mean Absolute Error Loss,MAE)是另一类常用的损失函数,也称为L1 Loss。其基本形式如下:$$J_{MAE}=\frac 1N\sum_{i=N}^N|y_i-\hat y_i|$$

背后的假设

同样的我们可以在一定的假设下通过最大似然得到MAE损失的形式,假设模型预测与真实值之间服从拉普拉斯分布(Laplace distribution)$(\mu=0,b=1)$。则给定一个$x_i$模型输出真实值$y_i$的概率为:$$p(y_i|x_i)=\frac 12e^{-|y_i-\hat y_i|}$$

与上面推导 MSE 时类似,我们可以得到的负对数似然(Negative Log-Likelihood)实际上就是MAE 损失的形式:$$L(x,y)=\prod_{i=1}^N\frac 12e^{-|y_i-\hat y_i|}$$$$LL(x,y)=log(L(x,y))=-\frac N2-\sum_{i=1}^N|y_i-\hat y_i|$$$$NLL(x,y)=\sum_{i=1}^N|y_i-\hat y_i|$$

MAE与MSE的区别

MSE比MAE能够更快收敛:当使用梯度下降算法时,MSE损失的梯度为,而MAE损失的梯度为正负1。所以。MSE的梯度会随着误差大小发生变化,而MAE的梯度一直保持为1,这不利于模型的训练。
MAE对异常点更加鲁棒:从损失函数上看,MSE对误差平方化,使得异常点的误差过大;从两个损失函数的假设上看,MSE假设了误差服从高斯分布,MAE假设了误差服从拉普拉斯分布,拉普拉斯分布本身对于异常点更加鲁棒。

分类常见的损失函数

Log对数损失函数

对数损失, 即对数似然损失(Log-likelihood Loss), 也称逻辑斯谛回归损失(Logistic Loss)或交叉熵损失(cross-entropy Loss), 是在概率估计上定义的.它常用于(multi-nominal, 多项)逻辑斯谛回归和神经网络,以及一些期望极大算法的变体. 可用于评估分类器的概率输出。

对数损失假设样本服从伯努利分布(0-1分布)。伯努利分布是一个离散型机率分布。试验成功,随机变量取值为1;试验失败,随机变量取值为0。成功几率为$p$,失败几率为$q =1-p$,$N$次试验后,成功期望为$N*p$,方差为$N*p*(1-p) $,所以伯努利分布又称两点分布。

假设观察到的数据为$Y_1,Y_2,\cdots,Y_N$,极大似然的目标:$$maxP(Y_1,Y_2,\cdots,Y_N)$$

联合分布难计算,我们因此引入一个假设,独立同分布(i.i.d.),目标公式改变为:$$max\prod_i^NP(Y_i)$$

将函数取对数,函数的极值点不会改变,公式变为:$$max\sum_i^NlogP(Y_i)$$

伯努利分布下随机变量的最大似然计算方法,$P(Y=1)=p$,$P(Y=0)=1-p$:$$P(Y)=p^Y(1-p)^{1-Y}$$

因此:$$\max_p\prod_i^NP(Y_i)=\max_p\sum_i^N[Y_ilogp+(1-Y_i)log(1-p)]$$

综上所述,当$Y_i$只能取0或1时,对数损失函数是:$$L(Y,P(Y|X))=-log(P(Y|X))=-\frac 1N\sum_{i=1}^N(y_ilog\hat y_i+(1-y_i)log(1-\hat y_i))$$

此时,$y_i$为输入实例 $x_i$的真实类别, $\hat y_i$ 为预测输入实例 $x_i$ 属于类别 1 的概率. 对所有样本的对数损失表示对每个样本的对数损失的平均值, 对于完美的分类器, 对数损失为 0 .

关于log损失函数的应用可在http://blog.halashuo.cn/475 逻辑斯蒂推导一文中查看。

多分类下的交叉熵损失函数

在多分类的任务中,交叉熵损失函数的推导思路和二分类是一样的,变化的地方是真实值$y_i$是一个One-hot 向量,同时模型输出的压缩由原来的Sigmoid函数换成Softmax函数。Softmax 函数将每个维度的输出范围都限定在$(0,1)$之间,同时所有维度的输出和为1,用于表示一个概率分布$$p(y_i|x_i)=\prod_{k=1}^K(\hat y_i^k)^{y_i^k}$$

其中,$k \in K$表示$K$个类别中的一类,同样的假设数据点之间独立同分布,可得到负对数似然为:$$L(x,y)=-\sum_{i=1}^N\sum_{j=1}^Ky_i^k\log(\hat y_i^k)$$

由于$y_i$是一个 one-hot 向量,除了目标类为 1 之外其他类别上的输出都为 0,因此上式也可以写为$$L(x,y)=-\sum_{i=1}^Ny_i^{c_i}\log(\hat y_i^{c_i})$$

其中$c_i$是样本$x_i$的目标类。通常这个应用于多分类的交叉熵损失函数也被称为 Softmax Loss 或者 Categorical Cross Entropy Loss。

对于Logistics loss,我们说的是二分类问题,$\hat y$是一个数;对于Cross Entropy Loss,我们说的是多分类问题,$\hat y$是一个$k$维的向量。当$k=2$时,Logistics loss与Cross Entropy Loss一致。

交叉熵适合分类的原因

分类中为什么不用均方差损失?上文在介绍均方差损失的时候讲到实际上均方差损失假设了误差服从高斯分布,在分类任务下这个假设没办法被满足,因此效果会很差。为什么是交叉熵损失呢?有两个角度可以解释这个事情,一个角度从最大似然的角度,也就是我们上面的推导;另一个角度是可以用信息论来解释交叉熵损失:

假设对于样本$x_i$存在一个最优分布$y_i^*$真实地表明了这个样本属于各个类别的概率,那么我们希望模型的输出$\hat y_i$尽可能地逼近这个最优分布,在信息论中,我们可以使用 KL 散度 Kullback–Leibler Divergence 来衡量两个分布的相似性。给定分布$p$和分布$q$, 两者的 KL 散度公式如下$$KL(p,q)=\sum_{k=1}^Kp^k\log(p^k)-\sum_{k=1}^Kp^k\log(q^k)$$

其中第一项为分布 $p$ 的信息熵,第二项为分布 $p$ 和$q$的交叉熵。将最优分布 $y_i^*$ 和输出分布$\hat y_i$带入$p$ 和$q$得到$$KL(y_i^*,\hat y_i)=\sum_{k=1}^Ky_i^{*k}\log(y_i^{*k})-\sum_{k=1}^Ky_i^{*k}\log(\hat y_i^{k})$$

由于我们希望两个分布尽量相近,因此我们最小化 KL 散度。同时由于上式第一项信息熵仅与最优分布本身相关,因此我们在最小化的过程中可以忽略掉,变成最小化$$-\sum_{k=1}^Ky_i^{*k}\log(\hat y_i^{k})$$

我们并不知道最优分布 $y_i^*$ ,但训练数据里面的目标值 $y_i$可以看做是 $y_i^*$ 的一个近似分布$$-\sum_{k=1}^Ky_i^{k}\log(\hat y_i^{k})$$

这个是针对单个训练样本的损失函数,如果考虑整个数据集,则$$J_{KL}=-\sum_{i=1}^N\sum_{k=1}^Ky_i^k\log(\hat y_i^k)=-\sum_{i=1}^Ny_i^{c_i}\log(\hat y_i^{c_i})$$

可以看到通过最小化交叉熵的角度推导出来的结果和使用最大化似然得到的结果是一致的

合页损失(Hinge Loss)

合页损失(Hinge Loss)是另外一种二分类损失函数,适用于 maximum-margin 的分类,支持向量机Support Vector Machine (SVM)模型的损失函数本质上就是Hinge Loss + L2正则化。合页损失的公式如下:$$J_{hinge}=\sum_{i=1}^N\max(0,1-sgn(y_i)\hat y_i)$$

下图是$y$为正类,即$sgn(y)=1$时,不同输出的合页损失示意图:

可以看到当$y$为正类时,模型输出负值会有较大的惩罚,当模型输出为正值且在$(0,1)$区间时还会有一个较小的惩罚。即合页损失不仅惩罚预测错的,并且对于预测对了但是置信度不高的也会给一个惩罚,只有置信度高的才会有零损失。使用合页损失直觉上理解是要找到一个决策边界,使得所有数据点被这个边界正确地、高置信地被分类