在接下来的TensorFlow函数中,我们必须在最后一层中输入人工神经元的激活。我能理解。但我不明白为什么叫logits?这不是一个数学函数吗?

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

当前回答

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

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

Tensorflow“with logit”:这意味着你正在对logit数字应用一个softmax函数来规范化它。input_vector/logit不是标准化的,可以从[-inf, inf]开始缩放。

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

其他回答

Logits是一个重载的术语,可以有很多不同的含义:


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

概率0.5对应logit为0。负logit对应概率小于0.5,正到>等于0.5。

在ML中,它可以是

原始向量(非规格化)的预测即一种分类 生成模型,然后通常将其传递给规范化 函数。如果模型正在解决一个多类分类 问题是,对数通常成为softmax函数的输入。的 然后,Softmax函数生成一个(标准化)概率向量 每个可能的类都有一个值。

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

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

这有点像在详细学习一门学科时,你会学到很多次要的东西,但在教学生时,你会试图把它压缩到最简单的情况。如果这个学生现在试图教,这将是相当困难的,但他能够很好地描述它,足以使用语言。

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

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

Tensorflow“with logit”:这意味着你正在对logit数字应用一个softmax函数来规范化它。input_vector/logit不是标准化的,可以从[-inf, inf]开始缩放。

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

总结

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

历史背景

Where does this term comes from? In 1930s and 40s, several people were trying to adapt linear regression to the problem of predicting probabilities. However linear regression produces output from -infinity to +infinity while for probabilities our desired output is 0 to 1. One way to do this is by somehow mapping the probabilities 0 to 1 to -infinity to +infinity and then use linear regression as usual. One such mapping is cumulative normal distribution that was used by Chester Ittner Bliss in 1934 and he called this "probit" model, short for "probability unit". However this function is computationally expensive while lacking some of the desirable properties for multi-class classification. In 1944 Joseph Berkson used the function log(p/(1-p)) to do this mapping and called it logit, short for "logistic unit". The term logistic regression derived from this as well.

的混乱

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

TensorFlow代码

Unfortunately TensorFlow code further adds in to confusion by names like tf.nn.softmax_cross_entropy_with_logits. What does logits mean here? It just means the input of the function is supposed to be the output of last neuron layer as described above. The _with_logits suffix is redundant, confusing and pointless. Functions should be named without regards to such very specific contexts because they are simply mathematical operations that can be performed on values derived from many other domains. In fact TensorFlow has another similar function sparse_softmax_cross_entropy where they fortunately forgot to add _with_logits suffix creating inconsistency and adding in to confusion. PyTorch on the other hand simply names its function without these kind of suffixes.

参考

Logit/Probit讲座幻灯片是理解Logit最好的资源之一。我也更新了维基百科的文章与上述的一些信息。

我只是添加了这个说明,以便任何向下滚动这么多的人至少可以得到正确的答案,因为有这么多错误的答案被点赞。

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


是的,logit在统计学中是一个数学函数,但在神经网络中使用的logit是不同的。统计逻辑在这里根本说不通。


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

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


另外,在官方tensorflow网站上的教程中:

分对数层 神经网络的最后一层是logits层,它将返回我们预测的原始值。我们创建了一个有10个神经元的密集层(每个目标类0-9一个),线性激活(默认值): Logits = tf.layers.dense(输入=dropout,单位=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_forecasts的另一个名字是logit。


至于为什么logit…我不知道。对不起。 [编辑:看看这个词背后的历史动机。]


琐事

不过,如果你愿意,你可以将统计logit应用于softmax函数的概率。

如果某一类的概率是p, 那么该类的log-odds是L = logit(p)

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

但是计算对数概率不是很有用。