什么是 logit?logit 和 Odds、sigmod 的关系

本文内容

  1. Odds
  2. logit 在数学上的定义
  3. logit 在深度学习中的含义
  4. Odds、logit 和 sigmod 的关系图示
  5. 代码示例
  6. logit 的历史由来
Odds

了解 logit 前,我们先了解一下 Odds。Odds 在概率中,它指的是“几率”或“赔率”,通常用来表示某个事件发生的可能性与其不发生的可能性之间的比例关系。

假定一个事件发生的概率为 pp,其对应的 Odds 值(用 tt 表示)的计算公式为:

t=p1pt = \frac{p}{1-p}

逆公式:

p=t1+tp = \frac{t}{1+t}
logit 在数学上的定义

用 p 表示概率,p/(1 − p) 为对应的 Odds,那么该概率的 logit 定义为 Odds 的对数。

x=logit(p)=ln(t)=ln(p1p)x = logit(p) = ln(t) = ln(\frac{p}{1-p})

可以推导出,该函数的逆函数即为标准 sigmoid 函数。

p=sigmod(x)=11+ex=exex+1p=sigmod(x)={\frac {1}{1+e^{-x}}}={\frac {e^{x}}{e^{x}+1}}
logit 在深度学习中的含义

在深度学习中,logits 层是指向 softmax(或其他类似的归一化函数)提供输入的层。softmax的输出是分类任务的概率,而其输入则是 logits 层。logits 层通常产生从负无穷到正无穷的值,而 softmax 层将这些值转换为 0 到 1 之间的值。

Odds、logit 和 sigmod 的关系图示

如上图,logit、Odds和sigmoid之间的关系,可以从以下几个方面来理解:

  1. logit函数就是对Odds取对数。这种转换使得我们可以利用对数函数的性质来简化某些复杂的计算和分析。
  2. Sigmoid函数和logit函数是互为反函数的。这意味着,如果一个值是sigmoid函数的输出,那么它的logit值就是sigmoid函数的输入;反之亦然。这种关系使得我们可以在logit空间和概率空间之间进行方便的转换。
  3. 在逻辑回归模型中,我们通常使用sigmoid函数将线性模型的输出转换为概率值,从而得到事件发生的可能性。而logit函数则可以帮助我们理解这些概率值背后的Odds和发生比的概念。
代码示例
import torch
import math

prob = 0.8

t = torch.tensor([prob], requires_grad=False)

print(f"{prob} logit value by torch.tensor: {torch.logit(t)}")
print(f"{prob} logit value by math.log: {math.log(prob/(1-prob)):.4f}")

# 给定概率,先做 logit操作,再做 sigmod 操作,会得到原值。
# logit 函数的取值范围为 (-∞,+∞),在机器学习中方便训练,故 logit 相对原始概率更常用。
print(f"logit+sigmod 返回原来的概率值: {torch.sigmoid(torch.logit(t))}")

# 输出结果如下。
# 0.8 logit value by torch.tensor: tensor([1.3863])
# 0.8 logit value by math.log: 1.3863
# logit+sigmod 返回原来的概率值: tensor([0.8000])
logit 的历史由来

在 20 世纪 30 年代和 40 年代,许多人试图将线性回归应用于预测概率的问题。然而,线性回归产生的输出范围是从负无穷到正无穷,而我们期望的概率输出范围是 0 到 1。实现这一目标的一个方法是将 0 到 1 的概率映射到负无穷到正无穷的范围,然后像往常一样使用线性回归。

其中一个映射方法是累积正态分布,由 Chester Ittner Bliss 在 1934 年提出,他将其称为“概率单位”(probit)模型,是“probability unit”的缩写。然而,这个函数计算成本较高,且对多分类支持不好。

1944 年,Joseph Berkson 使用函数 ln(p/(1p))ln(p/(1-p)) (同上面的数学定义)进行这种映射,并称之为logit,是“logistic unit”的缩写。术语“逻辑回归”(logistic regression)也是由此而来的。

发布于:2024-03-21 描述有误?我来纠错