356

在下面的 TensorFlow 函数中,我们必须在最后一层提供人工神经元的激活。我明白了。但我不明白为什么它被称为logits?这不是数学函数吗?

loss_function = tf.nn.softmax_cross_entropy_with_logits(
     logits = last_layer,
     labels = target_output
)
4

10 回答 10

328

Logits 是一个重载的术语,它可能意味着许多不同的东西:


在数学中,Logit是一个将概率 ( [0, 1]) 映射到 R ( (-inf, inf))的函数

在此处输入图像描述

0.5 的概率对应于 0 的 logit。负 logit 对应于小于 0.5 的概率,正对应于 > 0.5。

在 ML中,它可以是

分类模型生成的原始(非归一化)预测向量,通常随后将其传递给归一化函数。如果模型正在解决多类分类问题,logits 通常会成为 softmax 函数的输入。然后,softmax 函数生成一个(归一化的)概率向量,每个可能的类都有一个值。

Logits 有时也指 sigmoid 函数的元素逆。

于 2017-04-23T22:51:47.463 回答
168

只需添加此说明,以便向下滚动这么多的任何人至少可以正确回答,因为有很多错误的答案被赞成。

Diansheng的回答和 JakeJ 的回答是正确的。
Shital Shah 发布的新答案是一个更好、更完整的答案。


是的,logit 作为统计学中的数学函数但在logit神经网络的上下文中使用是不同的。统计logit在这里甚至没有任何意义。


我在任何地方都找不到正式的定义,但logit基本上意味着:

来自神经网络最后一层的原始预测。
1. 这是你应用argmax函数来获得预测类的张量。
2. 这是您输入softmax函数以获得预测类别的概率的张量。


此外,来自官方 tensorflow 网站上的教程:

逻辑层

我们神经网络的最后一层是 logits 层,它将返回我们预测的原始值。我们创建一个具有 10 个神经元的密集层(每个目标类 0-9 一个),具有线性激活(默认):

logits = tf.layers.dense(inputs=dropout, units=10)

如果你还是一头雾水,情况是这样的:

raw_predictions = neural_net(input_layer)
predicted_class_index_by_raw = argmax(raw_predictions)
probabilities = softmax(raw_predictions)
predicted_class_index_by_prob = argmax(probabilities)

在哪里,predicted_class_index_by_raw并且predicted_class_index_by_prob将是相等的。

raw_predictions上面代码中的另一个名称logit是.


至于为什么 logit……我不知道。对不起。
[编辑:有关该术语背后的历史动机,请参阅此答案。]


琐事

虽然,如果你愿意,你可以将统计应用logit到函数中probabilitiessoftmax

如果某个类的概率是p
那么该类的对数几率L = logit(p)

此外,该类的概率可以恢复为p = sigmoid(L),使用该sigmoid函数。

不过,计算对数赔率不是很有用。

于 2018-05-24T14:19:06.397 回答
105

概括

在深度学习的上下文中,logits 层是指输入到 softmax(或其他此类归一化)的层。softmax 的输出是分类任务的概率,其输入是 logits 层。logits 层通常产生从 -infinity 到 +infinity 的值,softmax 层将其转换为从 0 到 1 的值。

历史背景

这个词是从哪里来的?在 1930 年代和 40 年代,有几个人试图使线性回归适应预测概率的问题。然而,线性回归产生从 -infinity 到 +infinity 的输出,而对于概率,我们期望的输出是 0 到 1。一种方法是通过某种方式将概率 0 到 1 映射到 -infinity 到 +infinity,然后像往常一样使用线性回归。一种这样的映射是 Chester Ittner Bliss 在 1934 年使用的累积正态分布,他称之为“probit”模型,是“probability unit”的缩写。然而,这个函数在计算上很昂贵,同时缺乏多类分类的一些理想属性。1944 年 Joseph Berkson 使用了这个函数log(p/(1-p))进行此映射并将其称为 logit,是“逻辑单元”的缩写。术语逻辑回归也由此衍生而来。

混乱

不幸的是,术语 logits 在深度学习中被滥用。从纯数学的角度来看,logit 是一个执行上述映射的函数。在深度学习中,人们开始将输入 logit 函数的层称为“logits 层”。然后人们开始将这一层的输出称为“logit”,从而与 logit函数混淆。

TensorFlow 代码

不幸的是,TensorFlow 代码进一步增加了诸如tf.nn.softmax_cross_entropy_with_logits. logits 在这里是什么意思?它只是意味着函数的输入应该是如上所述的最后一个神经元层的输出。_with_logits后缀是多余的、令人困惑的和毫无意义的。函数的命名应该不考虑这些非常具体的上下文,因为它们只是可以对从许多其他域派生的值执行的简单数学运算。事实上,TensorFlow 有另一个类似的功能sparse_softmax_cross_entropy,幸运的是他们忘记添加_with_logits后缀,造成不一致并增加混乱。另一方面,PyTorch 只是简单地命名它的函数而没有这些后缀。

