[机器学习]损失函数DLC

news2025/1/9 1:59:13

一、损失函数的概念

        损失函数(Loss Function)是用于评估预测结果\hat{y}真实结果y之间差距的一个公式,为模型优化指明方向。在模型优化过程中一般表述为:L(y_i,f(x_i;\theta))L(y_i,\hat{y_i})

        与针对整个训练集代价函数(Cost Function)不同,损失函数通常仅针对单个训练样本。可以归纳为A loss function is a part of a cost function。(损失函数是代价函数的一部分)

二、常见的损失函数及其详解

        1.均方差损失

                均方差(Mean Squared Error,MSE)损失函数一般用于回归任务,也称L2 Loss

                        J_{MSE}=\frac{1}{N}\sum(y_i-\hat{y_i})^2

                        在使用均方差损失函数时,可以视为模型输出和真实值之间的误差服从高斯分布

        2.平均绝对误差损失

                平均绝对误差(Mean Absolute Error Loss,MAE),又称L1 Loss

                        J_{MAE}=\frac{1}{N}\sum|y_i-\hat{y_i}|

                        在使用平均绝对误差损失函数时,可以视为模型输出和真实值之间的误差服从拉普拉斯分布

        3.HUber Loss

                又称Smooth L1 Loss,L1 Loss在0点导数不唯一,可能会影响收敛;而Smooth L1 Loss在0点附近使用平方函数使其变得更为平滑

                        Smooth L_1 = 0.5x^2,|x|<1

                                           =|x|-0.5, x<-1||x>1

        MAE和MSE的区别

                ①L2 Loss的收敛速度快于L1 Loss,一般使用L2 Loss的情况居多

                ②L1 Loss的增长比较缓慢(随误差线性增长,而不是平方增长),即对异常值(outlier)不敏感;对于边框预测回归问题(如Faster RCNN)而言,其梯度变化更小,更不易跑飞

        4.交叉熵损失函数

                Cross Entropy Loss,一般应用于分类问题,可分为二分类和多分类

                4.1二分类

                        对于二分类而言,我们通常用sigmoid函数将模型压缩至(0,1),模型输出结果为概率 ,对于给定的输入x_i,其为正例和为负例的概率分别为:

                                p(y_i=1|x_i)=\hat{y_i}

                                p(y_i=0|x_i)=1-\hat{y_i}

                        将这两个式子合并可得:p(y_i|x_i)=(\hat{y_i})^{y_i}(1-\hat{y_i})^{1-y_i}

                        假定数据点之间互相独立,其似然分布可表述为:L(x,y)=\prod (\hat{y_i}^{y_i})(1-\hat{y_i})^{1-\hat{y_i}}

                        取似然对数并加负号变为最小化负对数似然,即可得到交叉损失函数的形式

                                J_{CE}=-\sum y_i log(\hat{y_i})+(1-y_i)log(1-\hat{y_i})

                 4.2多分类

                        多分类思想类似于二分类,真实值y_i为一个One-hot向量;用来压缩的函数改为softmax,所有维度的输出范围被压缩为(0,1),且其和为1,可以表述为:p(y_i|x_i)=\prod (\hat{y}^k_i)^{y_i^k}

                         取似然对数并加负号变为最小化负对数似然,即可得到交叉损失函数的形式

                                J_{CE}=-\sum y_i^{c_i}log(y_i^{\hat{(c_i)}})

                4.3Focal Loss

                        Focal Loss基于交叉熵损失函数,用于解决传统交叉熵损失函数中以下问题:

                                ①负样本(Negative example)过多导致正样本(Postive example)的Loss被覆盖

                                ②简单样本(Easy example)过多导致其支配某个批次的收敛方向

                        Focal Loss可以表述为:

                                        FL(p_t)=-\alpha_t(1-p_t)^\gamma log(p_t)

                                其中\alpha_t和γ分别用于解决正负样本不平衡问题和难易样本不平衡问题

                        以二分类为例,将其展开

                                        p_t=p,y=1

                                             =1-p,otherwise

                                4.3.1 α

                                        用于解决正负样本不平衡问题;为正负样本分类不同的权重值α [0,1]

                                        \alpha_t=\alpha,y=1

                                             =1-\alpha,otherwise

                                        α的值往往需要根据结论进行调整(Faster RCNN论文中为0.25)

                                4.3.2 γ

                                        用于解决难易样本不平衡问题;让每个样本乘以(1-p_t)^\gamma,因为简单样本的score p_t一般接近于1,那么其(1-p_t)^\gamma值将会较小,便可以抑制简单样本的权重

