polyloss详解

1、常见的泰勒展开公式

2、polyloss引入动机

2.1、polyloss定义

polyloss通过泰勒展开来逼近损失函数的简单框架,将损失函数设计为多项式函数的线性组合

2.2、polyloss主要贡献

提出了一个新的框架来理解和设计损失函数

PolyLoss可以让多项式基根据目标任务和数据集进行调整

3、polyloss具体内容

3.1、cross-entory、focal-loss的泰勒展开式

3.2、cross-entropy、focal loss和polyloss的统一视图

cross-entropy、foacl loss以及polyloss的统一视图主要讨论了,polyloss的灵活性。

polyloss可以比cross-entropy更加陡峭或比focal loss更加平滑 。focal loss泰勒展开式,多项式因子只能水平移动(右图绿色箭头),新框架下的polyloss支持垂直移动(右图红色箭头)。

3.3、不同loss通过polyloss框架展开

以cross-entropy为例,在polyloss框架下,cross-entropy有4种展开形式。1、原始的泰勒展开式;2、去掉泰勒展开式的高阶项;3、引入\varepsilon超参的polyloss-n框架;4、polyloss-n特例,n=1时的polyloss-1 。

3.4、基于交叉熵对比N值的选择对loss的影响

(a)图显示,cross-entropy的泰勒展开式L_{drop},只有在n取得较大的情况下,才能达到和cross-entory等效的效果。(b)图显示,调整学习率对并未提升L_{drop}的分类效果,在lr=0.1时,获得了最好的效果。

3.5、poly-n

3.5.1、poly-n结构

为了能灵活调整多项式的权重,变更多项式为如下结构:

3.5.2、poly-n效果对比

图(a)讨论了准确率随\varepsilon变化的情况,当\varepsilon=1时,准确率越来越平缓。图(b)讨论了polyloss展开式第一项对梯度的贡献,其贡献至少占了65%。

n阶网格搜索,探索n对polyloss结构的影响。

4、polyloss效果对比

4.1、提速

达到相同的效果,polyloss比cross-entropy快了2倍。

4.2、2d-图像分类任务上效果对比

4.2.1、多项式中\varepsilon对准确率的影响

\varepsilon=2时趋于平缓,\varepsilon为负时,会出现负项的效果。

4.2.2、提升效果对比

accurcy

4.3、COCO 上的 2D 实例分割和目标检测

4.3.1、AP/AR指标对比

\varepsilon=-1时,效果提升显著

4.3.2、AP/AR指标对比

r-cnn通过降低p_{t}来提高效果,\varepsilon取负数时,效果优于正常的cross-entropy

4.4、3-d目标检查中,polyloss的设计及效果

4.4.1、loss设计

4.4.2、效果比较

车辆检测和行人检测效果不同polyloss效果对比

4.4.3、focal loss polyloss框架表示可视化如下

5、polyloss实现

def cross_entropy_tf(logits, labels, class_number):"""TF交叉熵损失函数"""labels = tf.one_hot(labels, class_number)ce_loss = tf.nn.softmax_cross_entropy_with_logits(labels=labels, logits=logits)return ce_lossdef poly1_cross_entropy_tf(logits, labels, class_number, epsilon=1.0):"""poly_loss针对交叉熵损失函数优化,使用增加第一个多项式系数"""labels = tf.one_hot(labels, class_number)ce_loss = tf.nn.softmax_cross_entropy_with_logits(labels=labels, logits=logits)poly1 = tf.reduce_sum(labels * tf.nn.softmax(logits), axis=-1)poly1_loss = ce_loss + epsilon * (1 - poly1)return poly1_lossdef focal_loss_tf(logits, labels, class_number, alpha=0.25, gamma=2.0, epsilon=1.e-7):"""TF focal_loss函数"""alpha = tf.constant(alpha, dtype=tf.float32)y_true = tf.one_hot(0, class_number)alpha = y_true * alpha + (tf.ones_like(y_true) - y_true) * (1 - alpha)labels = tf.cast(labels, dtype=tf.int32)logits = tf.cast(logits, tf.float32)softmax = tf.reshape(tf.nn.softmax(logits), [-1])labels_shift = tf.range(0, logits.shape[0]) * logits.shape[1] + labelsprob = tf.gather(softmax, labels_shift)prob = tf.clip_by_value(prob, epsilon, 1. - epsilon)alpha_choice = tf.gather(alpha, labels)weight = tf.pow(tf.subtract(1., prob), gamma)weight = tf.multiply(alpha_choice, weight)fc_loss = -tf.multiply(weight, tf.log(prob))return fc_lossdef poly1_focal_loss_tf(logits, labels, class_number=3, alpha=0.25, gamma=2.0, epsilon=1.0):fc_loss = focal_loss_tf(logits, labels, class_number, alpha, gamma)p = tf.math.sigmoid(logits)labels = tf.one_hot(labels, class_number)poly1 = labels * p + (1 - labels) * (1 - p)poly1_loss = fc_loss + tf.reduce_mean(epsilon * tf.math.pow(1 - poly1, 2 + 1), axis=-1)return poly1_loss