参考

Logit/Probit 讲座幻灯片是了解 logit 的最佳资源之一。我还用上述一些信息更新了Wikipedia 文章

于 2018-08-31T08:11:44.640 回答
84

Logit是一个将概率映射[0, 1]到的函数[-inf, +inf]

Softmax是一个映射[-inf, +inf][0, 1]类似于 Sigmoid 的函数。但是 Softmax 也将值的总和(输出向量)归一化为 1。

Tensorflow "with logit":这意味着您正在应用一个 softmax 函数来对 logit 数字进行规范化。input_vector/logit 未标准化,可以从 [-inf, inf] 缩放。

这种归一化用于多类分类问题。对于多标签分类问题,使用 sigmoid 归一化,即tf.nn.sigmoid_cross_entropy_with_logits

于 2017-12-17T06:54:04.960 回答
37

个人理解,在TensorFlow领域,logits是用来作为softmax输入的值。我是根据这个 tensorflow 教程得出这个理解的。

https://www.tensorflow.org/tutorials/layers


尽管 logit 确实是数学中的一个函数(尤其是在统计学中),但我认为这与您正在查看的“logit”不同。在 Ian Goodfellow 的《深度学习》一书中,他提到,

函数 σ -1 (x) 在统计学中称为 logit,但这个术语在机器学习中很少使用。σ -1 (x) 代表逻辑 sigmoid 函数的反函数。

在 TensorFlow 中,它经常被视为最后一层的名称。在 Aurélien Géron 的《使用 Scikit-learn 和 TensorFLow 进行机器学习实践》一书的第 10 章中,我看到了这一段,它logits清楚地说明了层。

请注意,这logits是神经网络通过 softmax 激活函数之前的输出:出于优化原因,我们将在稍后处理 softmax 计算。

也就是说,虽然我们在设计的最后一层使用了softmax作为激活函数,但是为了计算方便,我们还是logits单独拿出来。这是因为计算softmaxcross-entropy损失一起计算效率更高。请记住,这cross-entropy是一个成本函数,不用于前向传播。

于 2017-10-30T08:34:22.970 回答
25

FOMO智人)。

如果您检查数学 Logit 函数,它将实际空间从[0,1]区间转换为无穷大[-inf, inf]

Sigmoid 和 softmax 会做完全相反的事情。他们会将[-inf, inf]真实空间转换为[0, 1]真实空间。

这就是为什么在机器学习中我们可以在 sigmoid 和 softmax 函数之前使用 logit(因为它们匹配)。

这就是为什么“我们可以称”机器学习中任何位于sigmoidsoftmax函数前面的东西为logit

这是使用该术语的 J. Hinton视频。

于 2019-06-27T11:01:25.710 回答
21

这是给未来读者的简明答案。Tensorflow'slogit被定义为没有应用激活函数的神经元的输出:

logit = w*x + b,

x:输入,w:权重,b:偏差。而已。


以下与这个问题无关。

对于历史讲座,请阅读其他答案。向Tensorflow“创造性地”令人困惑的命名约定致敬。在PyTorch中,只有一个CrossEntropyLoss,它接受未激活的输出。卷积、矩阵乘法和激活是同一级别的操作。设计更加模块化,更少混乱。这也是我TensorflowPyTorch.

于 2018-09-07T13:50:52.530 回答
12

逻辑

分类模型生成的原始(非归一化)预测向量,通常随后传递给归一化函数。如果模型正在解决多类分类问题,logits 通常会成为 softmax 函数的输入。然后,softmax 函数生成一个(归一化的)概率向量,每个可能的类都有一个值。

此外,logits 有时指的是 sigmoid 函数的元素逆。有关更多信息,请参阅 tf.nn.sigmoid_cross_entropy_with_logits。

官方张量流文档

于 2020-03-05T10:44:09.437 回答
6

它们基本上是您可以从网络中获得的最完整的学习模型,在它被压缩以仅适用于我们感兴趣的类别数量之前。看看一些研究人员如何使用它们来训练基于深度的浅层神经网络网获悉: https ://arxiv.org/pdf/1312.6184.pdf

这有点像在详细学习一门学科时,你会学到很多小点,但在教一个学生时,你会尽量压缩到最简单的情况。如果学生现在尝试教书,那将是相当困难的,但能够很好地描述它以使用该语言。

于 2017-11-14T05:51:41.580 回答
2

logit (/ˈloʊdʒɪt/ L​​OH-jit) 函数是数学中使用的 sigmoid “逻辑”函数或逻辑变换的逆函数,尤其是在统计学中。当函数的变量表示概率 p 时,logit 函数给出对数赔率,或赔率的对数 p/(1 - p)。

见这里:https ://en.wikipedia.org/wiki/Logit

于 2017-10-27T05:02:27.247 回答