在下面的 TensorFlow 函数中,我们必须在最后一层提供人工神经元的激活。我明白了。但我不明白为什么它被称为logits?这不是数学函数吗?
loss_function = tf.nn.softmax_cross_entropy_with_logits(
logits = last_layer,
labels = target_output
)
在下面的 TensorFlow 函数中,我们必须在最后一层提供人工神经元的激活。我明白了。但我不明白为什么它被称为logits?这不是数学函数吗?
loss_function = tf.nn.softmax_cross_entropy_with_logits(
logits = last_layer,
labels = target_output
)
Logits 是一个重载的术语,它可能意味着许多不同的东西:
在数学中,Logit是一个将概率 ( [0, 1]
) 映射到 R ( (-inf, inf)
)的函数
0.5 的概率对应于 0 的 logit。负 logit 对应于小于 0.5 的概率,正对应于 > 0.5。
在 ML中,它可以是
分类模型生成的原始(非归一化)预测向量,通常随后将其传递给归一化函数。如果模型正在解决多类分类问题,logits 通常会成为 softmax 函数的输入。然后,softmax 函数生成一个(归一化的)概率向量,每个可能的类都有一个值。
Logits 有时也指 sigmoid 函数的元素逆。
只需添加此说明,以便向下滚动这么多的任何人至少可以正确回答,因为有很多错误的答案被赞成。
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
到函数中probabilities
。softmax
如果某个类的概率是p
,
那么该类的对数几率是L = logit(p)
。
此外,该类的概率可以恢复为p = sigmoid(L)
,使用该sigmoid
函数。
不过,计算对数赔率不是很有用。
概括
在深度学习的上下文中,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 文章。
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
个人理解,在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
单独拿出来。这是因为计算softmax
和cross-entropy
损失一起计算效率更高。请记住,这cross-entropy
是一个成本函数,不用于前向传播。
这是给未来读者的简明答案。Tensorflow
'slogit
被定义为没有应用激活函数的神经元的输出:
logit = w*x + b,
x:输入,w:权重,b:偏差。而已。
以下与这个问题无关。
对于历史讲座,请阅读其他答案。向Tensorflow
“创造性地”令人困惑的命名约定致敬。在PyTorch
中,只有一个CrossEntropyLoss
,它接受未激活的输出。卷积、矩阵乘法和激活是同一级别的操作。设计更加模块化,更少混乱。这也是我Tensorflow
从PyTorch
.
分类模型生成的原始(非归一化)预测向量,通常随后传递给归一化函数。如果模型正在解决多类分类问题,logits 通常会成为 softmax 函数的输入。然后,softmax 函数生成一个(归一化的)概率向量,每个可能的类都有一个值。
此外,logits 有时指的是 sigmoid 函数的元素逆。有关更多信息,请参阅 tf.nn.sigmoid_cross_entropy_with_logits。
它们基本上是您可以从网络中获得的最完整的学习模型,在它被压缩以仅适用于我们感兴趣的类别数量之前。看看一些研究人员如何使用它们来训练基于深度的浅层神经网络网获悉: https ://arxiv.org/pdf/1312.6184.pdf
这有点像在详细学习一门学科时,你会学到很多小点,但在教一个学生时,你会尽量压缩到最简单的情况。如果学生现在尝试教书,那将是相当困难的,但能够很好地描述它以使用该语言。
logit (/ˈloʊdʒɪt/ LOH-jit) 函数是数学中使用的 sigmoid “逻辑”函数或逻辑变换的逆函数,尤其是在统计学中。当函数的变量表示概率 p 时,logit 函数给出对数赔率,或赔率的对数 p/(1 - p)。