6、polyone_cross_entory 拆解看

cross_entory计算调用tf.nn.softmax_cross_entropy_with_logits_v2,具体步骤如下:

  1. 首先,对 logits 进行 softmax 归一化,得到预测的概率分布 softmax_logits
    • softmax 函数的计算公式:softmax(x) = exp(x) / reduce_sum(exp(x), axis)
    • 其中,exp(x) 是指数函数,reduce_sum 是对指数函数结果按指定轴求和。
    • 归一化后的结果 softmax_logits 的形状与 logits 相同,都是 (N, C)
  2. 接下来,根据 labels 和 softmax_logits 计算交叉熵损失。
    • 交叉熵损失的计算公式:loss = -reduce_sum(labels * log(softmax_logits), axis)
    • 其中,log 是自然对数函数,reduce_sum 是对元素按指定轴求和。
    • 最终的损失 loss 的形状是 (N,),其中每个元素表示对应样本的损失。

cross entory的poly-one展开项计算如下:

pt = tf.reduce_sum(labels_for_softmax * tf.nn.softmax(logits_for_softmax), axis=-1)
ce = tf.compat.v1.nn.softmax_cross_entropy_with_logits_v2(labels_for_softmax,logits_for_softmax)
losses = ce + self._epsilon * (1 - pt)

pt与ce分别计算结果

labels = tf.constant([[0.0, 0.0, 1.0], [1.0, 0.0, 0.0]])
logits = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
loss1 = tf.compat.v1.nn.softmax_cross_entropy_with_logits_v2(labels, logits)
softmax_logits = tf.nn.softmax(logits)
loss2 = tf.reduce_sum(labels * softmax_logits, axis=-1)

loss1与loss2分别输出

#loss1输出
<tf.Tensor: shape=(2,), dtype=float32, numpy=array([0.40760595, 2.407606  ], dtype=float32)>
#loss2输出
<tf.Tensor: shape=(2,), dtype=float32, numpy=array([0.66524094, 0.09003057], dtype=float32)>

参考网址 

https://zhuanlan.zhihu.com/p/510626670

【Python-Tensorflow】tf.nn.softmax_cross_entropy_with_logits_v2()解析与使用-CSDN博客

高等数学(九)泰勒展开式 - 知乎

lnx的泰勒展开式该怎么写? - 知乎

https://blog.csdn.net/dawnyi_yang/article/details/124634171

Focal loss论文详解 - 知乎

https://arxiv.org/pdf/2204.12511.pdf

物体检测评估指标简介(AP和AR) - 简书

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL主从复制(基于GTID--事务ID方式)

目录 一、GTID相关概念1.GTID 是什么&#xff1f;2.GTID主从复制方式概念3.GTID的优缺点 二、GTID工作原理三、部署主从复制四、测试同步1.主库上新建数据库2.从库上查看是否同步成功 五、重设从库六、常见故障七、故障切换八、GTID的一些疑问1.为什么基于GTID的同步也要打开bi…

