本文最后更新于:4 年前
由于总是忘记一些 loss 的常用场景和区别,此处记录一些常用的神经网络 loss。
Pytorch 官方文档中有十余种 loss 函数,其中常用的主要是CrossEntropyLoss、NLLLoss、MSELoss等。
这里仅先对这些常用 loss 展开。
NLLLoss
负对数损失,常用于分类任务。
值得注意的是,这里的输入 X 需要已经包含对于相应类别的 log-probability。
使用这个 loss 的时候需要在模型最后加入 LogSoftmax 层。
l(X,y)=L={l1,...,lN}⊤,ln=−wynXn,yn,
其中 X 是输入,y 是目标,w 是类别的权重,N 是 batch size。
具体的计算例子可以看这篇文章。
CrossEntropyLoss
交叉墒损失,同样常用于分类任务。
这个标准结合了 LogSoftmax 和 NLLLoss 两个部分。
首相介绍一下 LogSoftmax,其包含 log 函数和 softmax 函数。
LogSoftmax(xi)=log(∑jexp(xj)exp(xi))
对于交叉墒损失,值得注意的是,这里的输入 X 需要已经包含对每一个类,未经处理的 unformalized score。
换句话说,使用这个 loss 的时候不需要在模型最后加入 Softmax 层。
loss(x, class )=−log(∑jexp(x[j])exp(x[ class ]))=−x[ class ]+log(j∑exp(x[j]))
对于加权的情况,
loss(x, class )= weight [ class ](−x[ class ]+log(j∑exp(x[j])))
最终的 loss 需要加权平均得到,
loss(x, class )= weight [ class ](−x[ class ]+log(j∑exp(x[j])))
其中 x 是输入,class 是目标类,weight 是类别的权重,N 是 batch size。