深度学习——损失函数(Regression Loss、Classification Loss)

article/2025/10/28 10:54:12

简介

Loss function

损失函数

用于定义单个训练样本与真实值之间的误差

Cost function

代价函数

用于定义单个批次/整个训练集样本与真实值之间的误差

Objective function

目标函数

泛指任意可以被优化的函数

损失函数用于衡量模型所做出的预测离真实值(GT)之间的偏离程度。

损失函数分为两种:回归损失(针对连续型变量)和分类损失(针对离散型变量)

知道每一种损失函数的优点和局限性,才能更好的利用它们去解决实际问题

回归损失(Regression Loss)

L1 Loss

也称为Mean Absolute Error,即平均绝对误差(MAE),它衡量的是预测值与真实值之间的距离的平均误差幅度。

作用范围:0到正无穷。

公式如下:(N个样本,M个类别)

L_{l1 \space loss} = \frac{1}{N} \sum^{N}_{i=1} \sum^{M}_{t=1} |y_t^i - \hat{y}_t^i|

优点:收敛速度快,能够对梯度给予合适的惩罚权重,使梯度更新的方向可以更加精确。

缺点:对异常值敏感,梯度更新的方向很容易受离群点所主导,不具备鲁棒性。

L2 Loss

也称为Mean Squared Error,即均方差(MSE),它衡量的是预测值与真实值之间距离的平方和。

作用范围:0到正无穷。

公式如下:(N个样本,M个类别)

L_{l2 \space loss} = \frac{1}{N} \sum^{N}_{i=1} \sum^{M}_{t=1} (y_t^i - \hat{y}_t^i)^2

优点:对离群点(outliers)或者异常值更具有鲁棒性。

缺点:

  1. 在0点处的导数不连续,使得求解效率低下,导致收敛速度慢

  2. 对于较小的损失值,其梯度也与其他区间损失值的梯度一样大,不利于网络学习

异常值对于实际业务非常重要,可使用MSE作为损失函数

异常值仅仅表示损坏的数据,可使用MAE作为损失函数

Smooth L1 Loss

出自 Fast RCNN

综合L1和L2损失的优点,在0点处附近采用了L2损失中的平方函数,解决了L1损失在0点处梯度不可导的问题,使其更加平滑易于收敛。

公式如下:

smooth_{L1}(x) = \begin{cases} 0.5x^2 &\text{if } |x|<1 \\ |x|-0.5 &\text{otherwise} \end{cases}

IoU Loss

出自 UnitBox

常规的Lx损失中,都是基于目标边界中的4个坐标点信息之间分别进行回归损失计算,因此,这些边框信息之间相互独立。

IoU损失将候选框的四个边界信息作为一个整体进行回归,从而实现准确、高效的定位,具有很好的尺度不变性。

为了解决IoU度量不可导的现象,引入了负Ln范数来间接计算IoU损失。

 

Ground \space truth: \hat{x} = (\hat{x}_t, \hat{x}_b, \hat{x}_l, \hat{x}_r) \\ Prediction: x = (x_t, x_b, x_l, x_r) \\ IoU \space Loss = - \ln{\frac{Intersection(Ground \space truth, Prediction)}{Union(Ground \space truth, Prediction)}}

GIoU Loss

出自 Generalized Intersection over Union

A,B, the \space smallest \space encolsing \space convex \space object \space C \\ IoU = \frac{|A \cap B|}{|A \cup B|} \\ GIoU = IoU - \frac{|C-(A \cup B)|}{|C|} \\ L_{GIoU} = 1- GIoU

分类损失(Classification Loss)

Cross Entropy Loss

其中y_i​为真实值,p_i​​为该类别的预测值(对单个样本)

L(y,p) = -\sum_{i}{y_i \cdot \log{p_i}}

Focal Loss

出自 Focal Loss for Dense Object Detection

出发点:解决one-stage算法不如two-stage算法准确率高的问题。

主要原因:样本的类别不均衡(比如前景和背景)

比如在很多输入图片中,我们利用网格去划分小窗口,大多数的窗口是不包含目标的。

