bohanli/BERT-flow

loss为负

wwwjs opened this issue · 15 comments

wwwjs commented

你好,我在QQP数据集上进行训练时,发现loss为负数,请问是什么原因呢
image
image

我在蚂蚁金融数据集上 进行flow训练也出现了这种情况

我也遇到了这个问题,flow_loss会小于0,不知道为什么

wwwjs commented

在flow/glow_1*1.py的objective_tower函数中,返回objective前,加了负号。可能这是flow-loss为负的原因,flow_loss为负的话,为何总的loss是MESLoss(CrossEnpropyLoss) + flow_loss呢,不太理解。
image

在flow/glow_1*1.py的objective_tower函数中,返回objective前,加了负号。可能这是flow-loss为负的原因,flow_loss为负的话,为何总的loss是MESLoss(CrossEnpropyLoss) + flow_loss呢,不太理解。
image

但是训练刚开始的时候flow_loss确实是正的,不应该是这里的影响吧

有大佬搞清楚了吗

flow模型的训练目标是负对数似然,概率密度函数的负对数似然本来就可能为负的,没什么好奇怪的......

这就跟“连续型概率密度函数的熵并非总是正的”是一个道理。

对于离散型分布来说,所用的是概率,概率一定小于1,所以-log p一定是正数;但是连续型分布用的是概率密度,概率密度不一定小于1,所以-log p可能是负数,如果是正的p占主导,那么平均的-log p自然就是负数。

wwwjs commented

那为何要让一个正的mse loss和负的flow loss相加作为最终的总loss呢,求解答

那为何要让一个正的mse loss和负的flow loss相加作为最终的总loss呢,求解答

哪里显示出“让一个正的mse loss和负的flow loss相加作为最终的总loss”?

wwwjs commented

image
在run_siamese.py里面

我估计那只是有监督的情况下用来辅助优化的loss吧。

image
在run_siamese.py里面

在训练flow的时候,model_output['loss']会被设置成0,你看255那几行以及FLAGS.num_examples的取值情况

wwwjs commented

image
在run_siamese.py里面

在训练flow的时候,model_output['loss']会被设置成0,你看255那几行以及FLAGS.num_examples的取值情况

奥奥,是的,多谢解答

flow模型的训练目标是负对数似然,概率密度函数的负对数似然本来就可能为负的,没什么好奇怪的......

这就跟“连续型概率密度函数的熵并非总是正的”是一个道理。

对于离散型分布来说,所用的是概率,概率一定小于1,所以-log p一定是正数;但是连续型分布用的是概率密度,概率密度不一定小于1,所以-log p可能是负数,如果是正的p占主导,那么平均的-log p自然就是负数。

如果负对数似然 可正可负,那反向传播怎么优化呢,为负数时候怎么处理,代码中没有针对负对数似然为负时候进行特殊处理

flow模型的训练目标是负对数似然,概率密度函数的负对数似然本来就可能为负的,没什么好奇怪的......
这就跟“连续型概率密度函数的熵并非总是正的”是一个道理。
对于离散型分布来说,所用的是概率,概率一定小于1,所以-log p一定是正数;但是连续型分布用的是概率密度,概率密度不一定小于1,所以-log p可能是负数,如果是正的p占主导,那么平均的-log p自然就是负数。

如果负对数似然 可正可负,那反向传播怎么优化呢,为负数时候怎么处理,代码中没有针对负对数似然为负时候进行特殊处理

为什么要特殊处理呢?loss为负又没犯法,又没抢你饭碗,干嘛特意针对它呢?一个函数可以作为loss的必要条件是它有下界,没说它一定要是正的啊。假如f(x)的最小值为-1,我用梯度下降找到这个最小值点有什么问题吗?

有人训练的有效果吗?我反正没训练出效果出来