我正在训练一个神经网络,对于六个类别中的每一个,都试图预测样本属于它的概率。之后,我想将这些概率用作属于该类的样本的一部分。我的网络提供 softmax 输出并使用交叉熵成本进行训练(实际上是线性输出,然后由 tf.nn.softmax_cross_entropy_with_logits 转换为 softmax)
当我想训练网络使所有 6 个概率都正确而不是仅仅将每个样本分类为 6 个类之一时,这是正确的成本函数吗?我开始犹豫了,因为 tensorflow 文档中提到了 tf.nn.softmax_cross_entropy_with_logits:
测量类别互斥(每个条目恰好属于一个类别)的离散分类任务中的概率误差。
更新 尽管听起来很奇怪,但交叉熵成本函数似乎在这里效果最好。在我的理解中,这是因为离散概率分布(维基百科)的交叉熵是
这个函数是最小的对全部. 这解释了为什么最小化交叉熵误差会强制输出分布到目标分布,即使我滥用 tf.nn.softmax_cross_entropy_with_logits 而不是给它标签,我给它一个离散的概率分布。
为什么它比 MSE 工作得更好可能是因为 6 类概率的大小非常不同。第 1 类可能有 80% 的概率,而第 2 类有 0.5% 的概率,因此 MSE 更注重让 80% 的类正确。
这是否意味着 CE 仍然是最佳选择,还是有办法缩放输出或权衡它们,以便网络注意让每个类都正确?