直接运用原始的交叉熵损失,那么负样本所占比例会非常大,主导梯度的优化方向,即网络会偏向于将前景预测为背景。即使使用OHEM(在线困难样本挖掘)算法来处理不均衡的问题,虽然其增加了误分类样本的权重,但也容易忽略掉易分类样本。

解决方案:Focal loss聚焦于训练一个困难样本的稀疏集,通过直接在标准的交叉熵损失函数基础上做改进,引进了两个惩罚因子,来减少易分类样本的权重,使得模型在训练过程中更专注于困难样本。

FL(p, \hat{p}) = -(\alpha (1-\hat{p})^{\gamma} p\log{\hat{p}} + (1-\alpha)\hat{p}^{\gamma}(1-p)\log{(1-\hat{p})})

Reference

一文看尽深度学习中的各种损失函数

损失函数|交叉熵损失函数


http://chatgpt.dhexx.cn/article/lYmV85Gq.shtml

相关文章

深度学习中常见的损失函数(L1Loss、L2loss)

损失函数定义 损失函数&#xff1a;衡量模型输出与真实标签的差异。 L1_loss 平均绝对误差&#xff08;L1 Loss&#xff09;:平均绝对误差&#xff08;Mean Absolute Error,MAE&#xff09;是指模型预测值f(x)和真实值y之间距离的平均值&#xff0c;公式如下&#xff1a; 优…

损失函数(loss function)

文章目录 1、什么是损失函数2、为什么要使用损失函数3、损失函数分类1、分类一2、分类二3、分类三3.1基于距离度量的损失函数3.1.1 均方误差损失函数&#xff08;MSE&#xff09;3.1.2 L2损失函数3.1.3 L1损失函数3.1.4 Smooth L1损失函数3.1.5 huber损失函数 3.2 基于概率分布…

Focal Loss损失函数(超级详细的解读)

什么是损失函数&#xff1f; 1、什么是损失呢&#xff1f; 在机器学习模型中&#xff0c;对于每一个样本的预测值与真实值的差称为损失。 2、什么是损失函数呢&#xff1f; 显而易见&#xff0c;是一个用来计算损失的函数。它是一个非负实值函数,通常使用L(Y, f(x))来表示。 3、…

损失函数loss大总结

分类任务loss: 二分类交叉熵损失sigmoid_cross_entropy&#xff1a; TensorFlow 接口&#xff1a; tf.losses.sigmoid_cross_entropy(multi_class_labels,logits,weights1.0,label_smoothing0,scopeNone,loss_collectiontf.GraphKeys.LOSSES,reductionReduction.SUM_BY_NONZER…

深度学习基础(三)loss函数

loss函数&#xff0c;即损失函数&#xff0c;是决定网络学习质量的关键。若网络结构不变的前提下&#xff0c;损失函数选择不当会导致模型精度差等后果。若有错误&#xff0c;敬请指正&#xff0c;Thank you&#xff01; 目录 一、loss函数定义 二、常见的loss算法种类 1.M…

loss函数 激活函数

一、LOSS函数 loss函数指机器学习模型中用于最小化的目标函数&#xff0c;其一般意义是指判别错误的程度&#xff0c;因为我们要提高准确率&#xff0c;也就是降低错误率&#xff0c;所以可以归结为一个最小化损失函数的问题。 具体的&#xff0c;我们假设有一个十分类问题&a…

Loss损失函数

损失函数是将随机事件或其有关随机变量的取值映射为非负实数以表示该随机事件的“风险”或“损失”的函数&#xff0c;用于衡量预测值与实际值的偏离程度。在机器学习中&#xff0c;损失函数是代价函数的一部分&#xff0c;而代价函数是目标函数的一种类型。 在《神经网络中常…

深度学习之——损失函数(loss)

深度学习中的所有学习算法都必须有一个 最小化或最大化一个函数&#xff0c;称之为损失函数&#xff08;loss function&#xff09;&#xff0c;或“目标函数”、“代价函数”。损失函数是衡量模型的效果评估。比如&#xff1a;求解一个函数最小点最常用的方法是梯度下降法&…

1_一些文献中的英文解释和用法整理