风力发电功率预测(CEEMDAN-LSTM-CNN-CBAM模型,Python代码)

1.前言 1.1.运行效果&#xff1a;风力发电功率预测&#xff08;CEEMDAN-LSTM-CNN-CBAM模型&#xff0c;Python代码&#xff09;_哔哩哔哩_bilibili 1.2.环境库&#xff1a; 如果库版本不一样&#xff0c; 一般也可以运行&#xff0c;这里展示我运行时候的库版本&#xff0c;是…

android开发使用OkHttp自带的WebSocket实现IM功能

一、背景 android app开发经常会有IM需求&#xff0c;很多新手不晓得如何入手&#xff0c;难点在于通讯不中断。其实android发展到今天&#xff0c;很多技术都很完善&#xff0c;有很多类似框架可以实现。例如有&#xff1a;okhttp自带的websocket框架、easysocket等等。本文主…

损失函数和目标函数|知识补充

这张图中&#xff0c;横坐标size表示房屋的大小&#xff0c;纵坐标price表示房屋的价格&#xff0c;现在需要建立模型来表示两者之间的关系。 对于给定的输入x&#xff0c;模型会有一个输出f(x)&#xff0c;用一个函数来度量拟合的程度&#xff0c;也就是真实值和预测值之间的…

“人类高质量数据”如何训练计算机视觉模型?

人类的视觉系统可以复制吗&#xff1f; 答案是肯定的。 计算机视觉 (Computer Vision) 技术的不断普及&#xff0c;让机器识别和处理图像就像人的大脑一样&#xff0c;且速度更快、更准确。 机器像人类一样去“思考” 计算机视觉 (Computer Vision) 是近年来人工智能增长最快…

PyCharm社区版安装

PyCharm社区版安装 到中国官网下载 https://www.jetbrains.com/zh-cn/pycharm/download/?sectionwindows 首次创建项目&#xff0c;会自动下载安装Python 3.9 社区版的区别 社区版的区别

Spigot 通过 BuildTools 构建 MineCraft Spigot 官方服务端文件

文章目录 从 Spigot 官方下载 BuildTools spigotmc / buildtools确保你有正确版本的 Java&#xff08;例如构建 1.20.2 的服务端一般需要有 Java17&#xff09;在 BuildTools.jar 同名文件夹打开 cmd 命令行&#xff08;点击红色圈圈区域输入 cmd 按 enter 即可&#xff09; …

如何使用 nvm-windows 这个工具来管理你电脑上的Node.js版本

nvm-windows 是一个用于管理在 Windows 上安装的多个 Node.js 版本的工具。以下是安装和使用 nvm-windows 的步骤&#xff1a; 第1步&#xff1a;下载 nvm-windows 访问 nvm-windows 的 GitHub发布页面.下载最新版本的 nvm-setup.zip 文件。 第2步&#xff1a;安装 nvm-wind…

Android APK瘦身实践:二次瘦身如何再减少大小?(4M—2.9M)

瘦身前 因为平时就考虑到大小的限制&#xff0c;所以很多工作已经做过了&#xff0c;如下列举现在的状态&#xff1a; 7.3M&#xff08;Debug版本&#xff09;和6.5M&#xff08;Release版本&#xff09; 开启minifyEnabled 开启shrinkResources 已经去除不相关的大型库 图片和…

ASP.NET Core3.1 API 创建(Swagger配置、数据库连接Sql Server)、开发、部署

文章目录 创建项目点击Nuget安装包删除原有controllers编辑新建controll、添加注释Startup 注册Swagger服务使用swagger中间件配置XML注释更改启动端口 launchsettings.json在startup.cs跨域处理运行 数据库设计与连接安装库新建类继承框架根据数据库表设计对应设计类在DataCon…

C#版字节跳动SDK - SKIT.FlurlHttpClient.ByteDance

