Logit Adjust

article/2025/9/18 7:25:55

Logit Adjust

BER

我们在分类问题中常用的误分类函数使得分类器最终学到的分布:
P ( y ∣ x ) ∝ P ( y ) P ( x ∣ y ) P(y|x) \propto P(y)P(x|y) P(yx)P(y)P(xy)
假设在一个不平衡猫狗二分类问题中,狗是一个小类,只有整个数据集的1%的数据量。则 P ( y ) = 0.01 P(y)=0.01 P(y)=0.01,这样无论 P ( x ∣ y ) P(x|y) P(xy)有多大,右边这一项都会很小。所以作者使用BER即banlance error rate,

首先举一个例子方便快速理解BER的思想:
源地址
在这里插入图片描述

根据上面这个混淆矩阵有 B E R = 0.5 ∗ ( b a + b + c c + d ) BER = 0.5 * (\frac{b}{a+b}+\frac{c}{c+d}) BER=0.5(a+bb+c+dc)通常的误差计算公式则为 E R = b + c a + b + c + d ER=\frac{b + c}{a+b+c+d} ER=a+b+c+db+c再看原文中给出的BER的公式:
B E R ( f ) = 1 L ∑ y ∈ [ L ] P x ∣ y ( y ∉ a r g m a x y ′ ∈ y ^ f y ′ ( x ) ) BER(f) = \frac{1}{L}\sum_{y \in [L]}P_{x|y} (y \notin argmax_{y^{\prime} \in \hat{y}}f_{y^{\prime}}(x)) BER(f)=L1y[L]Pxy(y/argmaxyy^fy(x))
y ^ \hat{y} y^等价于原文中的花体y,有 y ^ = [ L ] = 1 , 2 , … L . \hat{y}=[L]={1, 2, \dots L}. y^=[L]=1,2,L.上式右边用人话翻译过来就是“把所有(类别) y y y被分类器 f y ′ ( x ) f_{y^\prime}(x) fy(x)误分类的概率加起来,最后对类别数做平均”。精髓就在于误差的计算是class-wise的,想想我们通常评估误差率,都是用一个batch中,用 误 分 类 样 本 数 b a t c h s i z e \frac{误分类样本数}{batchsize} batchsize来表示,这个时候分类器就可以偷懒,只要把所有样本都预测为大类就可以在误差率这个评价指标上表现良好。一个问题在于,为甚么上式积分符号下面有一个” x ∣ y x|y xy”,这个条件函数的假设是怎么回事? 在我的理解中x是样本,再结合最开始举得例子, P ( x ∣ y ) = b a + b P(x|y) = \frac{b}{a+b} P(xy)=a+bb左边翻译过来是“已知为类别y,则其为样本x的概率”,右边翻译过来是“类别y的准确率”,这两者要怎么画上等号呢?还请读者不吝赐教。
BER鼓励分类器学到的分布:
P ( y ∣ x ) ∝ 1 L P ( x ∣ y ) P(y|x) \propto \frac{1}{L}P(x|y) P(yx)L1P(xy)
这样分类器分类时就不会再受到不平衡数据集的影响。但是考虑另一个问题,如果狗这个小类中全部都是二哈,只有一个泰迪,那么分类器很可能会学到 P ( 二 哈 ∣ 狗 ) → 1 P(二哈|狗) \to 1 P()1,这相当于一个不平衡子集的问题。

Logit Adjustment

