详解机器学习中的损失函数

详解机器学习中的损失函数

0.687 字数 2217 阅读 757

ClassContent
layoutBlog
title详解机器学习中的损失函数
categoriesBlog
description机器学习中常见的损失函数以及它们的特点和适用场景
keywords机器学习 损失函数 风险函数

1. 前言

我们知道机器学习的三要素是:方法= 模型+策略+算法, 如何从假设空间中选择最优模型,这涉及到我们需要用什么样的准则进行学习,这就是三要素中的"策略"问题。

在假设空间中选择模型y(x_n,w)作为决策函数,给定输入x_n,由模型得到输出y(x_n,w),而预测的y(x_n,w)与真实值t_n之间可能不一致,如图1-1 可以看出预测值y(x_n,w)与真实值t_n存在不一致情况,他们之间的差的绝对值为|y(x_n,w)-t_n|为绿色线部分, 而损失函数是定义在单个样本上的,算的是一个样本的误差。因此选用损失函数来度量预测误差。

1-1 预测值与真实值的误差

损失函数(loss function)是用来度量模型的预测值与真实值的不一致程度,是一个非负实值函数,损失函数越小,预测正确程度越高,表示为:L(y_i,f(x_i))

  • 损失函数是经验风险函数的核心部分,也是结构风险函数重要组成部分。模型的结构风险函数包括了经验风险项和正则项,可以表示为:R_{srm}(f)= \frac{1}{N}\sum_{i=1}^NL(y_i,f(x_i))+\lambda J (f)
    这个公式为结构风险函数,其中,包括前一部分的经验风险项以及后一部分的正则化项,正则化项用于控制模型复杂度,\lambda则是用于权衡经验风险和模型复杂度之间的关系.
    所以,通过最小化结构风险的策略找到最优模型,求解最优模型就是求解如下最优化问题:min_{f\in\digamma}\frac{1}{N}\sum_{i=1}^NL(y_i,f(x_i))+\lambda J(f)

  • 当然,除了让结构风险最小化寻找最优模型外,还可以直接最小化经验风险,即
    min_{f\in\digamma}\frac{1}{N}\sum_{i=1}^NL(y_i,f(x_i))
    在样本足够的情况下,经验风险最小化可以达到很好的学习效果,但是样本容量有限时,容易产生过拟合现象,所以在才有上面结构风险最小化求最优模型的策略.


2. 区别损失函数\ 风险函数\ 代价函数\ 目标函数
  • 损失函数:衡量单个样本预测值与真实值的误差【不赘述】.
  • 代价函数:定义在训练集上,是模型关于训练集的平均损失,它也叫经验风险,表示为:\frac{1}{N}\sum_{i=1}^NL(y_i,f(x_i))
  • 风险函数:是指损失函数的期望,又叫期望损失,由于输入X和输出Y是随机变量,那么可求得联合分布P(X,Y),所以可以表示为:R_{exp}(f)=E_p[L(Y,f(X))] = \int_{X,Y}L(y,f(x))p(x,y)dxdy
  • 目标函数:是一个更为广的概念,比如最小化结构风险求最优模型时,结构化风险函数就是目标函数,而最小化经验风险求最优模型时,经验风险函数就是目标函数,简单地讲,目标函数就是需要优化的函数。

Note:

  • a.通常,我们没有细分损失函数和代价函数,经常将两个概念混用。
  • b.由于P(Y,X)未知,所以风险函数无法计算,经验风险R_{emp}(f)是模型关于训练集的平均损失,根据大数定律,当样本容量N趋于无穷时,经验风险R_{emp}(f)趋于风险函数R_{exp}(f),这也说明了训练集容量越大,选择的最优模型越逼近真实模型。

