IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 机器学习中各种损失函数对比总结 -> 正文阅读

[人工智能]机器学习中各种损失函数对比总结


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

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

一、分类问题

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

0-1损失是指预测值和目标值不相等为1, 否则为0:
L ( Y , f ( X ) ) = { 1 , Y ≠ f ( X ) 0 , Y = f ( X ) L(Y, f(X))=\left\{\begin{array}{l} 1, Y \neq f(X) \\ 0, Y=f(X) \end{array}\right. L(Y,f(X))={1,Y?=f(X)0,Y=f(X)?
特点:

  1. 0-1损失函数直接对应分类判断错误的个数,但是它是一个非凸函数,不太适用.
  2. 感知机就是用的这种损失函数。但是相等这个条件太过严格,因此可以放宽条件,即满足 ∣ Y ? f ( x ) ∣ < T |Y-f(x)|<T Y?f(x)<T时认为相等,
    L ( Y , f ( X ) ) = { 1 , ∣ Y ? f ( X ) ∣ ≥ T 0 , ∣ Y = f ( X ) ∣ < T L(Y, f(X))=\left\{\begin{array}{l} 1,|Y-f(X)| \geq T \\ 0,|Y=f(X)|<T \end{array}\right. L(Y,f(X))={1,Y?f(X)T0,Y=f(X)<T?

2. Hinge 损失函数

Hinge损失函数标准形式如下:
L ( y , f ( x ) ) = max ? ( 0 , 1 ? y f ( x ) ) L(y, f(x))=\max (0,1-y f(x)) L(y,f(x))=max(0,1?yf(x))
特点:

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

3. log对数损失函数

log对数损失函数的标准形式如下:
L ( Y , P ( Y ∣ X ) ) = ? log ? P ( Y ∣ X ) L(Y, P(Y \mid X))=-\log P(Y \mid X) L(Y,P(YX))=?logP(YX)
特点:

  1. log对数损失函数能非常好的表征概率分布,在很多场景尤其是多分类,如果需要知道结果属于每个类别的置信度,那它非常适合。
  2. 健壮性不强,相比于hinge loss对噪声更敏感。
  3. 逻辑回归的损失函数就是log对数损失函数。

4. Logistic损失

Logistic损失标准形式如下:
L ( y , f ( x ) ) = log ? 2 ( 1 + e ? y f ( x ) ) L(y, f(x))=\log_2 (1+e^{-yf(x)}) L(y,f(x))=log2?(1+e?yf(x))
特点:

  1. 该函数处处光滑,可使用梯度下降法优化
  2. 但该函数对所有样本点都有惩罚,因此对异常值相对敏感。

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

交叉熵损失函数的标准形式如下:
L ( y , f ( x ) ) = ? 1 n ∑ x [ y ln ? f ( x ) + ( 1 ? y ) ln ? ( 1 ? f ( x ) ) ] L(y, f(x))=-\frac{1}{n} \sum_{x}[y \ln f(x)+(1-y) \ln (1-f(x))] L(y,f(x))=?n1?x?[ylnf(x)+(1?y)ln(1?f(x))]
特点:

  1. 本质上也是一种对数似然函数,可用于二分类和多分类任务中。对数损失函数和交叉熵损失函数应该是等价的。
    二分类问题中的loss函数如上(输入数据是softmax或者sigmoid函数的输出)
    多分类问题中的loss函数如下(输入数据是softmax或者sigmoid函数的输出):
    ?loss? = ? 1 n ∑ i y i ln ? a i \text { loss }=-\frac{1}{n} \sum_{i} y_{i} \ln a_{i} ?loss?=?n1?i?yi?lnai?
  2. 当使用sigmoid作为激活函数的时候,常用交叉熵损失函数而不用均方误差损失函数,因为它可以完美解决平方损失函数权重更新过慢的问题,具有“误差大的时候,权重更新快;误差小的时候,权重更新慢”的良好性质。

二、回归问题

1. 绝对值损失函数

绝对值损失函数是计算预测值与目标值的差的绝对值:
L ( Y , f ( x ) ) = ∣ Y ? f ( x ) ∣ L(Y, f(x))=|Y-f(x)| L(Y,f(x))=Y?f(x)
特点:

  1. 绝对值损失相当于做中值回归,相比SE对异常点更鲁棒一些。
  2. 但在 f = y f=y f=y处无法求导

2. 平方损失函数

平方损失函数标准形式如下:
L ( Y ∣ f ( X ) ) = ∑ N ( Y ? f ( X ) ) 2 L(Y \mid f(X))=\sum_{N}(Y-f(X))^{2} L(Yf(X))=N?(Y?f(X))2
特点:

  1. 最常用的回归损失函数,函数光滑,可以使用梯度下降法优化,预测值与真实值越远惩罚越大,因此对异常点敏感。

3. Huber损失

Huber损失标准形式如下:
f ( x ) = { ( Y ? f ( X ) ) 2 , ∣ Y ? f ( X ) ∣ ≤ δ 2 δ ∣ Y ? f ( X ) ∣ ? δ 2 , ∣ Y ? f ( X ) ∣ > δ f(x)=\left\{ \begin{aligned} &(Y-f(X))^{2}, &|Y-f(X)| \leq\delta\\ &2\delta|Y-f(X)|-\delta^2, &|Y-f(X)| > \delta \end{aligned} \right. f(x)={?(Y?f(X))2,2δY?f(X)?δ2,?Y?f(X)δY?f(X)>δ?
特点:

  1. 兼具平方损失的处处可导性,绝对值损失的异常点鲁棒性。

三、常见问题

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

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

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

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

分析一下两个误差函数的参数更新过程就会发现原因了。
对于均方误差损失函数,更新参数 w w w b b b
w = w ? η ? L o s s ? w = w ? η ( f ( x ) ? y ) σ ′ ( z ) x b = b ? η ? L o s s ? b = b ? η ( f ( x ) ? y ) σ ′ ( z ) \begin{gathered} w=w-\eta \frac{\partial Loss}{\partial w}=w-\eta(f(x)-y) \sigma^{\prime}(z) x \\ b=b-\eta \frac{\partial Loss}{\partial b}=b-\eta(f(x)-y) \sigma^{\prime}(z) \end{gathered} w=w?η?w?Loss?=w?η(f(x)?y)σ(z)xb=b?η?b?Loss?=b?η(f(x)?y)σ(z)?
其中 z = w x + b z=wx+b z=wx+b,因为sigmoid的性质,导致 σ ′ ( z ) \sigma^{\prime}(z) σ(z) z z z取大部分值时会很小(如下图标出来的两端,几乎接近于平坦),这样会使得 η ( f ( x ) ? y ) σ ′ ( z ) \eta(f(x)-y) \sigma^{\prime}(z) η(f(x)?y)σ(z)很小,导致参数 w w w b b b更新非常慢。

对于交叉熵损失函数,参数更新公式为:
w = w ? η ? L o s s ? w = w ? η ( f ( x ) ? y ) x b = b ? η ? L o s s ? b = b ? η ( f ( x ) ? y ) \begin{gathered} w=w-\eta \frac{\partial Loss}{\partial w}=w-\eta(f(x)-y) x \\ b=b-\eta \frac{\partial Loss}{\partial b}=b-\eta(f(x)-y) \end{gathered} w=w?η?w?Loss?=w?η(f(x)?y)xb=b?η?b?Loss?=b?η(f(x)?y)?
可以看到参数更新公式中没有 σ ′ ( z ) \sigma^{\prime}(z) σ(z)这一项,权重的更新受 ( f ( x ) ? y ) (f(x)-y) (f(x)?y)影响,受到误差的影响,所以当误差大的时候,权重更新快;当误差小的时候,权重更新慢。这是一个很好的性质。
所以当使用sigmoid作为激活函数的时候,常用交叉熵损失函数而不用均方误差损失函数。

参考文章:常见的损失函数(loss function)总结

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-08-10 13:25:17  更:2021-08-10 13:25:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 21:54:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码