最小化BER可以表述为 f ∗ ∈ a r g m i n f : x → R L B E R ( f ) f^* \in argmin_{f:x \to R^{L}}BER(f) fargminf:xRLBER(f),原文提到这个问题的一个典型的解是:“the best posible or Bayes-optimal score as following:”
在这里插入图片描述
上式右边的等式与上一节中分析BER鼓励分类器学习的分布的形式是一致的。文章中进一步阐述,当类别条件概率 P ( x ∣ y ) P(x|y) P(xy固定的时候,无论 P ( y ) P(y) P(y)怎么变,模型都是无视的,这就直观的解释了,为什么BER可以用于解决类别不平衡的问题。
  接着作者假设 P ( y ∣ x ) ∝ e x p ( s y ∗ ( x ) ) P(y|x) \propto exp(s^*_y(x)) P(yx)exp(sy(x)),其中 s ∗ : x → R L s^*:x \to R^L s:xRL是一个记分器(scorer),用来把样 本x映射为一个长度为L向量,向量中的每个元素表示分类器认为该样本属于某一类的分数。使用指数函数一是因为它本身是 R n R^n Rn上单调增的二是因为在外面套上对数函数之后可以把它消掉。同时根据定义有 P b a l ( y ∣ x ) ∝ P ( y ∣ x ) / p ( y ) P^{bal}(y|x) \propto P(y|x)/p(y) Pbal(yx)P(yx)/p(y)。因此上面的长等式又可以表示为:
在这里插入图片描述上式最后一项就是作者所谓的logit adjust。作者提出可以有两种形式来执行,其一是整合在loss函数中,其二是在测试的时候做后处理。第一种方式定义的损失函数如下:

def build_loss_fn(use_la_loss:bool, base_probs, tau=1.0):def loss_fn(logits, labels):if use_la_loss:logits = logits + torch.log(torch.tensor(base_probs**tau + 1e-12,dtype=torch.float32,device="cuda",).detach())loss = F.cross_entropy(logits, labels)return lossreturn loss_fn

tau默认是1,也就是不起任何作用,作者给的推荐配置中也没有对这个参数进行修改。加1e-12应该是为了数值稳定性。
  最后作者认为自己的方法相对于之前的方法的优势之一是有坚实的统计学基础:最小化平衡误差时保证了费雪一致性(Fisher consistent)。关于这个性质我的浅薄理解就是在一个采样上{X}求得的函数 f : X → θ f:{X} \to \theta f:Xθ,对于真实分布仍然适用。用人话来说就是,我这个函数可以根据这个采样求得这个分布的一个未知参数 θ \theta θ,把这个函数放到真实分布上仍然是正确的,这样我求的这个函数就可以以偏概全。


http://chatgpt.dhexx.cn/article/b6iuKW6F.shtml

相关文章

logit

1.为什么需要logit回归? 线性回归不稳健 异常点对拟合直线的影响很大 so linear不适合做分类问题 2.为什么要sigmoid?sigmoid能做什么? y0,1是离散问题,直接建立方程 函数不连续——损失函数不可导——参数无法用梯度法优化 所以我们由 …

Logit 是怎么算的?

从知乎借几张图来描述,先看看odds 是什么? 然后Logit 就 是 Log of odds:

【计算机网络学习笔记】(汇总目录)

计算机网络学习笔记(汇总目录) 文章目录 点击以下标题,跳转到对应章节的详细讲解 【计算机网络学习笔记01】计算机网络概述(上) 【计算机网络学习笔记02】计算机网络概述(中) 【计算机网络学习…

计算机网络期末总结复习(全)

文章目录 第一章:概述1.1、计算机网络在信息时代的作用我国互联网发展状况1.2、因特网概述1、网络、互连网(互联网)和因特网2、因特网发展的三个阶段3、因特网的标准化工作4、因特网的组成补充:1.3 三种交换方式1、电路交换(Circuit Switching)2、分组交换(Packet Switc…

计算机网络的应用领域有那些,计算机网络应用领域

描述 计算机网络应用领域 一、计算机网络在现代企业中的应用 计算机网络的发展和应用改变了传统企业的管理模式和经营模式。在现代企业中企业信息网络得到了广泛的应用。它是一种专门用于企业内部信息管理的计算机网络,覆盖企业生产经营管理的各个部门,在整个企业范围内提供硬…

《王道计算机网络》学习笔记总目录+思维导图

0.思维导图 本篇文章是对《2021王道计算机网络》所有知识点的笔记总结归档,虽说是2021年的,但是这些都是最核心的底层基础知识,过多少年都不会有很大的变化,核心都差不多。我的武功秘籍:note.bithachi.cn,…

计算机必备学习网站

目录 1 论文代码网站 (1)Github:www.github.com/ (2)Papers With Code:https://paperswithcode.com/ (3)researchcode:Research Code (4)sema…

内联函数的使用与引用

内联函数的执行过程与带参数宏定义很相似,但参数的处理不同。带参数的宏定义并不对参数进行运算,而是直接替换;内联函数首先是函数,这就意味着函数的很多性质都适用于内联函数,即内联函数先把参数表达式进行运算求值&a…

内联函数的意义和使用

1. 内联函数 在C中我们通常定义以下函数来求两个整数的最大值: 复制代码 代码如下: int max(int a, int b) { return a > b ? a : b; } 为这么一个小的操作定义一个函数的好处有: ① 阅读和理解函数 max 的调用,要比读一条等价的条件表达…

内联函数和类-初阶

目录 前言 一、内联函数 二、typeid 三、范围for的使用 四、nullptr 五、类 六、class和访问限定符 总结 前言 多多重复,百炼成钢!!! 一、内联函数 用inline修饰的函数叫内联函数-在编译时C编译器会在函数的位置展开,…

内联函数——C++

内敛函数的定义: 以inline修饰的函数叫做内联函数,编译时C编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销,内联函数提升程序运行的效率 (它是以空间换取时间的方式提高效率,这里的空间指的…

【内联函数】inline关键字的作用与内联函数的特性

学习导航 一、内联函数产生的意义二、内联函数的使用三、内联函数的作用①简单易懂②支持调试③支持类型检查 四、内联函数的特性 一、内联函数产生的意义 在C语言中,如果我们频繁调用某些函数,并且这些函数都很代码量都很小,那么写成宏定义的…

C++之 内联函数

目录 一、 内敛函数的概念 二、 查看内联函数 三、 内联函数的特性 四、 宏和内联函数 一、 内敛函数的概念 以 inline 修饰的函数叫做内敛函数,编译时C编译器在调用内联函数的地方展开,没有函数调用建立栈帧的开销,内联函数提升程序运行…

内联函数(Inline Function )

目录 什么是内联函数(Inline Function) 如何将函数编写为内联函数(how to make function inline) 例: 为什么使用内联函数(Why to use inline function) 结论: 特殊规则 1.编译器可能不接受内联提议 …

内联函数

1.什么是内联函数 用关键字inline修饰的函数就是内联函数。关键字在函数声明和定义的时候都要加上,不写系统还是会当成常规函数 2.内联函数与一般函数的区别 1)内联含函数比一般函数在前面多一个inline修饰符 2)内联函数是直接复制“镶嵌”…

内联函数(inline)详解

为什么要有内联函数 在学习内联函数之前,大家可以写一个实现加法的宏ADD(),检测一下自己。 如果对宏等预编译知识不太熟悉的话,可以先看一下这篇文章:预编译——2.2.4 以下是一个正确的ADD宏: #define ADD(x,y) ((x…

内联函数(超详细版)

1.内联函数的由来 当我们调用函数的时候,实际会有额外的开销,为了避免或减少这些额外的开销,c中引入内联函数(inline functions)。 2.内联函数的原理 1)当我们调用内联函数时,不会像调用普通函…

如何证明一个问题是NP-Hard或NP-Complete?

文章目录 NP-hard vs NP-CompleteReduction SAT ProblemReducing SAT to Shortest Clique ProblemReducing SAT to Shortest Tour Problem A List of NP-CompleteSet Vertex Cover Problem & Independent SetK-coloring and CliquePackingLongest Common Subsequence 参考资…

【机器学习】P问题、NP问题、NP-hard、NP-C问题解析与举例理解

目录 1 基本概念1.1 多项式和时间复杂度1.2 P和NP1.3 NP-hard和NP-C1.4 总结 2 举例理解NP问题3 其他NP问题 1 基本概念 1.1 多项式和时间复杂度 (1)多项式 a x n b x n − 1 c ax^nbx^{n-1}c axnbxn−1c,形如这种形式的就被称为x的最高…

P问题、NP问题、NPC问题、NP-hard问题详解

要理解P问题、NP问题、NPC问题、NP-hard问题,需要先弄懂几个概念: 什么是多项式时间?什么是确定性算法?什么是非确定性算法?什么是规约/约化? 文章目录 多项式时间(Polynomial time&#xff09…