3. 常见的损失函数
  • (1) 0-1损失函数(Zero-one Loss)
    L(y_i,f(x_i))=\left\{ \begin{aligned} 1 \text{, $y_i \neq f(x_i)$}\\ 0 \text{, $y_i = f(x_i)$} \end{aligned} \right.
    0-1 损失函数简单易理解,用于分类,如果预测的标签和数据标注的标签一致,那么就为0,否则就为1,当然, 如果认为相等的要求太严苛,可以放宽要求,用于回归中,如果他们的绝对值小于某个阈值,即为0,否则为1,表示为
    L(y_i,f(x_i))=\left\{ \begin{aligned} 1 \text{, $|y_i-f(x_i)| \geq t$}\\ 0 \text{,$|y_i-f(x_i)| < t$} \end{aligned} \right.

  • (2) 平方损失函数(Square Loss)
    L(y_i,f(x_i))=(y_i-f(x_i))^2
    由于其计算的优越性,所以常常用于回归中, 权重由可以直接初始化,再通过梯度下降不断更新。

  • 举例说明,一个线性回归,假设输入有n个特征,为了方便表示用n+1表示输入向量为x=[0,x_1,x_2,...,x_n]^T,模型参数为w=[w_0,w_1,...,w_n]^T,那么线性回归的模型表示为f(x)=w_0+w_1x_1+,...,w_nx_n=w^Tx
    那么它的代价函数可以表示为L(w,x)=\frac{1}{2N}\sum_{i=1}^N(y^{(i)}-w^Tx^{(i)})+\frac{\lambda}{2}||w||^2
    注意:在这里都使用\frac{1}{2}的目的是方便在后续求导中计算,\lambda是正则项前面的参数。
    w_i求导:
    \frac{dL(w,x)}{dw_i} = \frac{1}{N}\sum_{i=1}^N(y_i-w^Tx)x_i+\lambda w_i
    由于这是目标函数是一个有最小值的凸函数,所以是沿着梯度的反方向进行更新,表示为w_i = w_i -\eta\frac{dL(w,x)}{dw_i}
    注:权重矩阵w最开始可以随机初始,再不断更新.

  • (3) 绝对损失函数(Absolute loss)
    L(y_i,f(x_i))=|(y_i-f(x_i))|
    绝对值损失函数也经常用于回归中,而用于分类就等价于0-1损失函数,在sklearn中有Huber损失函数,它是平方损失函数和绝对值损失函数的结合,详细介绍请参考 [F2001],比较简单【不再赘述】。

  • (4) 对数损失函数(Log Loss or Cross-entropy Loss)
    L(y_i,f(x_i))=-logP(y_i|x_i)
    对数损失函数适用于逻辑回归,那什么是逻辑回归呢?
    举例说明:其实就是在线性回归的基础上增加了逻辑函数h(x)= \frac{1}{1+e^{-x}},那么对于在线性回归基础上加上逻辑函数,则逻辑回归模型可以表示为p(1|w,x^{(i)})=h(f(x^{(i)}))=\frac{1}{1+e^{-f(x^{(i)})}}=\frac{1}{1+e^{-w^Tx^{(i)}}}
    即上式表示,给定输入,该实例为类别1的概率,由于逻辑回归是二分类,所以为类别0的概率为p(0|w,x^{(i)})=1-p(1|w,x^{(i)})
    而在逻辑回归中,由于提供了模型的概率估计,所以使用的损失函数为对数损失函数,表示如下:L(y^{(i)},f(x^{(i)}))=\left\{ \begin{aligned} -logp(1|w,x^{(i)}) \text{, $y^{(i)}=1$}\\ -log(1-p(w|x^{(i)})) \text{, $y^{(i)}=0$} \end{aligned} \right.
    那么最终的代价函数可以表示为
    L(w,x)=-\frac{1}{N}\sum_{i=1}^N \lbrace y^{(i)}logp(y^{(i)}=1|w,x^{(i)})+(1-y^{(i)})logp(y^{(i)}=0|w,x^{(i)})\rbrace
    接下来就从另外一个角度说明,已知逻辑回归模型表示为:p(1|w,x^{(i)})=h(f(x^{(i)}))=\frac{1}{1+e^{-f(x^{(i)})}}=\frac{1}{1+e^{-w^Tx^{(i)}}}
    在模型的数学形式确定后,剩下的就是如何去求解模型中的参数w,而在已知模型和一定样本的情况下,估计模型的参数,在统计学中常用的是极大似然估计方法。即找到一组参数w,使得在这组参数下,样本数据的似然度(概率)最大.
    对于逻辑回归模型,假定概率分布服从伯努利分布【0-1分布】,其概率质量函数PMF为:f(x)=p^x(1-p)^{(1-x)},其中x只能取0或者1,那么似然函数可以表示:为L(w)=\prod_{i=1}^Np(y^{(i)}=1|w,x^{(i)})^{y^{(i)}}p(y^{(i)}=0|w,x^{(i)})^{1-y^{(i)}}
    那么对上式取对数,得到对数似然函数为:
    logL(w)=\sum_{i=1}^Ny^{(i)}logp(y^{(i)}=1|w,x^{(i)})+(1-y^{(i)})logp(y^{(i)}=0|w,x^{(i)})
    则全体样本的代价函数为:
    logL(w)=-\sum_{i=1}^N\lbrace y^{(i)}logp(y^{(i)}=1|w,x^{(i)})+(1-y^{(i)})logp(y^{(i)}=0|w,x^{(i)})\rbrace
    由此可以看出对数损失函数与极大似然估计的对数似然函数本质上是等价的.

  • (5) 绞链损失函数(Hinge Loss)
    L(m_i)=max(0,1-m_i(w))
    铰链损失函数常用于支持向量机(SVM)中,它名字来源于它的损失函数图像为一个折线图像,如果模型分类正确,损失为0,否则损失为1-m_i(w),在SVM损失函数表示为:L(y^{(i)},x^{(i)})=max(0,1-y^{(i)}f(x^{(i)})),
    举例说明:在SVM中,最终的支持向量机的分类模型是能最大化分类间隔,又减少错误分类的样本数目,意味着一个好的支持向量机的模型,需要满足以上两个条件:1、最大化分类间隔,2、错误分类的样本数目。如图说明,f(x^{(i)})是预测值,且预测值在-1到1之间,y^{(i)}为目标值取值为-1或者1,如果分类正确,L(y^{(i)},x^{(i)})=0,如果分类错误,L(y^{(i)},x^{(i)})=1-y^{(i)}f(x^{(i)})\xi是引入的松弛变量,错误分类的样本数目,就回到了损失函数的范畴。

    SVM分类
    综上所述推导SVM的代价函数,最初的SVM优化函数如下:
    \begin{eqnarray} && {argmin}_{(w,\xi_i)}\quad \frac{1}{2} \Vert w \Vert^2+C\sum_i\xi_i\\ &&s.t.\quad \forall y^{(i)}f(x^{(i)}) \geq 0 \\ && \quad\quad\quad \xi_i \geq 0 \end{eqnarray}
    将约束条件变形为\xi_i>1-y^{(i)}f(x^{(i)})
    最终SVM的代价函数可以表示为:L(w,x^{(i)})=C \sum_{i=0}^{N}max(0,1-y^{(i)}f(x^{(i)}))+\frac{1}{2} \Vert w \Vert^2

  • (6) 指数损失函数(Exponential loss)
    L(y_i,f(x_i)) = exp(-y_if(x_i))指数损失函数,主要应用于 Boosting 算法中
    在Adaboost 算法中,经过m次迭代后,可以得到 f_m(x^{(i)}),表示为:f_m(x^{(i)})=f_{m−1}(x^{(i)})+α_mG_m(x^{(i)})
    Adaboost 每次迭代时的目的都是找到最小化下列式子的参数αG
    argmin_{(α,G)} \quad \sum_{i=1}^{N}exp(-y^i(f_{m−1}(x^{(i)})+αG(x^{(i)})))
    易知,Adaboost应用了指数损失函数L(y^i,f(x^i))=exp(-y^if(x^i))

总结

看了很多资料和网页,结合自己的理解写出了这一篇博客,以前只知道有这些损失函数,并没有探讨过损失函数的适用性以及该如何去推导这些公式。继续加油O(∩_∩)O~~
如有问题联系dengwenjun818@gmail.com

8人点赞
拥有39钻 (约6.90元)
关注
"如果喜欢,请赞赏哟"
赞赏
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值