是否可以实现一个损失函数,优先考虑前 k 个概率中的正确答案?

Is it possible to implement a loss function that prioritizes the correct answer being in the top k probabilities?

我正在研究多 class 图像识别问题。任务是让正确答案出现在前 3 个输出概率中。所以我在想,也许存在一个聪明的成本函数,它优先考虑在前 K 个中的正确答案,并且不会在这些前 K 个之间惩罚太多。

这可以通过 class-加权交叉熵 损失来实现,它实质上是将权重分配给与每个 class 相关的错误。这种损失用于研究,例如请参阅 S. Panchapagesan 等人的论文 "Multi-task learning and Weighted Cross-entropy for DNN-based Keyword"。在计算交叉熵之前,您可以检查预测分布是否满足您的条件(例如,ground truth class 位于预测 classes 的前 k 个)并分配零(或接近零) ) 相应地加权,如果是的话。

不过还有一些悬而未决的问题:当正确的 class 在前 k 位时,你是否应该惩罚 k-1 错误地 预测的 classes ?例如,如果预测是 (0.9, 0.05, 0.01, ...),第三个 class 是正确的并且在前 3 名中——这个预测是否足够好?您应该关心 k-1 个不正确的 class 是什么吗?

之所以出现所有这些问题,是因为与标准交叉熵不同,这种损失没有概率解释。这就是为什么我不建议在实践中使用它,而是重新制定目标。

例如,如果最初的问题是对于某些输入几个 class同样好,最好的处理方法是使用软标签,例如(0.33, 0.33, 0.33, 0, 0, 0, ...) 而不是 one-hot(请注意,这完全符合概率解释)。它将迫使网络学习与所有三个好的 classes 相关的特征,并且通常会导致相同的目标,但可以更好地控制目标 classes。