我正在做一个BNN回归。在定义损失函数时,无论哪种BNN方法,都涉及到负对数似然损失(NLL损失)。我看到有些人会直接使用MSE损失作为NLL损失,有些人会定义自己的NLL损失。所以我的问题是,MSE可以被视为BNN的一种NLL损失吗?这两种损失有什么区别?我已经尝试使用MSE损失的BNN,它的工作,即使我不完全理解它是适当的或不。我试过torch.nn.NLLLoss,但它不工作。
torch.nn.NLLLoss
pn9klfpd1#
因为这是一个回归任务,所以使用MSE作为成本函数没有什么错。它并不特别依赖于神经网络,或者在这种情况下BNN。你不能在这里使用 torch.nn.NLLLoss 的原因是因为它期望类索引作为目标/标签,而不是你提供的连续变量。至于使用MSE损失作为NLL损失,我不知道你想表达什么意思。负对数似然(NLL)损失被视为仅用于PyTorch中的分类问题的成本函数,但实际情况并非如此。我相信这个issue会给予你一个清晰的解释。
7y4bm7vi2#
MSE是具有恒定方差的NLL(参见here)。因此,MSE
等价于(高斯)对数似然
其中I是单位矩阵(对角线上为1)。在PyTorch中,您可以使用GaussianNLLLoss来传递方差。image credits
I
2条答案
按热度按时间pn9klfpd1#
因为这是一个回归任务,所以使用MSE作为成本函数没有什么错。它并不特别依赖于神经网络,或者在这种情况下BNN。你不能在这里使用 torch.nn.NLLLoss 的原因是因为它期望类索引作为目标/标签,而不是你提供的连续变量。
至于使用MSE损失作为NLL损失,我不知道你想表达什么意思。负对数似然(NLL)损失被视为仅用于PyTorch中的分类问题的成本函数,但实际情况并非如此。我相信这个issue会给予你一个清晰的解释。
7y4bm7vi2#
MSE是具有恒定方差的NLL(参见here)。
因此,MSE
等价于(高斯)对数似然
其中
I
是单位矩阵(对角线上为1)。在PyTorch中,您可以使用GaussianNLLLoss来传递方差。
image credits