动态加权平衡损失:深度神经网络的类不平衡学习和置信度校准

本文主要是介绍动态加权平衡损失:深度神经网络的类不平衡学习和置信度校准,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

系列文章目录


文章目录

  • 系列文章目录
  • 前言
  • 一、研究目的
  • 二、研究方法
    • 创新点
    • 处理类不平衡的大多数方法
    • 交叉熵损失函数
    • Brier Score
  • 三、DWB Loss
  • 总结


前言

Dynamically Weighted Balanced Loss: ClassImbalanced Learning and Confidence Calibration of Deep Neural Networks
下载地址:DOI: 10.1109/tnnls.2020.3047335


一、研究目的

解决深度学习中的类分布不平衡问题,提出了一种基于类平衡动态加权损失函数的类再平衡策略,其中权重是根据类频率和地面真实类的预测概率分配的。动态加权方案根据预测分数自适应其权重的能力允许模型调整具有不同难度的实例,从而导致由硬少数类样本驱动的梯度更新。在网络入侵检测(CICIDS2017数据集)和医学成像(ISIC2019数据集)的不同应用中对高度不平衡的数据进行的实验显示出强大的泛化能力。支持上级经验性能的理论结果提供了理由的有效性,建议动态加权平衡(DWB)损失函数。

二、研究方法

我们提出了一种动态策略来分配类权重,重点放在难以训练的实例上,并提出了一种称为动态加权平衡(DWB)损失的新型损失函数,该损失函数能够自然处理类不平衡,同时还可以提高校准性能。为了说明所提出的方法的一般性,在网络入侵检测和皮肤病变诊断中具有挑战性的现实应用进行了实验。

创新点

分配的权重不是固定的权重方案,而是根据数据实例的预测难度自适应其规模;我们将类别不平衡和置信度估计的可靠性联系起来。据我们所知,以前的研究还没有解决这两个问题在一个统一的方法在DL的上下文中。
因此,本文提出了以下主要创新:
1)基于类再平衡策略的可微分损失公式,其中权重在训练过程中动态变化,
2)允许学习已经良好校准的模型的框架,从而同时解决DNN中的类不平衡和类成员概率的可靠性。

处理类不平衡的大多数方法

处理类不平衡的大多数方法可以分为两类:数据级方法和算法级方法。

数据级方法:通过采用重新分配策略来平衡数据集,从而改变原始数据中的类分布。

  1. 随机过采样:复制少数类中的实例来处理类不平衡,从而增加少数类。
  2. 随机欠采样: 随机删除多数类中的实例以匹配少数类的基数。
  3. 抽样方法来人工平衡数据。

过采样可能会导致过拟合,并可能加重计算负担,而欠采样可能会消除有用的信息,

算法级方法:算法级方法涉及调整分类器,并可进一步分为集成方法和成本敏感方法。

  1. 集成方法:最广泛使用的方法包括bagging和boosting基于集成的方法。
  2. 代价敏感学习:重新缩放数据,通过为不同类别的训练示例分配不同的权重(重新加权),重新分配训练实例,或基于其误分类成本移动决策阈值来执行

不同于以前的方法,需要手工制作的成本矩阵,分配固定的权重,或涉及算法修改,我们提出了一个损失函数,其中包含在训练过程中调整的动态加权因子,以解决不平衡数据的训练偏差,这也会导致校准良好的置信度估计。它不需要任何额外的超参数调优,可以迅速应用于任何DNN架构。

交叉熵损失函数

参考文章
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Brier Score

用于衡量概率校准的一种评价函数。
包含了三部分:均方误差(mean squared error, MSE)、方差(variance)和熵(entropy)

三、DWB Loss

DWB Loss 结合了动态加权的交叉熵损失项和正则化组件,以及对类别权重的灵活设置,旨在更好地处理严重倾斜的类别分布,使得模型能够更好地适应不平衡的情况,并获得更好的训练效果。