三、Focal Loss的实现

        以YOLO V4为例,YOLO V4的损失函数由3部分组成:loc(回归损失)、conf(目标置信度损失)、cls(种类损失),其中需要进行正负样本区分的为目标置信度损失。可以按照以下思路进行处理。

        ①提取概率p

conf = torch.sigmoid(prediction[..., 4])

        ②平衡正负样本,设置参数α

torch.where(obj_mask, torch.ones_like(conf) * self.alpha, torch.ones_like(conf) * (1 - self.alpha))

        ③平衡难易样本,设置参数γ

torch.where(obj_mask, torch.ones_like(conf) - conf, conf) ** self.gamma

        ④乘回交叉熵损失

ratio       = torch.where(obj_mask, torch.ones_like(conf) * self.alpha, torch.ones_like(conf) * (1 - self.alpha)) * torch.where(obj_mask, torch.ones_like(conf) - conf, conf) ** self.gamma
loss_conf   = torch.mean((self.BCELoss(conf, obj_mask.type_as(conf)) * ratio)[noobj_mask.bool() | obj_mask])

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/181066.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RK3568平台开发系列讲解(驱动基础篇)Linux 内核源码介绍

🚀返回专栏总目录 文章目录 一、目录树概览二、快速确定主板关联代码2.1、基础代码2.2、驱动代码沉淀、分享、成长,让自己和他人都能有所收获!😄 📢进行嵌入式 Linux 产品开发,往往需要对内核进行裁剪和定制,以满足嵌入式产品的功能和性能需求。 一、目录树概览 解压…

Python---学生管理系统(pyinstaller)

专栏&#xff1a;python 个人主页&#xff1a;HaiFan. 专栏简介&#xff1a;本专栏主要更新一些python的基础知识&#xff0c;也会实现一些小游戏和通讯录&#xff0c;学时管理系统之类的&#xff0c;有兴趣的朋友可以关注一下。 学生管理系统前言创建入口函数新增学生insert展…

行为型模式-迭代器模式

1.概述 定义&#xff1a;提供一个对象来顺序访问聚合对象中的一系列数据&#xff0c;而不暴露聚合对象的内部表示。 2.结构 迭代器模式主要包含以下角色&#xff1a; 抽象聚合&#xff08;Aggregate&#xff09;角色&#xff1a;定义存储、添加、删除聚合元素以及创建迭代器…

实战案例:Python批量识别银行卡号码并且写入Excel,初学者也可以轻松使用~

大家好&#xff0c;这里是程序员晚枫&#xff0c; 今天我们继续学习Python自动化办公&#xff1a;每次有新员工入职&#xff0c;都要收集大量的工资卡信息&#xff0c;并且生成Excel文档&#xff0c;能不能用Python准确、快速地解决呢&#xff1f; 今天我们就来学习一下&…

【CCNA | 网络模拟器CPT系列】Cisco Packet Tracer 8.2.0 的安装 Ⅰ

目录1. 下载 Cisco Packet Tracer2. 安装 Cisco Packet Tracer&#xff08;1&#xff09;许可协议界面&#xff08;2&#xff09;选择安装目录&#xff08;3&#xff09;选择开始菜单文件夹&#xff08;4&#xff09;选择附加任务&#xff08;5&#xff09;确认设置选择&#x…

K8S环境安装

K8S环境安装 下面是环境的主机名和IP 主机名ipk8smaster192.168.68.150k8snode1192.168.68.151k8snode2192.168.68.152 1、安装docker 配置yum源 sudo yum install -y yum-utils sudo yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/d…

不受支持的 Mac 上的通用控制(现已支持 macOS Ventura)

现已支持 macOS Ventura 请访问原文链接&#xff1a;不受支持的 Mac 上的通用控制&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;www.sysin.org 本文为 在不受支持的 Mac 上安装 macOS Ventura、Monterey、Big Sur (OpenCore Legacy Pa…

【Effective_Objective-C_5内存管理】

文章目录前言29.理解引用计数引用计数的工作原理关闭ARC模式引用计数的增减理解一下引用计数存在属性存取方法中的内存管理自动释放池保留环要点30.以ARC简化引用计数使用ARC时必须遵循的方法和命名规则-变量的内存管理语法意义ARC如何清理实例变量覆写内存管理的方法要点31.在…

eclipse调试没反应,没有Debug窗口弹出

用eclipse调试&#xff0c;点击“Run”“Debug as”没有反应&#xff0c;debug视图没有弹出一、打开Preferences点击“Windows”&#xff0c;点击“Preferences”&#xff0c;找到“Run/Debug”下面的“Perspectives”&#xff0c;我的打开是这个样子&#xff0c;要修改一些选项…

