加权真阳性与真阴性
weighting true positives vs true negatives
这个 loss function in tensorflow 在 keras/tensorflow 中用作损失函数来加权二元决策
它对误报与漏报进行加权:
目标 * -log(sigmoid(logits)) +
(1 - 目标) * -log(1 - sigmoid(logits))
参数pos_weight用作正目标的乘数:
目标 * -log(sigmoid(logits)) * pos_weight +
(1 - 目标) * -log(1 - sigmoid(logits))
如果其中 loss/reward 个权重不应该相等,是否有人有任何建议可以如何对真阳性和真阴性进行加权?
首先,请注意,对于交叉熵损失,每个示例都有一些(可能非常非常小)惩罚(即使正确 class 化)。比如正确的class是1,而我们的logit是10,那么penalty就是
-log(sigmoid(10)) = 4*1e-5
这种损失(非常轻微)推动网络为这种情况产生更高的 logit,使其 sigmoid 更接近 1。同样,对于负值 class,即使 logit 为 -10,损失将使它变得更加消极。
这通常没问题,因为此类术语的损失非常小。如果你希望你的网络真正实现零损失,你可以使用label_smoothing
。这可能与您在 最小化损失 的 classic 设置中获得的网络一样接近 "rewarding"(您显然可以 "reward" 网络通过在损失中添加一些负数。但这不会改变梯度和训练行为)。
话虽如此,您可以针对各种情况对网络进行不同的惩罚 - tp、tn、fp、fn - 类似于 Weight samples if incorrect guessed in binary cross entropy 中描述的内容。 (看起来那里的实现实际上是不正确的。您想使用 weight_tensor
的相应元素来加权各个 log(sigmoid(...))
项,而不是 cross_entropy
的最终输出)。
使用此方案,您可能希望对非常错误的答案进行惩罚,而不是对几乎正确的答案进行惩罚。但是,请注意,由于 log(sigmoid(...))
.
的形状,这已经在一定程度上发生了
这个 loss function in tensorflow 在 keras/tensorflow 中用作损失函数来加权二元决策
它对误报与漏报进行加权:
目标 * -log(sigmoid(logits)) + (1 - 目标) * -log(1 - sigmoid(logits))
参数pos_weight用作正目标的乘数:
目标 * -log(sigmoid(logits)) * pos_weight + (1 - 目标) * -log(1 - sigmoid(logits))
如果其中 loss/reward 个权重不应该相等,是否有人有任何建议可以如何对真阳性和真阴性进行加权?
首先,请注意,对于交叉熵损失,每个示例都有一些(可能非常非常小)惩罚(即使正确 class 化)。比如正确的class是1,而我们的logit是10,那么penalty就是
-log(sigmoid(10)) = 4*1e-5
这种损失(非常轻微)推动网络为这种情况产生更高的 logit,使其 sigmoid 更接近 1。同样,对于负值 class,即使 logit 为 -10,损失将使它变得更加消极。
这通常没问题,因为此类术语的损失非常小。如果你希望你的网络真正实现零损失,你可以使用label_smoothing
。这可能与您在 最小化损失 的 classic 设置中获得的网络一样接近 "rewarding"(您显然可以 "reward" 网络通过在损失中添加一些负数。但这不会改变梯度和训练行为)。
话虽如此,您可以针对各种情况对网络进行不同的惩罚 - tp、tn、fp、fn - 类似于 Weight samples if incorrect guessed in binary cross entropy 中描述的内容。 (看起来那里的实现实际上是不正确的。您想使用 weight_tensor
的相应元素来加权各个 log(sigmoid(...))
项,而不是 cross_entropy
的最终输出)。
使用此方案,您可能希望对非常错误的答案进行惩罚,而不是对几乎正确的答案进行惩罚。但是,请注意,由于 log(sigmoid(...))
.