【问题标题】:What is the meaning of the word logits in TensorFlow? [duplicate]TensorFlow中logits这个词是什么意思? [复制]
【发布时间】:2017-05-18 05:30:23
【问题描述】:

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

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

【问题讨论】:

标签: tensorflow machine-learning neural-network deep-learning cross-entropy


【解决方案1】:

(FOMOsapiens)。

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

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

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

这就是为什么“我们可以称”任何东西在机器学习中出现在 sigmoid 或 softmax 函数之前的 登录。

J. Hinton video 使用这个词。

【讨论】:

    【解决方案2】:

    登录

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

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

    official tensorflow documentation

    【讨论】:

      【解决方案3】:

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

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


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


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

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


      另外,来自 tensorflow 官方网站上的tutorial:

      Logits 层

      我们神经网络的最后一层是 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...我不知道。对不起。
      [编辑:有关该术语背后的历史动机,请参阅this answer。]


      琐事

      不过,如果您愿意,您可以将来自softmax 函数的统计logit 应用于probabilities。

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

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

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

      【讨论】:

        【解决方案4】:

        总结

        在深度学习的上下文中,logits layer 表示输入到 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 层”。然后人们开始将此层的输出 values 称为“logit”,从而造成与 logit 函数的混淆。

        TensorFlow 代码

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

        参考

        Logit/Probit lecture slides 是了解 logit 的最佳资源之一。我还用上述一些信息更新了Wikipedia article。

        【讨论】:

        • "From pure mathematical perspective logit is a function that performs above mapping." 这部分是错误的。在统计学中,将概率本身的 logit 称为“logits”是很常见的。 that feeds in to logit function SoftMax 函数不是 logit 函数,而是它的逆函数,即(多项式)logistic 函数。
        【解决方案5】:

        个人理解,在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 的 Hands-on Machine Learning with Scikit-learn and TensorFLow 一书的第 10 章中,我看到了这一段,它清楚地说明了logits layer。

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

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

        【讨论】:

          【解决方案6】:

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


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

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

          在 ML 中,它can be

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

          Logits 也 sometimes 指的是 sigmoid 函数的元素逆。

          【讨论】:

          • 对于 Tensorflow:这个名称被认为暗示这个 Tensor 是 Softmax 映射到概率的数量。
          • 这和在softmax之前取幂的东西一样吗?即softmax(logit) = exp(logit)/Z(logit) 然后logit = h_NN(x)?所以logit和“score”一样吗?
          • 个人理解,在TensorFlow领域,logits是作为softmax输入的值。我是根据这个 tensorflow 教程得出这个理解的。
          • 我不确定这是否回答了这个问题。也许这就是它从未被接受的原因。我了解 logit 函数是什么,但这也让我感到困惑为什么 Tensorflow 将这些参数称为 logits。 Tensorflow 的函数中的几个参数也是同一个名称
          • 太棒了!你能举个简单的例子吗?是这样吗?[1, 0.5, 0.5] 通过规范化变成[0.5, 0.25, 0.25] 然后soft max 变成[0,] 如果一个热[1, 0, 0]?或者只是输出[1, 0, 0] 导致输出应该是一个向量?
          【解决方案7】:

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

          logit = w*x + b,
          

          x:输入,w:权重,b:偏差。就是这样。


          以下内容与本题无关。

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

          【讨论】:

            【解决方案8】:

            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

            【讨论】:

            • 所以logit和“score”一样
            • 我建议在您的答案中添加一行,明确区分 Logit 函数(统计)和 logits 层(张量流)
            【解决方案9】:

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

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

            【讨论】:

              【解决方案10】:

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

              请看这里:https://en.wikipedia.org/wiki/Logit

              【讨论】:

              • 那是在统计/数学中。我们在这里谈论机器学习,其中logit 有不同的含义。见this、this、this。
              猜你喜欢
              • 2018-10-29
              • 2010-10-03
              • 1970-01-01
              • 1970-01-01
              • 2015-03-12
              • 1970-01-01
              相关资源
              最近更新 更多