本文主要介绍一下分类问题中损失函数的使用,对于二分类、多分类、多标签这个三个不同的场景,在 Pytorch 中的损失函数使用稍有区别。
损失函数
在介绍损失函数前,先介绍一下什么是 softmax,通常在分类问题中会将 softmax 搭配 cross entropy 一同使用。softmax 的计算公式定义如下:
$$\mathtt{softmax(x_i)={exp(x_i) \over {\sum_{j} exp(x_j)}}}$$
例如,我们现在有一个数组 $\left[\begin{matrix} 1, 2, 3 \end{matrix} \right]$,这三个数的 softmax 输出是:
$$\mathtt{softmax(1)={exp(1) \over exp(1)+exp(2)+exp(3)}=0.09}$$
$$\mathtt{softmax(2)={exp(2) \over exp(1)+exp(2)+exp(3)}=0.2447}$$
$$\mathtt{softmax(3)={exp(3) \over exp(3)+exp(2)+exp(3)}=0.6652}$$
所以 softmax 直白来说就是将原来输出是 $\left[\begin{matrix} 1, 2, 3 \end{matrix} \right]$ 的数组,通过 softmax 函数作用后映射成为 $\mathtt{(0, 1)}$ 的值,而这些值的累积和为 $\mathtt{1}$ (满足概率性质),那么我们就可以将它理解成概率,在最后选取输出结点的时候,我们就可以选取概率最大(也就是值对应最大的)结点,作为我们的预测目标!
而 Pytorch 中的 nn.CrossEntropyLoss 函数包含 nn.LogSoftmax() 和 nn.NLLLoss()。
对于Cross Entropy,Here is my favourite interpretation。在机器学习中,P 往往用来表示样本的真实分布,比如 $\left[\begin{matrix} 1, 0, 0 \end{matrix} \right]$ 表示当前样本属于第一类;Q 往往用来表示模型所预测的分布,比如 $\left[\begin{matrix} 0.7, 0.2, 0.1 \end{matrix} \right]$。