polyloss详解

news2024/11/15 19:34:59

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_loss


def 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_loss


def 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] + labels
    prob = 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_loss


def 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.coloradmin.cn/o/1141383.html

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

相关文章

JVM虚拟机:Java对象的头信息有什么?

本文重点 在前面的课程中,我们学习了对象头,其中对象头包含Mark Word和class pointer,当然数组还会有一个数组长度。本文主要分析Mark Work中包含的信息。 Mark Word 以下两张图是一个意思: 32位 32位 64位 以上就是Mark Word会存储的信息,这个意思是说Java对象在不同…

如何使用手机蓝牙设备作为电脑的解锁工具像动态锁那样,蓝牙接近了电脑,电脑自动解锁无需输入开机密码

环境&#xff1a; Win10 专业版 远程解锁 蓝牙解锁小程序 问题描述&#xff1a; 如何使用手机蓝牙设备作为电脑的解锁工具像动态锁那样&#xff0c;蓝牙接近了电脑&#xff0c;电脑自动解锁无需输入开机密码 手机不需要拿出来&#xff0c;在口袋里就可以自动解锁&#xff…

「林曦的亲子美育」讲讲关于阅读的那些事儿

「林曦的亲子美育」是“林曦的小世界”2023年策划的一档新栏目。林曦老师作为一个“小男生的妈妈”,在这些年分享了许多关于亲子教育的心得&#xff1a;以“美”作为连接和最高标准&#xff0c;会护持着小朋友的选择和人生。教育是一个生活的过程。做一餐饭、读一本书、看一张画…

存储器概述

一、存储系统基本概念

vector容器初始化和对象

&#xff08;1&#xff09;a.assign(b.begin(), b.begin()3); //b为向量&#xff0c;将b的0~2个元素构成的向量赋给a &#xff08;2&#xff09;a.assign(4,2); //是a只含4个元素&#xff0c;且每个元素为2 &#xff08;3&#xff09;a.back(); //返回a的最后一个元素 &#xf…

Python入口顶部人体检测统计进出人数

程序示例精选 Python入口顶部人体检测统计进出人数 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《Python入口顶部人体检测统计进出人数》编写代码&#xff0c;代码整洁&#xff0c;规则&a…

【OpenCV实现平滑图像形态学变化】

文章目录 概要目标腐蚀膨胀开运算结构元素&#xff08;内核&#xff09;小结 概要 形态学变化是一组简单的图像操作&#xff0c;主要用于处理二值图像&#xff0c;即只包含黑和白两种颜色的图像。这些操作通常需要两个输入&#xff0c;原始图像和一个内核&#xff08;kernel&a…

计算机操作系统重点概念整理-第三章 进程同步【期末复习|考研复习】

第三章 进程同步 【期末复习|考研复习】 计算机系统系列文章传送门&#xff1a; 第一章 计算机系统概述 第二章 进程管理 第三章 进程同步 第四章 内存管理 第五章 文件管理 第六章 输出输出I/O管理 文章目录 第三章 进程同步 【期末复习|考研复习】前言三、进程同步3.1 临界资…

腾讯云优惠券、代金券、云服务器折扣券领取方法及使用教程

腾讯云优惠券是腾讯云为用户提供的一种优惠活动&#xff0c;通常包括代金券和折扣券两种类型&#xff0c;代金券可以在购买腾讯云相关产品时直接抵扣订单金额&#xff0c;而折扣券则可以在购买腾讯云相关产品时享受一定的折扣。 腾讯云作为国内领先的云计算服务提供商&#xff…

构建客户门户的痛点及低代码工具解决方案

企业如何做好数字化转型呢&#xff1f; 如果笼统地说起“数字化转型”&#xff0c;这个概念太大了&#xff0c;它涉及到了企业管理中的方方面面。数字化转型是一个持续不断的过程&#xff0c;既要在整体上进行数字规划&#xff0c;也需要从细节入手&#xff0c;将每一个步骤进…

