深度学习中的损失函数

ops/2024/12/13 1:35:37/

      损失函数是深度学习模型训练过程中不可或缺的一部分,是模型预测值与真实值之间差异的客观衡量标准。它们是模型训练的基础,指导算法调整模型参数,以最小化损失并提高预测准确性。它们衡量了模型预测值与真实值的吻合程度。通过最小化这种损失,模型可以学会做出更准确的预测。在训练时,我们的目标是最小化预测值和真实值之间的损失。深度学习模型的目标是最小化这个损失函数。

      损失函数是一种数学函数,用于衡量模型预测值与真实值的匹配程度。它为模型预测的准确性提供了量化指标(quantitative metric),可用于指导模型的训练过程,用于评估算法对数据集的建模效果。如果损失函数的值较低,则表明模型运行良好,否则我们必须更改模型参数以减少或最小化损失。它指导学习算法(learning algorithm)在训练期间调整模型的参数,即权重和偏置。损失函数的目标是指导优化算法调整模型参数,以减少随时间推移的损失。在训练过程中,梯度下降(Gradient Descent)等算法使用损失函数来调整模型的参数,即权重和偏置,旨在减少误差并改善模型的预测。通过量化预测值和真实值之间的差异,损失函数为评估模型的性能提供了基准(benchmark),损失值越低,通常表示性能越好。损失函数的选择会影响学习动态(learning dynamics),包括模型学习的速度以及哪种错误受到的惩罚(penalized)更重。不同的损失函数可以导致不同的学习行为和结果。

      损失函数有多种形式,每种形式适用于不同类型的问题。选择正确的损失函数(loss function)对于训练深度学习模型非常重要。损失函数的选择会显著影响模型的性能,因此根据手头的具体任务选择合适的损失函数至关重要。损失函数可分为两种主要类型:回归损失函数和分类损失函数。如果我们要预测的值是连续数值,例如房价或温度,那么我们要执行的任务就是回归任务。如果要预测的值是离散值,那么任务就是分类。

      损失函数与成本函数

      (1).损失函数:通常用于衡量单个训练样本的预测值与真实值之间的误差。损失函数将误差量化为一个实数,表示错误预测的"成本"或"惩罚"。然后可以使用此误差调整模型的参数,以减少未来预测中的误差。大多数模型使用梯度下降或其变体来最小化损失函数,该算法计算损失函数相对于模型参数的梯度,并沿梯度的相反方向更新参数。

      (2).成本函数:通常是对所有训练样本损失函数的平均或总和,表示了整个数据集上模型预测的总体误差。

      PyTorch中损失函数的实现在:torch/nn/modules/loss.py ,支持的损失函数有:L1Loss, NLLLoss, NLLLoss2d, PoissonNLLLoss, GaussianNLLLoss, KLDivLoss, MSELoss, BCELoss, BCEWithLogitsLoss, HingeEmbeddingLoss, MultiLabelMarginLoss, SmoothL1Loss, HuberLoss, SoftMarginLoss, CrossEntropyLoss, MultiLabelSoftMarginLoss, CosineEmbeddingLoss, MarginRankingLoss, MultiMarginLoss, TripletMarginLoss, TripletMarginWithDistanceLoss, CTCLoss

      1.Mean Squared Error(MSE) Loss:

      (1).函数:nn.MSELoss

      (2).用途:可微分,适合基于梯度的优化算法。用于预测连续值的问题,例如回归问题。

      (3).说明:计算预测值与真实值之间的平方差的平均值。它对较大的错误施加更严厉的惩罚(显著增加损失值),对异常值很敏感

      2.Mean Absolute Error(MAE) Loss:

      (1).函数:nn.L1Loss

      (2).用途:用于预测连续值的回归问题。

      (3).说明:计算预测值与真实值之间绝对差的平均值。与MSE相比,对异常值的敏感度较低在零处不可微(不能直接应用梯度下降),这可能会给某些优化算法带来问题。

      3.Huber Loss:

      (1).函数:nn.HuberLoss

      (2).用途:可用于解决回归问题。

      (3).说明:结合了MSE和MAE的优点。与MSE相比,它对异常值的敏感度较低;与MAE不同,它处处可微。对异常值具有鲁棒性,可在MSE和MAE之间实现平衡(如果真实值与预测值之间的绝对差小于或等于阈值delta,则应用MSE。否则,如果误差足够大,则应用MAE)。可微分,便于基于梯度的优化。使用时,有个delta超参数的取值需要微调。如果回归数据中有异常值,使用MAE或HuberLoss而不是MSE

      4.Smooth L1 Loss:

      (1).函数:nn.SmoothL1Loss

      (2).用途:可用于解决回归问题。

      (3).说明:对小误差的行为类似于MSE,对大误差的行为类似于MAE。如果数据中有一些异常值,这是一个很好的折衷方案。

      5.Binary Cross-Entropy(BCE) Loss:

      (1).函数:nn.BCELoss

      (2).用途:二元交叉熵损失(也称为对数损失)用于二元分类问题。

      (3).说明:适合基于梯度的优化算法。对不平衡的数据集可能很敏感。可能存在多个局部极小值。

      6.Binary Cross-Entropy with Logits Loss:

      (1).函数:nn.BCEWithLogitsLoss

      (2).用途:用于二分类问题,与BCELoss类似,但在数值上更稳定。

      (3).说明:将sigmoid激活函数和二元交叉熵损失合并为一步。在处理非常小或非常大的概率时,它更稳定。

      7.Cross-Entropy Loss:

      (1).函数:nn.CrossEntropyLoss

      (2).用途:用于多分类问题。

      (3).说明:将softmax层和负对数似然损失(Negative Log-Likelihood Loss)合并为一步

      8.Kullback-Leibler Divergence Loss:

      (1).函数:nn.KLDivLoss

      (2).用途:通常用于概率建模任务。

      (3).说明:测量两个概率分布之间的差异。对概率分布的细微差异很敏感。

      9.Hinge Loss:

      (1).函数:nn.HingeEmbeddingLoss

      (2).用途:通常用于分类任务,尤其是二分类问题以及支持向量机(SVM)中。

      (3).说明:在零处不可微。

      10.Negative Log-Likelihood Loss:

      (1).函数:nn.NLLLoss

      (2).用途:用于具有log_softmax输出的分类问题。

      (3).说明:仅适用于以softmax函数作为输出激活层的模型。

      11.Focal Loss:

      (1).用途:可有效解决类别不平衡问题。是对Cross-Entropy Loss的改编,更加专注于难以分类的示例。

      (2).说明:使用时,有两个超参alpha和gamma的取值需要微调。

      12.Dice Loss:

      (1).用途:用于图像分割任务,对不平衡数据集特别有效。

      (2).说明:它测量预测分割与ground truth之间的重叠。

      用于二分类的损失函数:BCELoss、BCEWithLogitsLoss、HingeEmbeddingLoss

      用于多分类的损失函数:CrossEntropyLoss、LLLoss

      用于回归的损失函数:MSELoss、L1Loss(MAE)、SmoothL1Loss、HuberLoss

      用于图像分割的损失函数:Focal Loss、Dice Loss

      在某些情况下,这些损失函数可能不够用,在这些情况下,你可以编写自定义损失函数来满足你的特定条件。

      注:以上整理的内容主要来自:

      1. https://medium.com/

      2. https://www.geeksforgeeks.org

      3. https://neptune.ai

      GitHub:https://github.com/fengbingchun/NN_Test


