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

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

当前回答

总结

在深度学习的上下文中,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最好的资源之一。我也更新了维基百科的文章与上述的一些信息。

其他回答

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


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

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

在ML中,它可以是

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

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

logit (/ o . oʊdʒɪt/ LOH-jit)函数是数学,特别是统计学中使用的s型“逻辑”函数或逻辑变换的逆函数。当函数的变量表示概率p时,logit函数给出log-odds,或p/(1 - p)的对数。

请看这里:https://en.wikipedia.org/wiki/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)。

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

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

个人理解,在TensorFlow领域,logits是用作softmax输入的值。我是在这个张量流教程的基础上得到这个理解的。

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


虽然logit确实是数学(尤其是统计学)中的一个函数,但我不认为这是你所看到的那个“logit”。在Ian Goodfellow的《深度学习》一书中,他提到,

函数σ−1(x)在统计学中被称为logit,但这个术语 很少用于机器学习。σ−1(x)为 logistic s型函数的逆函数。

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

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

也就是说,虽然我们在设计的最后一层使用了softmax作为激活函数,但是为了计算方便,我们分别取出了logits。这是因为同时计算软最大和交叉熵损失效率更高。记住,交叉熵是一个代价函数,不用于正向传播。