目录 1、Theorem、Proposition、Lemma和Corollary等的解释与区别 2、论文里的 Preliminaries 究竟是什么意思? &#xff08;1&#xff09;Preliminaries是什么&#xff1f; &#xff08;2&#xff09;Preliminaries应该写什么内容&#xff1f; &#xff08;3&#xff09;…

区分定理(Theorem)、引理(Lemma)、推论(Corollary)等概念

ZZ: http://blog.sina.com.cn/s/blog_a0e53bf70101jwv1.html Theorem&#xff1a;就是定理&#xff0c;比較重要的&#xff0c;簡寫是 Thm。 Lemma&#xff1a;小小的定理&#xff0c;通常是為了證明後面的定理&#xff0c;如果證明的篇幅很長時&#xff0c;可能會把證明拆成幾…

CodeForces - 1364D Ehabs Last Corollary(dfs树找最小环)

题目链接&#xff1a;点击查看 题目大意&#xff1a;给出一个由 n 个结点和 m 条边构成的无向图&#xff0c;再给出一个 k &#xff0c;需要在图中完成下面任意一种操作&#xff1a; 找到一个大小恰好为 的独立集找到一个大小不超过 k 的环 题目分析&#xff1a; 题目已经…

Codeforces Round 649 (Rated for Div. 2)D. Ehab s Last Corollary详细题解(图论+简单环)

树 边 : 树边: 树边:深度优先森林中的边。如果结点v是因对(u,v)的探索而首先被发现,则(u,v)是一条树边。 后 向 边 : 后向边: 后向边:后向边(u,v)是将结点u连接到其在深度优先树中一个祖先节点v的边. &#xff08;本文我就称之为反向边了&#xff0c;问题不大&#xff09; 前…

#649 (Div. 2)D. Ehab‘s Last Corollary

题目描述 Given a connected undirected graph with n vertices and an integer k, you have to either: either find an independent set that has exactly ⌈k2⌉ vertices. or find a simple cycle of length at most k. An independent set is a set of vertices such that…

Ehabs Last Corollary

Given a connected undirected graph with n n n vertices and an integer k k k, you have to either: either find an independent set that has exactly ⌈ k 2 ⌉ ⌈\frac{k}{2}⌉ ⌈2k​⌉ vertices.or find a simple cycle of length at most k k k. An independen…

Latent Variables的理解

加入我们有X&#xff0c;Y两个随机变量&#xff0c;他们的概率分布如下。要直接用一个函数还表示这个分布是比较困难的。 但我们发现这个分布可以分成三个聚类。如果我们给每个聚类编号为。 那么就是简单的高斯函数了。 这里z就是 加入latent variable的意义在于&#xff0c…

Variable(变量)

深度学习入门之PyTorch 作者 廖星宇

对条件变量(condition variable)的讨论

作者&#xff1a;王东 1.1 什么是条件变量和条件等待&#xff1f; 简单的说&#xff1a; 条件变量(condition variable)是利用线程间共享的全局变量进行同步的一种机制&#xff0c;主要包括两个动作&#xff1a;一个线程等待某个条件为真&#xff0c;而将自己挂起&…

C++ condition_variable用法

概述 condition_variable类似于信号量机制&#xff0c;实现了线程的等待和唤醒。 函数接口&#xff1a; wait() :阻塞等待的同时释放锁&#xff08;原子操作&#xff09;&#xff0c;还可以添加阻塞判断函数&#xff0c;详见代码 notify_all() : 唤醒所有阻塞等待的线程 no…

variable命令两种不同的使用方式“v_“和““的区别

大家好&#xff0c;我是小马老师。 本文介绍variable命令两种不同的使用方式&#xff1a;“v_“和”&"。 在lammps模拟中&#xff0c;variable命令用的相对比较多&#xff0c;可以根据需要定义不同的变量。 在使用自定义变量或者调用自定义变量的时候&#xff0c;lamm…

条件变量(Condition Variable)详解

条件变量(Condtion Variable)是在多线程程序中用来实现“等待->唤醒”逻辑常用的方法。举个简单的例子&#xff0c;应用程序A中包含两个线程t1和t2。t1需要在bool变量test_cond为true时才能继续执行&#xff0c;而test_cond的值是由t2来改变的&#xff0c;这种情况下&#x…