【发布时间】:2018-07-24 03:03:29
【问题描述】:
这个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))
如果它们的损失/奖励不应该具有相同的权重,那么是否有人建议如何将真阳性与真阴性加权?
【问题讨论】:
-
我说的是显而易见的,但真正的正面/负面通常不包括在损失中。网络对它们进行了正确分类,我们通常不会因为这样做而对其进行处罚。你想通过“加权”真正的正面与负面来实现什么?
-
我的问题是假阴性有机会成本,需要以某种方式建模到交叉熵损失函数中。机会成本等于我给予真正肯定的回报(权重),即 +10。误报有不同的回报 -1。但是决策是二元的而不是概率的,只有 y_pred 是概率的,因为它源自具有 sigmoid 激活函数的输出神经元。从本质上讲,tp 比 tn(零收益)更重要(+10),需要相应地加权,以使其更“积极”地预测为真。
-
如果我理解正确并且您的目标是让模型更有可能预测为真,那么让误报的相对成本非常小。网络将看到可以说“是”并且是错误的,但不能说“不”并且是错误的。在极端情况下,如果您将误报的成本设为零,我敢打赌网络将学会始终输出“是”……我在高层要说的是,我在您的描述中没有看到您无法通过加权误报与误报来实现的目标(由所需的网络行为定义)。
-
是的,你正确理解了我的目标。你是说我只需要调整假阳性和假阴性的权重,以包括我想要从真阳性和真阴性中获得的额外“抽奖”吗?如果是这样,具体应该怎么做?
-
除非你在一些 RL 设置中(或者至少做一些像策略梯度/REINFORCE 之类的事情),否则我不知道如何使用奖励来训练具有反向传播的网络。你只能惩罚错误,不能分配奖励。话虽如此,我认为您可以通过为不同的错误分配不同的权重来实现所需的行为,即使您没有明确“奖励”该行为。如果这没有多大意义,请准确定义所需的行为并解释为什么您认为建议的机制无法实现此行为。我现在不知道该说些什么。