前言 在我们日常开发工作中对接第三方开放平台&#xff0c;找一款封装完善且全面的SDK能够大大的简化我们的开发难度和提高工作效率。今天给大家推荐一款C#开源、功能完善的字节跳动SDK&#xff1a;SKIT.FlurlHttpClient.ByteDance。 项目官方介绍 可能是全网唯一的 C# 版字节…

报错:Could not resolve host: mirrorlist.centos.org;Unknown error

报错&#xff1a;Could not resolve host: mirrorlist.centos.org;Unknown error 一般是因为网络配置错误导致无法连接外网&#xff0c;我们先尝试ping一下www.baidu.com发现无法ping通。 果然&#xff0c;接下来我们就开始排查吧&#xff01;&#xff01; 1.网络配置查看 打开…

【2024秋招】2023-9-16 贝壳后端开发二面

1 自我介绍 2 秒杀系统 2.1 超卖怎么解决 3 redis 3.1 过期策略 3.2 过期算法 4 kafka 4.1 说一说你对kafka的了解 4.2 如何保证事务性消息 4.3 如何保证消息不丢失 4.4 消息队列的两种通信方式 点对点模式 如上图所示&#xff0c;点对点模式通常是基于拉取或者轮询…

QWidget|QFrame设置背景透明且可以带有边框颜色

QWidget|QFrame设置背景透明且可以带有边框颜色 Chapter1 《Qt》part 6 QSS Qt样式表——界面美化1($$$)Chapter2 【QT】QSS美化——基础知识Chapter3 QWidget|QFrame设置背景透明且可以带有边框颜色参考链接Chapter4 Qt 中设置窗体(QWidget)透明度的几种方法1. 设置窗体的背景…

源码角度分析Java 循环中删除数据为什么会报异常

一、源码角度分析Java 循环中删除数据为什么会报异常 相信大家在之前或多或少都知道 Java 中在增强 for中删除数据会抛出&#xff1a;java.util.ConcurrentModificationException 异常&#xff0c;例如&#xff1a;如下所示程序&#xff1a; public class RmTest {public sta…

【微信小程序】发布投票与用户投票完整讲解

目录 前言 组件功能示例 一、数据库 二、后端接口定义 三、前端准备 3.1 定义连接接口 3.2 Vant Weapp UI 组件库 3.3 授权登录与相关工具 四、小程序编写 4.1 投票组件 WXML WXSS JSON WXJS 效果展示讲解&#xff1a; 4.2 发布投票组件 WXML WXSS JSON WX…

qt hiRedis封装使用

qt Redis使用_大别山的孩子的博客-CSDN博客文章浏览阅读2.6k次。代码是对redis常见的hash的封装和使用每个函数都亲自测试过关于如何安装hiredis模块&#xff0c;网上一搜一大堆&#xff0c;这里不在赘述&#xff0c;如有其他问题欢迎留言交流。头文件#ifndef REDISBASEMODULE_…

windows PC virtualBox 配置

效果&#xff1a; oracle vitualbox 可以访问通PC主机&#xff0c;可以访问外网: 注意&#xff0c;如果docker0网络地址&#xff0c;和PC主机的网络地址冲突了&#xff0c;需要变更docker的网络地址&#xff1a; root/home/mysqlPcap/anti-tamper $ cat /etc/docker/daemon.js…

【计算机网络】从输入URL到页面都显示经历了什么??

文字总结 ① DNS 解析&#xff1a;当用户输入一个网址并按下回车键的时候&#xff0c;浏览器获得一个域名&#xff0c;而在实际通信过程中&#xff0c;我们需要的是一个 IP 地址&#xff0c;因此我们需要先把域名转换成相应 IP 地址。浏览器会首先从缓存中找是否存在域名&…

【C语言】memmove()函数(拷贝重叠内存块函数详解)

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:C语言 ⚙️操作环境:Visual Studio 2022 目录 一.memmove()函数简介 1.函数功能 2.函数参数 1>.void * destination 2>.onst void * source 3>.size_t num 3.函数返回值 4.函数头文件 二.memmove()函数…