【JavaSE成神之路】一文搞定static关键字

哈喽&#xff0c;我是兔哥呀&#xff0c;今天就让我们继续这个JavaSE成神之路&#xff01; 这一节啊&#xff0c;咱们要学习的内容是Java的static关键字。 1. 我们是怎么使用static关键字的 我们其实一直在用static关键字&#xff0c;比如main方法&#xff1a; public stati…

CSS样式基础内容3

目录 CSS三大特性 层叠性 继承性 行高的继承性 优先级 权重的叠加 CSS盒子模型 border边框 边框的复合写法 表格的细线边框 边框会影响盒子的实际大小 内边距 padding会影响盒子实际大小 网页导航案例 外边距 外边距合并 相邻块元素垂直外边距的合并 清除内外…

go语言实战(猜数字+在线词典+服务器)

go语言实战案例1.猜数字游戏2. 词典2.1 request2.2 response2.3 修改写死的单词为用户可写的word2.4 细节优化2.4.1 防止403、404等状态码2.4.2 增强输出可读性2.5 在线词典的最终代码3.SOCKS5代理服务器3.1 tcp echo server3.2 验证3.3 请求3.4 完整代理实现作业1.修改第一个猜…

cadence SPB17.4 S032 - allegro出的槽孔文件不用做任何处理就可以交给板厂生产

文章目录cadence SPB17.4 S032 - allegro出的槽孔文件不用做任何处理就可以交给板厂生产前言备注补充 - CAM350V14.6 - 在win10 22H2下不能正常用ENDcadence SPB17.4 S032 - allegro出的槽孔文件不用做任何处理就可以交给板厂生产 前言 以前交给板厂gerber文件时, 有一次, 板…

Pandas学习笔记-Day1安装与文件读取

Day1 安装与文件读取了解与安装什么是pandas?安装pandas?pandas数据读取读取mysql数据库了解与安装 什么是pandas? 处理数据一般分为几个阶段&#xff1a;数据整理与清洗、数据分析与建模、数据可视化与制表&#xff0c;Pandas 是处理数据的理想工具。 安装pandas? 如果…

自动驾驶感知——图像数据处理数学方法

文章目录1. 二值化操作2. 卷积操作3. 均值滤波4. 高斯滤波5. 图像梯度算子5.1 Prewitt梯度算子5.2 Sobel梯度算子5.3 Laplace二阶梯度6. 边缘特征点提取算子7. 基于规则的特征点提取8. 最小二乘拟合方法9. RANSAC曲线拟合10. Hough Transform 霍夫变换11. 基于学习的特征点提取…

图论(4)Floyd算法

一、概述 floyd算法主要作用有&#xff1a;1.找最短路 2.求传递闭包 3.找最小环 4.求出恰好经过k条边的最短路 本文章将介绍floyd求最短路的证明以及以上四个作用的实践。 二、floyd算法求最短路的证明 之前就多次提到过图论与dp问题的联系&#xff0c;floyd算法可以…

Go依赖管理

"做讨厌潮汐的稚童&#xff0c;祈祷月球失踪。"一、背景我们写一个程序&#xff0c;例如输出hello world 或者 一个猜数字游戏&#xff0c;这些用到的单体函数接口&#xff0c;只需要依赖一些原生的SDK即可。但是&#xff0c;面对复杂的实际问题、工程&#xff0c;仅…

使用构建工具创建Vue项目

使用构建工具创建Vue项目一、使用vue-cli脚手架构建vue项目创建步骤&#xff1a;二、使用 Vite构建vue项目创建步骤&#xff1a;一、使用vue-cli脚手架构建vue项目 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统&#xff0c;提供&#xff1a; 1 通过 vue/cli 实现的交互式…

演讲比赛流程管理系统

1. 演讲比赛程序需求 1.2程序功能 2. 项目创建 创建名为speech_contest的目录名称 3. 创建管理类 功能描述&#xff1a; 提供菜单界面与用户交互 对演讲比赛流程进行控制 与文件的读写交互 3.1 创建文件 在头文件和源文件的文件夹下分别创建speech…

ubuntu 学习笔记

环境&#xff1a;Ubuntu 22.04 桌面版和server版 一、更换国内源&#xff0c;下载更快 1、源文件路径&#xff1a;/etc/apt/sources.list&#xff0c;到这个路径下备份一下源文件。 #备份原有配置文件命令 sudo cp -r /etc/apt/sources.list /etc/apt/sources.list.backup …