http://www.ppmy.cn/ops/141114.html

相关文章

解锁 AI 潜能 - ChatGPT等大模型提示词技巧

在人工智能领域,ChatGPT 等大语言模型正在重新定义我们的工作和生活方式。这些强大的 AI 大模型 能够理解自然语言并生成高质量的内容,无论是撰写文案、解决问题,还是数据分析,都展现了卓越的表现。如何高效使用这些工具&#xff…

【openwrt】openwrt-21.02 基于IP地址使用ipset实现策略路由操作说明

openwrt版本信息 DISTRIB_ID=OpenWrt DISTRIB_RELEASE=21.02-SNAPSHOT DISTRIB_REVISION=r0-6bf6af1d5 DISTRIB_TARGET=mediatek/mt7981 DISTRIB_ARCH=aarch64_cortex-a53 DISTRIB_DESCRIPTION=OpenWrt 21.02-SNAPSHOT r0-6bf6af1d5 DISTRIB_TAINTS=no-all busybox override …

【golang】 WaitGroup使用注意事项

注意1:使用指针 当把WaitGroup作为参数传递给函数时,如果传递的是变量本身(值传递),会发生复制。在 Go 语言中,这种复制可能会导致意外的行为。因为每个WaitGroup副本都有自己独立的计数器。下面的代码如果…

Advanced Functional Materials 光驱动连续跳跃机器人

跳跃是自然界生物的一种非常有效的运动手段,可以在瞬间穿越中长距离,以实现捕猎及逃避被猎捕的目的。自然界生物跳跃的机理主要有两种,长腿动物(比如袋鼠和青蛙)主要依靠杠杆作用,使它们能够用较少的力量跳跃同样的距离&#xff1…

MATLAB 非重叠点云提取算法(92)

MATLAB 非重叠点云提取算法(92) 一、算法介绍二、算法实现1.代码2.结果一、算法介绍 读取两片点云,从一片点云中找到与另一片点云不重叠的点云。输出并可视化提取过程和结果 二、算法实现 1.代码 代码如下(示例): % 假设 cloud1 和 cloud2 是通过 pcread 加载的点云…

分析比对vuex和store模式

在 Vue 中,Vuex 和 store 模式 是两个不同的概念,它们紧密相关,主要用于管理应用的状态。下面我会详细介绍这两个概念,并通过例子帮助你更好地理解。 1. Vuex 是什么? Vuex 是 Vue.js 的一个状态管理库,用…

Exp 智能协同管理系统-部门管理前端页面开发

一、需求分析 页面功能 提供部门信息的展示功能,数据以表格形式呈现,包含序号、部门名称、最后操作时间、操作(编辑和删除)列。用户可通过新增、编辑和删除功能,实现对部门数据的管理。数据动态加载,支持实…

使用Allure作为测试报告生成器(Java+Selenium)

背景 JAVA项目中原先用Jenkinsseleniumselenium grid来日常测试UI并记录。 问题 当某一个testSuite失败时,当需要确认UI regression issue还是selenium test case自身的问题,需要去jenkins中查log,一般得到的是“Can not find element xxx…