sigmoid vs softmax_cross_entropy_with_logits

时间:2018-03-28 06:22:02

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

当使用神经网络进行分类时,可以说:

  • 您通常希望使用softmax交叉熵输出,因为这可以为您提供每种可能选项的概率。
  • 在只有两个选项的常见情况下,你想使用sigmoid,这是相同的,除了避免冗余输出p和1-p。

在TensorFlow中计算softmax交叉熵的方法似乎与以下几行有关:

cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=prediction,labels=y))

因此输出可以直接连接到最小化代码,这很好。

我对sigmoid输出的代码,同样基于各种教程和示例,遵循以下方式:

p = tf.sigmoid(tf.squeeze(...))
cost = tf.reduce_mean((p-y)**2)

我原本以为这两个应该在形式上相似,因为它们以几乎相同的方式执行相同的工作,但上面的代码片段看起来几乎完全无法比拟。此外,sigmoid版本明确地平方误差,而softmax不是。 (平面是在softmax的实现中发生的,还是正在发生的其他事情?)

以上其中一项是不正确的,还是有理由说它们需要完全不同?

1 个答案:

答案 0 :(得分:1)

Sigmoid的soft-max交叉熵成本和平方损失成本是完全不同的成本函数。虽然它们似乎密切相关,但它不是一回事。

如果作业被定义为“是分类网络的输出层”,那么两个函数都是“做同样的工作”。同样,你可以说“softmax回归和神经网络正在做同样的工作”。确实,这两种技术都试图对事物进行分类,但方式不同。

具有交叉熵成本的Softmax层通常优于具有l2损失的sigmoids。具有交叉熵的Softmax具有其自身的优点,例如输出层的更强梯度和对概率向量的归一化,而具有l2-损失的sigmoids的导数更弱。 您可以在this beuatiful book中找到大量解释。

祝你好运!