类互斥但接受软标签是什么意思?

数据挖掘 张量流 多类分类 多标签分类
2021-10-06 22:30:57

TensorFlow 的softmax_cross_entropy_with_logits文档

测量类别互斥(每个条目恰好属于一个类别)的离散分类任务中的概率误差。例如,每张 CIFAR-10 图像都标有一个且只有一个标签:图像可以是狗或卡车,但不能同时是两者。

注意:虽然类是互斥的,但它们的概率不一定是互斥的。所需要的只是每一行标签都是一个有效的概率分布。如果不是,则梯度的计算将不正确。

乍一看它可能看起来是矛盾的,但我的猜测是,为类和标签提供这些条件,标签的概率分布总是有一个最大值。例如,labels = [0.5 0.5] 是二进制情​​况下的有效概率分布,但它不符合类的排他性。如果我错了,我不明白文档背后的想法。

还指出,对于相互难以捉摸的概率,应该使用sparse_categorical_cross_entropy ,但我认为如果标签是 one-hot 编码的,则可以使用softmax_cross_entropy_with_logits,这是一个有效的概率分布(确定性的)

编辑:

再次解决这个问题时,我想知道在多类排他情况下,标签的唯一约束是它们必须是有效的概率分布,标签 = [0.5 0.5] 是否应该是有效的实例标签。这个标签意味着注释器和网络都可以判断这个真实实例是属于 class_0 还是 class_1...

1个回答

类是互斥的但接受软标签是什么意思?

这里可以看出,tf.nn.softmax仅产生将 softmax 函数应用于输入张量的结果。softmax“挤压”输入,使得 sum(input) = 1; 这是一种正常化的方式。softmax 的输出形状与输入相同——它只是对值进行归一化。softmax 的输出可以解释为概率。相比之下,tf.nn.softmax_cross_entropy_with_logits在应用 softmax 函数后计算结果的交叉熵(但它以更数学上更仔细的方式一起完成)。它在数学上很小心,因为yilog(yi)可以为零。正如您从这里所读到的,随机初始化的 softmax 层极不可能在任何类中输出精确的 0。但这是可能的,因此值得允许。首先,不要为任何 y′i=0 评估 log(yi),因为负类总是对错误贡献 0。其次,在实际代码中,您可以将值限制为类似log(max(ypredict,1e15))为了数值稳定性 - 在许多情况下,它不是必需的,但这是明智的防御性编程。我鼓励你看看这个问题的答案。

注意:虽然类是互斥的,但它们的概率不一定是互斥的。所需要的只是每一行标签都是一个有效的概率分布。如果不是,则梯度的计算将不正确。

第一句话意味着您的分类器可能无法将标签完全按原样进行分类,即单热编码。它所做的是找到输入属于每个类的可能性有多大。如果它没有算法暗示的互斥输出向量,这不会成为问题。它只需要一个其条目之和等于 1 的向量。如果不是,则梯度的计算将不正确。我想添加这一行是为了宣布这个可微分组件的输出不会是单热编码的,这是因为这些网络的性质。卷积网络的第一层就像基向量,每个类实例共享这些基。所有的输入都是由这些基础组成的。

我想知道,在标签的唯一约束是它们必须是有效概率分布的多类排他情况下,标签 = [0.5 0.5] 是否应该是有效的实例标签。这个标签意味着注释器和网络都可以判断这个真实实例是属于 class_0 还是 class_1...

基本上,对于多标签分类,您的输入可能有不同的标签。因此,您的课程将不再相互排斥。此外,在这些情况下,我们不使用 softmax 作为最后一层。您必须为每个输出使用 sigmoid,并且您的交叉熵成本函数会略有不同1因此,每个条目的输出应该是一个有效概率,这就是使用 sigmoid 的原因,并且此类任务的标签向量不再是 one-hot-encoded。不同的类有不同的条目,并且基于每个类的实例的存在,对应的条目应该是一个。