logit函数与原始分数logits1. logit 定义logit是一个数学函数常称为“对数几率函数”log-odds。它把概率值p ∈ ( 0 , 1 ) p \in (0,1)p∈(0,1)映射到整个实数轴( − ∞ , ∞ ) (-\infty,\infty)(−∞,∞)l o g i t ( p ) ln ⁡ p 1 − p \mathrm{logit}(p)\ln\frac{p}{1-p}logit(p)ln1−pp​其中几个术语可以这样理解几率odds不是概率本身而是“发生 : 不发生”的比值o d d s p 1 − p \mathrm{odds}\frac{p}{1-p}odds1−pp​例如p 0.8 p0.8p0.8则o d d s 0.8 / 0.2 4 \mathrm{odds}0.8/0.24odds0.8/0.24表示“发生是不发生的 4 倍”。对数log指数运算的反运算。机器学习里常用自然对数ln底数为e ee约等于2.7183 2.71832.7183。对数几率log-odds先算几率再取对数即log ⁡ p 1 − p \log\frac{p}{1-p}log1−pp​术语来源上1944 年Joseph Berkson 将函数ln ⁡ p 1 − p \ln\frac{p}{1-p}ln1−pp​命名为logit即logistic unit的缩写。术语“逻辑回归”logistic regression也由此而来。数学定义上它对应的是log-odds对数几率先求几率再取对数。2. 与Sigmoid 互为反函数Sigmoid函数为σ ( x ) 1 1 e − x \sigma(x)\frac{1}{1e^{-x}}σ(x)1e−x1​logit与Sigmoid互为反函数σ ( l o g i t ( p ) ) p , l o g i t ( σ ( x ) ) x \sigma(\mathrm{logit}(p))p,\quad \mathrm{logit}(\sigma(x))xσ(logit(p))p,logit(σ(x))x直观上Sigmoid把任意实数映射到( 0 , 1 ) (0,1)(0,1)logit把( 0 , 1 ) (0,1)(0,1)的概率映射回任意实数。3. logits在深度学习里logits复数通常指模型最后一层“激活前”的原始输出分数取值可为任意实数。二分类一个logit常送入sigmoid得到正类概率多分类一组logits送入softmax得到类别概率分布。例如[3.0, 1.0, 0.2]是一组logits经过softmax后会得到类似[0.84, 0.11, 0.05]的概率分布。4. logit 与 logits 的区别易混点logit数学函数名l o g i t ( p ) ln ⁡ p 1 − p \mathrm{logit}(p)\ln\frac{p}{1-p}logit(p)ln1−pp​logits神经网络术语表示一组原始分数模型输出未归一化。一句话记忆logit是“函数”logits是“数据模型输出–原始分数”。5. 一个简短示例PyTorchimporttorch# 概率值, 标量转张量用于计算p1torch.tensor([0.8])# logit函数实现概率 - 实数值logit_p1torch.log(p1/(1-p1))print(logit(0.8) ,logit_p1.item())# 约 1.3863# sigmoid函数是logit的反函数p2torch.sigmoid(logit_p1)print(torch.allclose(p2,p1))# True# 多分类logits数据经softmax转换为概率分布probslogitstorch.tensor([3.0,1.0,0.2])probstorch.softmax(logits,dim0)#沿着第0维计算softmaxprint(probs ,probs)print(sum ,probs.sum().item())# 1.0