损失函数

损失函数用来评价模型的预测值和真实值不一样的程度,损失函数越好,通常模型的性能越好。不同的模型用的损失函数一般也不一样。

损失函数分为经验风险损失函数结构风险损失函数
经验风险损失函数指预测结果和实际结果的差别,
结构风险损失函数是指经验风险损失函数加上正则项。

0-1损失函数(zero-one loss)

0-1损失是指预测值和目标值不相等为1, 否则为0:
特点:
(1)0-1损失函数直接对应分类判断错误的个数,但是它是一个非凸函数,不太适用.
(2)感知机就是用的这种损失函数。但是相等这个条件太过严格,因此可以放宽条件,即满足距离小于T时认为相等

绝对值损失函数
绝对值损失函数是计算预测值与目标值的差的绝对值
在这里插入图片描述

log对数损失函数

log对数损失函数的标准形式如下
在这里插入图片描述 特点:
(1) log对数损失函数能非常好的表征概率分布,在很多场景尤其是多分类,如果需要知道结果属于每个类别的置信度,那它非常适合。
(2)健壮性不强,相比于hinge loss对噪声更敏感。 (3)逻辑回归的损失函数就是log对数损失函数。

平方损失函数

在这里插入图片描述

特点: (1)经常应用与回归问题

指数损失函数(exponential loss)

指数损失函数的标准形式如下:
在这里插入图片描述

特点: (1)对离群点、噪声非常敏感。经常用在AdaBoost算法中。

Hinge 损失函数

Hinge损失函数标准形式如下:

[公式] 特点:
(1)hinge损失函数表示如果被分类正确,损失为0,否则损失就为 [公式] 。SVM就是使用这个损失函数。
(2)一般的f(x)是预测值,在-1到1之间,y是目标值(-1或1)。其含义是,f(x)的值在-1和+1之间就可以了,并不鼓励|f(x)|>1,即并不鼓励分类器过度自信,让某个正确分类的样本距离分割线超过1并不会有任何奖励,从而使分类器可以更专注于整体的误差。
(3) 健壮性相对较高,对异常点、噪声不敏感,但它没太好的概率解释。

感知损失(perceptron loss)函数

感知损失函数的标准形式如下:
在这里插入图片描述

特点: (1)是Hinge损失函数的一个变种,Hinge loss对判定边界附近的点(正确端)惩罚力度很高。而perceptron
loss只要样本的判定类别正确的话,它就满意,不管其判定边界的距离。它比Hinge loss简单,因为不是max-margin
boundary,所以模型的泛化能力没 hinge loss强。

交叉熵损失函数 (Cross-entropy loss function)

交叉熵损失函数的标准形式如下:
在这里插入图片描述

注意公式中x表示样本, y 表示实际的标签,a表示预测的输出,n表示样本总数量。

特点: (1)本质上也是一种对数似然函数,可用于二分类和多分类任务中。
二分类问题中的loss函数(输入数据是softmax或者sigmoid函数的输出):
在这里插入图片描述
多分类问题中的loss函数(输入数据是softmax或者sigmoid函数的输出):
在这里插入图片描述
(2)当使用sigmoid作为激活函数的时候,常用交叉熵损失函数而不用均方误差损失函数,因为它可以完美解决平方损失函数权重更新过慢的问题,具有“误差大的时候,权重更新快;误差小的时候,权重更新慢”的良好性质。

在这里插入图片描述

交叉熵函数与最大似然函数的联系和区别?

区别:交叉熵函数使用来描述模型预测值和真实值的差距大小,越大代表越不相近;
似然函数的本质就是衡量在某个参数下,整体的估计和真实的情况一样的概率,越大代表越相近。

联系:交叉熵函数可以由最大似然函数在伯努利分布的条件下推导出来,或者说最小化交叉熵函数的本质就是对数似然函数的最大化。

怎么推导的呢?我们具体来看一下。

设一个随机变量 y满足伯努利分布, p(y=1)=p, p(y=0)=1-p 则 x的概率密度函数为:
p(x)=py(1-p)(1-y)

因为我们只有一组采样数据D ,我们可以统计得到y和1-y的值,但是 p的概率是未知的,接下来我们就用极大似然估计的方法来估计这个p值。
对于采样数据D,其对数似然函数为:
在这里插入图片描述
可以看到上式和交叉熵函数的形式几乎相同,极大似然估计就是要求这个式子的最大值。而由于上面函数的值总是小于0,一般像神经网络等对于损失函数会用最小化的方法进行优化,所以一般会在前面加一个负号,得到交叉熵函数(或交叉熵损失函数):
在这里插入图片描述

在用sigmoid作为激活函数的时候,为什么要用交叉熵损失函数,而不用均方误差损失函数?

其实这个问题求个导,分析一下两个误差函数的参数更新过程就会发现原因了。

对于均方误差损失函数,常常定义为:
在这里插入图片描述

其中y是我们期望的输出,a为神经元的实际输出。在训练神经网络的时候我们使用梯度下降的方法来更新w
和b,在这里插入图片描述
因为sigmoid的性质,导致导数在取大部分值时会很小更新非常慢。

那么为什么交叉熵损失函数就会比较好了呢?同样的对于交叉熵损失函数,计算一下参数更新的梯度公式就会发现原因。交叉熵损失函数一般定义为:
在这里插入图片描述
在这里插入图片描述

可以看到参数更新公式中没有导数这一项,权重的更新受 a-y
影响,受到误差的影响,所以当误差大的时候,权重更新快;当误差小的时候,权重更新慢。这是一个很好的性质。

所以当使用sigmoid作为激活函数的时候,常用交叉熵损失函数而不用均方误差损失函数。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值