引入了一个基于动态加权的分类器目标函数,该目标函数基于地面真值类的预测概率,为难以训练的实例分配更高的权重,我们称之为DWB损失。为方便起见,设fj(Xi ; θ)用pij表示。因此,pij是实例Xi的类j的预测概率。

所提出的损失函数由两个项组成:动态加权CE和等于Brier评分(BS)熵的正则化分量,其可以被认为是导致更好校准的可靠性分量。

在这里插入图片描述

  • ( n ) 是训练样本的数量
  • ( c ) 是类别的数量
  • ( w_j ) 是类别 ( j ) 的权重
  • ( p_{ij} ) 是样本 ( i ) 属于类别 ( j ) 的预测概率
  • ( y_{ij} ) 是样本 ( i ) 的标签,使用了 one-hot 编码

第一项在这里插入图片描述
交叉熵损失项,其中 yij log(pij)表示模型对类别 (j) 的预测与实际标签的交叉熵损失,乘以 (w_j (1-p_{ij})) 来调整权重,使得难以分类的样本获得更高的权重。
第二项
在这里插入图片描述
是正则化组件,它等于 Brier score 的熵,用于提高模型的校准性能。

类权重wj可以被处理为通过交叉验证从数据中学习的超参数,或者与类频率的倒数成比例地设置。我们设置wj等于多数类的类频率和类频率nj(在训练数据集上计算)的对数比,如下所示:
在这里插入图片描述

类别权重设置:

类别权重 (w_j) 可以根据实际情况进行设置,文中提到的一种设置方法是将 (w_j) 设为最多类别的频率与类别 (j) 的频率的对数比例加1。这样,对于具有 (w_j) 类别代价的类别 (j),其分类错误将比具有权重为1的多数类别的错误受到 (w_j) 倍的惩罚。
总体来说,DWB Loss 结合了动态加权的交叉熵损失项和正则化组件,以及对类别权重的灵活设置,旨在更好地处理严重倾斜的类别分布,使得模型能够更好地适应不平衡的情况,并获得更好的训练效果。


总结

DWB损失函数通过动态加权的方式,更注重难以训练的实例,从而提高模型在类别不平衡和难易样本实例方面的性能表现。

这篇关于动态加权平衡损失:深度神经网络的类不平衡学习和置信度校准的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/791757

相关文章

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

C#如何动态创建Label,及动态label事件

《C#如何动态创建Label,及动态label事件》:本文主要介绍C#如何动态创建Label,及动态label事件,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#如何动态创建Label,及动态label事件第一点:switch中的生成我们的label事件接着,

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Redis中高并发读写性能的深度解析与优化

《Redis中高并发读写性能的深度解析与优化》Redis作为一款高性能的内存数据库,广泛应用于缓存、消息队列、实时统计等场景,本文将深入探讨Redis的读写并发能力,感兴趣的小伙伴可以了解下... 目录引言一、Redis 并发能力概述1.1 Redis 的读写性能1.2 影响 Redis 并发能力的因素二、

最新Spring Security实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)

《最新SpringSecurity实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)》本章节介绍了如何通过SpringSecurity实现从配置自定义登录页面、表单登录处理逻辑的配置,并简单模拟... 目录前言改造准备开始登录页改造自定义用户名密码登陆成功失败跳转问题自定义登出前后端分离适配方案结语前言

mybatis-plus 实现查询表名动态修改的示例代码

《mybatis-plus实现查询表名动态修改的示例代码》通过MyBatis-Plus实现表名的动态替换,根据配置或入参选择不同的表,本文主要介绍了mybatis-plus实现查询表名动态修改的示... 目录实现数据库初始化依赖包配置读取类设置 myBATis-plus 插件测试通过 mybatis-plu

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

基于Canvas的Html5多时区动态时钟实战代码

《基于Canvas的Html5多时区动态时钟实战代码》:本文主要介绍了如何使用Canvas在HTML5上实现一个多时区动态时钟的web展示,通过Canvas的API,可以绘制出6个不同城市的时钟,并且这些时钟可以动态转动,每个时钟上都会标注出对应的24小时制时间,详细内容请阅读本文,希望能对你有所帮助...