【问题标题】:Interpreting a sigmoid result as probability in neural networks将 sigmoid 结果解释为神经网络中的概率
【发布时间】:2020-01-14 03:25:50
【问题描述】:

我在最后一层创建了一个带有 sigmoid 激活函数的神经网络,所以我得到的结果介于 0 和 1 之间。我想将事物分为 2 个类,所以我检查“是数字 > 0.5,然后是类1 其他类 0"。都是基本的。 但是,我想说“它属于 0 类的概率是x,属于 1 类的概率是y”。

我该怎么做?

  • 0.73 之类的数字是否告诉我它有 73% 的把握属于 1 类?然后 1-0.73 = 0.27 所以 27% 在 0 级?
  • 当它是 0.27 时,这是否意味着它在 0 类中为 27%,在 1 类中为 73%?没有意义。

我是否应该使用 0.5 并查看“数字离中心有多远,然后就是百分比”?

还是我误解了NN的结果?

【问题讨论】:

  • 传统的神经网络不是概率模型。虽然将 sigmoid 输出解释为概率是很常见的,但事实是,该值与概率的数学概念之间实际上没有任何联系。将 0.5 作为分割点很常见,但也将中间范围(例如 0.2-0.8)作为“不知道”。但这些都是启发式的。您可以使用ROC curve 来分析不同阈值会发生什么 - 这至少可以为您提供 TPR/FPR 方面的“概率”。
  • @jdehesa 是的,我有点想,模型只是学习“是这个还是那个”,而不是“这个是多少”。网上很多文章说“sigmoid 可以解释为概率,因为它在 0 和 1 之间!”让我感到困惑。然后不回答我上面的问题。我想我应该放弃这个想法,直接接受分类。感谢您提供指向更多信息的链接!
  • 您应该注意,尽管在使用交叉熵损失进行训练的情况下,我们确实将 sigmoid 输出解释为 p(y=1),所以从某种意义上说,这种概率解释是“烘焙的”进入”网络。

标签: python tensorflow sigmoid


【解决方案1】:
Does a number like 0.73 tell me it's 73% sure to be in class 1? And then 1-0.73 = 0.27 so 27% in class 0?

答案是否定的。当我们使用 Sigmoid 函数时,结果之和不会为 1。类的结果之和有可能小于 1 或在某些情况下大于 1 .

在同样的情况下,当我们使用 softmax 函数时。所有输出的总和将加到 1。

【讨论】:

  • 这不适用于简单的二进制分类,在这种分类中,您只有一个在 [0, 1] 范围内且给出 p(y=1) 的输出。然后 p(y=0) = 1 - p(y=1) 并且“按设计”概率总和为 1。
【解决方案2】:

正如 Teja 所指出的,简短的回答是否定的,但是,根据您使用的损失,它可能比您想象的更接近真相。

假设您尝试训练您的网络将数字区分为两个任意类别,即beautifulugly。假设您的输入数字是010s 有0.2 被标记为ugly 的概率,而1s 有0.6ugly 的概率。

想象一下,您的神经网络将0s 和1s 作为输入,将它们传递到某些层,并以softmax 函数结束。如果您的损失是二元交叉熵,那么您的网络的最佳解决方案是在输入中看到0 时输出0.2,在输入中看到1 时输出0.6输入(这是交叉熵的一个属性,当您输出每个标签的真实概率时,它会被最小化)。因此,您可以将这些数字解释为概率。

当然,现实世界的例子并不那么容易,而且通常是确定性的,所以解释有点棘手。但是,我相信只要将交叉熵用作损失,将结果视为概率并不完全错误。

对不起,这个答案不是非黑即白,但现实有时很复杂;)

【讨论】:

    猜你喜欢
    • 2011-02-16
    • 2017-07-28
    • 2015-07-31
    • 2016-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-26
    • 1970-01-01
    相关资源
    最近更新 更多