神经网络:对于二元分类,使用 1 个或 2 个输出神经元?

机器算法验证 机器学习 分类 神经网络
2022-01-30 05:02:33

假设我想做二进制分类(属于 A 类或 B 类的东西)。在神经网络的输出层有一些可能性:

  • 使用 1 个输出节点。输出 0 (<0.5) 被认为是 A 类,1 (>=0.5) 被认为是 B 类(在 sigmoid 的情况下)

  • 使用 2 个输出节点。输入属于具有最高值/概率 (argmax) 的节点的类。

是否有任何论文(也)讨论过这个问题?要搜索的特定关键字是什么?

这个问题之前已经在这个网站上被问过,例如看到这个链接没有真正的答案。我需要做出选择(硕士论文),所以我想深入了解每个解决方案的优缺点/局限性。

3个回答

在第二种情况下,您可能正在撰写有关 softmax 激活函数的文章。如果这是真的,那么 sigmoid 只是 softmax 函数的一个特例。这很容易表现出来。

y=11+ex=11+1ex=1ex+1ex=ex1+ex=exe0+ex

如您所见,sigmoid 与 softmax 相同。您可以认为您有两个输出,但其中一个的所有权重均为零,因此其输出将始终为零。

所以二元分类更好的选择是使用一个带有sigmoid的输出单元而不是带有两个输出单元的softmax,因为它会更新得更快。

机器学习算法(例如分类器)在这里通过确定输入属于不同类别的概率来对输入数据进行统计建模。对于任意数量的类,通常会在模型中附加一个 softmax 层,因此输出将具有设计的概率属性:

y=softmax(a)1ieai×[ea1,ea2,...,ean]

0yi1 for all i
y1+y2+...+yn=1

这里,a是softmax层之前的层的激活。

这对于两个类是完全有效的,但是,一个也可以使用一个神经元(而不是两个),因为它的输出满足:

0y1 for all inputs.
如果应用转换(用于反向传播目的的可微/平滑)映射,则可以确保这一点ay从而满足上述条件。sigmoid 函数符合我们的标准。它没有什么特别之处,除了简单的数学表示,

sigmoid(a)σ(a)11+ea

有用的数学属性(微分,介于 0 和 1 之间等)、计算效率和具有正确的斜率,这样更新网络的权重将在输出中产生微小但可测量的变化,以用于优化目的。

结论

我不确定@itdxer 显示softmax 和sigmoid 的推理是否有效,但他选择1 个神经元而不是二元分类器的2 个神经元是正确的,因为需要更少的参数和计算。由于“这是多余的”,我还因使用两个神经元作为二元分类器而受到批评。

对于二元分类,有 2 个输出 p0 和 p1 代表概率,以及 2 个目标 y0 和 y1。

其中 p0, p1 = [0 1] 和 p0 + p1 = 1;y0,y1 = {0, 1} 和 y0 + y1 = 1。

例如 p0 = 0.8, p1 = 0.2; y0 = 1,y1 = 0。

为了满足上述条件,输出层必须有sigmoid激活,损失函数必须是二元交叉熵。