MQTT(详解)

什么是MQTT MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级的通信协议&#xff0c;用于在设备之间传输消息。它通常用于物联网&#xff08;IoT&#xff09;和传感器网络中&#xff0c;可以在不同设备之间进行可靠的通信&#xff0c;而且资源消耗…

单元测试,集成测试,系统测试的区别是什么?

实际的测试工作当中&#xff0c;我们会从不同的角度对软件测试的活动进行分类&#xff0c;题主说的“单元测试&#xff0c;集成测试&#xff0c;系统测试”&#xff0c;是按照开发阶段进行测试活动的划分。这种划分完整的分类&#xff0c;其实是分为四种“单元测试&#xff0c;…

分布式消息队列:Rabbitmq(2)

目录 一:交换机 1:Direct交换机 1.1生产者端代码: 1.2:消费者端代码: 2:Topic主题交换机 2.1:生产者代码: 2.2:消费者代码: 二:核心特性 2.1:消息过期机制 2.1.1:给队列中的全部消息指定过期时间 2.1.2:给某条消息指定过期时间 2.2:死信队列 一:交换机 1:Direct交…

Gloss优化

Gloss优化&#xff0c;Route – Gloss – Parameters .清除不必要的线和过孔&#xff0c;圆滑线&#xff0c;焊盘中间的线&#xff0c;把转角变成圆弧&#xff0c;自动布线总会产生一些布线效果不好、多余过孔等问题。此时可以利用allegro提供的Gloss命令对设计进行优化和调整&…

Facebook广告效果数据获取

一、背景 公司每年在Facebook和Google上投放了大量的广告&#xff0c;我总不能让老板登录Facebook广告投放平台上去看广告效果&#xff0c;其实老板只关注每天花了多少钱引来了多少客户&#xff0c;每个客户平均花费多少钱&#xff0c;其它的他才不关心&#xff0c;有Facebook…

工作小计-GPU硬编以及依赖库 nvcuvidnvidia-encode

工作小计-GPU编码以及依赖库 已经是第三篇关于编解码的记录了。项目中用到GPU编码很久了&#xff0c;因为yuv太大&#xff0c;所以编码显得很重要。这次遇到的问题是环境的搭建问题。需要把开发机上的环境放到docker中&#xff0c;以保证docker中同样可以进行GPU的编码。 1 定…

SpringCloud 微服务全栈体系(五)

第七章 Feign 远程调用 先来看我们以前利用 RestTemplate 发起远程调用的代码&#xff1a; 存在下面的问题&#xff1a; 代码可读性差&#xff0c;编程体验不统一 参数复杂 URL 难以维护 Feign 是一个声明式的 http 客户端&#xff0c;官方地址&#xff1a;https://github.…

国家数据局正式揭牌,数据专业融合型人才迎来发展良机

文章目录 每日一句正能量摘要《数据要素安全流通》《Python数据挖掘&#xff1a;入门、进阶与实用案例分析》《数据保护&#xff1a;工作负载的可恢复性 》《Data Mesh权威指南》《分布式统一大数据虚拟文件系统 Alluxio原理、技术与实践》《云原生数据中台&#xff1a;架构、方…

【安装tensorflow-CPU版本】

一、安装目的二、安装过程三、总结 一、安装目的 使自己的jupyter能用tensorflow 二、安装过程 首先打开anaconda prompt 接着输入conda list 查看自己是否安装了tensorflow 在 Python 中使用 pip 工具来升级 pip 自身并指定了使用清华大学的镜像源进行安装 python -m pip …

防雷接地检测方法应用方案

防雷接地是指为了保护建筑物、设备和人员免受雷电危害而采取的将雷电电流导入地面的措施。 地凯科技防雷接地的测试方案一般包括以下几个方面&#xff1a; 测试目的&#xff1a;明确测试的对象、范围、要求和依据。 测试内容&#xff1a;根据不同类型的防雷接地装置&#xf…