本文最后更新于:3 年前
由于总是忘记一些 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。