我知道对于多个类的问题,我们通常使用 softmax,但我们也可以使用 sigmoid 吗?我试图在输出层用 sigmoid 实现数字分类,它有效。我不明白它是如何工作的?
Sigmoid 激活如何在多类分类问题中发挥作用
如果你的任务是一种标签互斥的分类,每个输入只有一个标签,你必须使用Softmax
. 如果您的分类任务的输入具有多个标签作为输入,则您的类不是互斥的,您可以将Sigmoid
其用于每个输出。对于前一种情况,应选择最大值的输出条目作为输出。对于后一种情况,对于每个类,您都有一个属于最后一个 sigmoid 的激活值。如果每次激活都超过0.5
您可以说输入中存在该条目。
softmax() 将为您提供概率分布,这意味着所有输出的总和为 1。而 sigmoid() 将确保神经元的输出值在 0 到 1 之间。
在数字分类和 sigmoid() 的情况下,您将输出 0 到 1 之间的 10 个输出神经元。然后,您可以取其中最大的一个并将其分类为该数字。
@bharath chandra Softmax 函数永远不会给出 3 作为输出。它将始终输出 0 和 1 之间的实数值。Sigmoid 函数也给出 0 和 1 之间的输出。不同之处在于,在前者中,所有输出的总和将等于 1(由于互斥性质),而在后一种情况下,所有输出的总和不一定等于 1(由于独立性)。
对于初学者:您可以阅读这个quora 答案,它解释了 Sigmoid 激活和 softmax 概率的优缺点。为了包容性,在撰写本文时有 6 个答案。 Sigmoid 与 Softmax
答案亮点:
如果你看到 Softmax 的函数,所有 softmax 单元的总和应该是 1。在 sigmoid 中它不是真的必要。
在二元分类中,sigmoid 和 softmax 函数是相同的,而在多类分类中我们使用 Softmax 函数。
如果您使用的是 one-hot 编码,那么我强烈建议您使用 Softmax。
我注意到的:据我所知 >> Softmax 是我们样本空间中各种可能类别(多类别)的概率分布。并且在通过 one-hot 编码将任何内容传递给 softmax 激活层之前,必须提前预定义所有类。例如 NLP 中的标记化和词干化以使数据同质化。
对于非初学者:在Keras 官方页面上, softmax文档给出如下:
softmax
keras.activations.softmax(x, axis=-1)
Softmax activation function.
Arguments
x: Input tensor.
axis: Integer, axis along which the softmax normalization is applied.
Returns
Tensor, output of softmax transformation.
Raises
ValueError: In case dim(x) == 1.
而对于Sigmoid,给出如下:
sigmoid
keras.activations.sigmoid(x)
Sigmoid activation function.
Arguments
x: Input tensor.
Returns
The sigmoid activation: 1 / (1 + exp(-x)).