首页 文章

加权真阳性vs真阴性

提问于
浏览
0

这个loss function in tensorflow用作keras / tensorflow中的损失函数来加权二元决策

它加权误报与假阴性:

目标* -log(sigmoid(logits))(1 - 目标)* -log(1 - sigmoid(logits))

参数pos_weight用作积极目标的乘数:

目标* -log(sigmoid(logits))* pos_weight(1 - targets)* -log(1 - sigmoid(logits))

有没有人有任何建议,如果他们的损失/奖励不应该具有相同的权重,那么真正的积极因素如何可以加权来反对真实的阴性?

1 回答

  • 1

    首先,请注意,对于交叉熵损失,每个示例都有一些(可能非常非常小的)惩罚(即使正确分类) . 例如,如果正确的类是1并且我们的logit是10,那么惩罚将是

    -log(sigmoid(10)) = 4*1e-5
    

    这种损失(非常轻微)推动网络为这种情况产生更高的logit,使其sigmoid更接近1.同样,对于负类,即使logit为-10,损失将使其更加负面 .

    这通常很好,因为这些条款的损失非常小 . 如果您希望您的网络实际实现零损失,您可以使用 label_smoothing . 这可能与 minimizing loss 的经典设置中的网络接近[显然可以通过在损失中添加一些负数来实现网络"reward" . 但这不会改变梯度和训练行为) .

    话虽如此,您可以针对各种情况(tp,tn,fp,fn)对网络进行不同的惩罚 - 类似于Weight samples if incorrect guessed in binary cross entropy中描述的情况 . (看起来那里的实现实际上是不正确的 . 你想使用 weight_tensor 的相应元素来加权单个 log(sigmoid(...)) 项,而不是 cross_entropy 的最终输出 . )

    使用这种方案,您可能希望惩罚非常错误的答案,而不是几乎正确的答案 . 但请注意,由于 log(sigmoid(...)) 的形状,这已经发生了一定程度 .

相关问题