Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

loss为负 #7

Open
wwwjs opened this issue Dec 27, 2020 · 15 comments
Open

loss为负 #7

wwwjs opened this issue Dec 27, 2020 · 15 comments

Comments

@wwwjs
Copy link

wwwjs commented Dec 27, 2020

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

@LLLLLLoki
Copy link

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

@JaheimLee
Copy link

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

@wwwjs
Copy link
Author

wwwjs commented Dec 30, 2020

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

@JaheimLee
Copy link

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

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

@Gpwner
Copy link

Gpwner commented Jan 13, 2021

有大佬搞清楚了吗

@bojone
Copy link

bojone commented Jan 20, 2021

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

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

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

@wwwjs
Copy link
Author

wwwjs commented Jan 20, 2021

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

@bojone
Copy link

bojone commented Jan 20, 2021

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

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

@wwwjs
Copy link
Author

wwwjs commented Jan 20, 2021

image
在run_siamese.py里面

@bojone
Copy link

bojone commented Jan 20, 2021

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

@JaheimLee
Copy link

image
在run_siamese.py里面

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

@wwwjs
Copy link
Author

wwwjs commented Jan 20, 2021

image
在run_siamese.py里面

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

奥奥,是的,多谢解答

@zheng5yu9
Copy link

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

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

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

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

@bojone
Copy link

bojone commented Apr 12, 2021

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

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

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

@ljwmusclenlper
Copy link

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants