深度学习中常见的损失函数

news/2024/11/15 0:27:11/

在机器学习和深度学习中,损失函数用于衡量模型预测值与真实值之间的差异。根据任务的类型(如回归、分类等),可以使用不同的损失函数。下面列举了一些常见的损失函数:

1. 回归问题中的损失函数

回归任务的目标是预测连续值,常用的损失函数有:

  • 均方误差(Mean Squared Error, MSE)
    L MSE = 1 N ∑ i = 1 N ( y i − y ^ i ) 2 L_{\text{MSE}} = \frac{1}{N} \sum_{i=1}^{N} (y_i - \hat{y}_i)^2 LMSE=N1i=1N(yiy^i)2

    • 这是最常用的回归损失函数之一。它对误差的平方进行加权,较大的误差对损失的贡献更大。
  • 均方根误差(Root Mean Squared Error, RMSE)
    L RMSE = 1 N ∑ i = 1 N ( y i − y ^ i ) 2 L_{\text{RMSE}} = \sqrt{\frac{1}{N} \sum_{i=1}^{N} (y_i - \hat{y}_i)^2} LRMSE=N1i=1N(yiy^i)2

    • RMSE是MSE的平方根形式,通常用于更直观地表示误差。
  • 平均绝对误差(Mean Absolute Error, MAE)
    L MAE = 1 N ∑ i = 1 N ∣ y i − y ^ i ∣ L_{\text{MAE}} = \frac{1}{N} \sum_{i=1}^{N} |y_i - \hat{y}_i| LMAE=N1i=1Nyiy^i

    • MAE对误差的线性差异进行惩罚,它对异常值的影响不如MSE大。
  • Huber损失(Huber Loss)
    L δ ( a ) = { 1 2 a 2 if  ∣ a ∣ ≤ δ δ ( ∣ a ∣ − 1 2 δ ) if  ∣ a ∣ > δ L_{\delta}(a) = \begin{cases} \frac{1}{2} a^2 & \text{if } |a| \leq \delta \\ \delta (|a| - \frac{1}{2} \delta) & \text{if } |a| > \delta \end{cases} Lδ(a)={21a2δ(a21δ)if aδif a>δ

    • 这是MSE和MAE的折中,适用于存在异常值的数据集。它对小误差使用MSE,对大误差使用MAE。

2. 分类问题中的损失函数

分类任务的目标是将数据点分配到离散类别中,常用的损失函数包括:

  • 交叉熵损失(Cross Entropy Loss)

    • 对于二分类问题:
      L CE = − 1 N ∑ i = 1 N [ y i log ⁡ ( y ^ i ) + ( 1 − y i ) log ⁡ ( 1 − y ^ i ) ] L_{\text{CE}} = - \frac{1}{N} \sum_{i=1}^{N} \left[ y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i) \right] LCE=N1i=1N[yilog(y^i)+(1yi)log(1y^i)]

      • ( y_i ) $$ 是真实类别标签(0或1),( \hat{y}_i ) 是预测值(0到1之间的概率值)。
    • 对于多分类问题(Softmax交叉熵损失):
      L CE = − 1 N ∑ i = 1 N ∑ k = 1 K y i k log ⁡ ( y ^ i k ) L_{\text{CE}} = - \frac{1}{N} \sum_{i=1}^{N} \sum_{k=1}^{K} y_{ik} \log(\hat{y}_{ik}) LCE=N1i=1Nk=1Kyiklog(y^ik)

      • 这里 y i k y_{ik} yik 是类别 k k k 的真实标签(one-hot编码), y ^ i k \hat{y}_{ik} y^ik 是模型输出的类别概率。
  • Hinge Loss(用于SVM)
    L hinge = max ⁡ ( 0 , 1 − y i ⋅ y ^ i ) L_{\text{hinge}} = \max(0, 1 - y_i \cdot \hat{y}_i) Lhinge=max(0,1yiy^i)

    • 常用于支持向量机(SVM)分类器中,确保正确类别的得分与其他类别的得分相差至少1。
  • Kullback-Leibler散度(Kullback-Leibler Divergence, KL Divergence)
    D KL ( P ∣ ∣ Q ) = ∑ i P ( i ) log ⁡ ( P ( i ) Q ( i ) ) D_{\text{KL}}(P || Q) = \sum_{i} P(i) \log\left(\frac{P(i)}{Q(i)}\right) DKL(P∣∣Q)=iP(i)log(Q(i)P(i))

    • 用于衡量两个概率分布 P P P Q Q Q 之间的差异,通常用于分类任务的概率分布预测中。

3. 用于检测和分割的损失函数

这些损失函数常用于图像处理任务,如物体检测和图像分割:

  • IoU损失(Intersection over Union Loss)
    L IoU = 1 − Intersection Area Union Area L_{\text{IoU}} = 1 - \frac{\text{Intersection Area}}{\text{Union Area}} LIoU=1Union AreaIntersection Area

    • 用于目标检测,衡量预测框与真实框之间的重叠面积比例。
  • Dice损失(Dice Loss)
    L Dice = 1 − 2 ∣ A ∩ B ∣ ∣ A ∣ + ∣ B ∣ L_{\text{Dice}} = 1 - \frac{2 |A \cap B|}{|A| + |B|} LDice=1A+B2∣AB

    • 多用于图像分割任务,衡量预测与真实分割区域之间的重叠。

4. 生成模型中的损失函数

生成模型如GANs(生成对抗网络)和自编码器中使用的损失函数包括:

  • 对抗损失(Adversarial Loss)

    • GAN中用于生成器和判别器的损失。生成器的目标是“欺骗”判别器,判别器的目标是正确地区分真实数据和生成数据。
      L gen = − log ⁡ ( D ( G ( z ) ) ) L_{\text{gen}} = -\log(D(G(z))) Lgen=log(D(G(z)))
      L dis = − [ log ⁡ ( D ( x ) ) + log ⁡ ( 1 − D ( G ( z ) ) ) ] L_{\text{dis}} = -\left[\log(D(x)) + \log(1 - D(G(z)))\right] Ldis=[log(D(x))+log(1D(G(z)))]
  • 重构损失(Reconstruction Loss)

    • 常用于自编码器和变分自编码器(VAE),衡量输入数据和重构数据之间的差异,常使用MSE或交叉熵。

5. 其他常见损失函数

  • 标签平滑损失(Label Smoothing Loss)
    L smooth = − ∑ i = 1 N ∑ k = 1 K [ ( 1 − ϵ ) y i k + ϵ K ] log ⁡ ( y ^ i k ) L_{\text{smooth}} = - \sum_{i=1}^{N} \sum_{k=1}^{K} \left[(1 - \epsilon) y_{ik} + \frac{\epsilon}{K}\right] \log(\hat{y}_{ik}) Lsmooth=i=1Nk=1K[(1ϵ)yik+Kϵ]log(y^ik)

    • 在交叉熵损失中引入平滑标签,避免过拟合或过度自信的预测。
  • 对比损失(Contrastive Loss)
    L contrastive = ( 1 − y ) ⋅ 1 2 ( D w ) 2 + y ⋅ 1 2 { max ⁡ ( 0 , m − D w ) } 2 L_{\text{contrastive}} = (1 - y) \cdot \frac{1}{2} (D_w)^2 + y \cdot \frac{1}{2} \{ \max(0, m - D_w) \}^2 Lcontrastive=(1y)21(Dw)2+y21{max(0,mDw)}2

    • 常用于度量学习任务(如Siamese网络),衡量相似样本和不相似样本之间的距离。

总结

不同的损失函数适用于不同的任务,回归任务中通常使用均方误差(MSE)和绝对误差(MAE),分类任务中使用交叉熵损失,物体检测和分割中使用IoU和Dice损失,而生成模型中使用对抗损失和重构损失。根据具体任务的特点选择合适的损失函数对于模型的性能有很大影响。


http://www.ppmy.cn/news/1527911.html

相关文章

信息安全数学基础(9)素数的算数基本定理

前言 在信息安全数学基础中,素数的算数基本定理(也称为唯一分解定理或算术基本定理)是一个极其重要的定理,它描述了正整数如何唯一地分解为素数的乘积。这个定理不仅是数论的基础,也是许多密码学算法(如RSA…

微信小程序开发第五课

一 vant-app # https://vant-contrib.gitee.io/vant-weapp/#/home1.1 集成步骤 # 0 必须使用专门为小程序提供的npm包,通常好多包用不了,比如第三方包用了dom,小程序没有 https://developers.weixin.qq.com/miniprogram/dev/devtools/npm.h…

超详细PS2019安装教程与安装步骤图文解析!保姆级教程!(附赠PS下载地址)

步骤1:下载Adobe Photoshop PS CC 2023下载链接:https://pan.quark.cn/s/f997e116f327 下载完成后,解压文件到当前文件夹(随便用什么解压软件都行,现在解压软件都是免费的,没有的到360官网下载360压缩&am…

Verilog学习之旅~

记录Verilog的学习日常~ 第一阶段:牛客网刷题 1.Verilog快速入门 基础语法 VL1:四选一多路器:case语句、条件表达符; VL2:异步复位的串联T触发器:T触发器的基本功能及代码实现、异步复位的概念; VL3:奇偶校验:缩…

Django 聚合查询

文章目录 一、聚合查询二、使用步骤1.准备工作2.具体使用3.分组查询(annotate)1.定义2.使用3.具体案例 4.F() 查询1.定义2.使用 5.Q() 查询1.定义2.查询 一、聚合查询 使用聚合查询前要先从 django.db.models 引入 Avg、Max、Min、Count、Sum&#xff0…

QT开发:C++ Qt 信号与槽机制概括性总结

引言 在上一篇文章中,我们详细介绍了 Qt 中信号与槽的概念以及它们的使用方法,相信大家已经对 Qt 信号和槽机制有了一定的理解。当然我们要想学好开发技术,就得打好基础,从现在开始掌握每一个知识点。本文将基于前一篇内容&#x…

大语言模型-教育方向数据集

大语言模型-教育方向数据集 编号论文数据集1Bitew S K, Hadifar A, Sterckx L, et al. Learning to Reuse Distractors to Support Multiple-Choice Question Generation in Education[J]. IEEE Transactions on Learning Technologies, 2022, 17: 375-390.Televic, NL, https…

网络安全等保培训 ppt

网络安全等级保护怎么做?