交叉熵损失函数

交叉熵损失函数

标签(空格分隔): 损失函数


在得到预测结果之后我们使用softmax对预测概率进行归一化,softmax之后产生的\(\hat{y}_i\)之中的参数之和为1,并且每个参数都是0~1之间,在归一化结束之后因为其用的是指数函数所以较大的值只会更大。下面用一个简单的图像分类例子开始讲解,下面两个模型都是通过\(sigmoid/softmax\)的方式得到对于每个预测结果的概率值
模型一:

\(\hat{y}\) \(y\) acc
0.3 0.3 0.4 0 0 1 T
0.3 0.4 0.3 0 1 0 T
0.1 0.2 0.7 1 0 0 F
模型二:
\(\hat{y}\) \(y\) acc
:-: :-: :-:
0.1 0.2 0.7 0 0 1 T
0.1 0.7 0.2 0 1 0 T
0.3 0.4 0.3 1 0 0 F
模型二对于样本1和样本2判断非常准确,对于样本3判断错误,但是相对来说不离谱。
在通过\(sigmoid/softmax\)归一化之后,我们需要损失函数判断模型在样本上的表现,那么我们可以定义那些损失函数呢?

Classification Error

最为直接的损失函数定义为:\(classification\;error=\frac{count\;of\;error\;items}{count\;of\;all\;items}\)

模型一:\(classification\;error=\frac{1}{3}\)

模型二:\(classification\;error=\frac{1}{3}\)

在前面可以看出来虽然模型一模型二都预测错了一个,但是模型二表现得更好,损失函数值应该更小才对, 这样才可以更好的判断模型的优劣。所以这种模型一般没啥人用。

Mean Squared Error

均方误差损失也是一种比较常见的损失函数,其定义为:\(MSE=\frac{1}{n}\sum_i^n(y_i-\hat{y}_i)^2\)

模型一

\[sample\;1\;loss=(0.3-0)^2+(0.3-0)^2+(0.4-1)^2=0.54\\ sample\;2\;loss=(0.3-0)^2+(0.4-1)^2+(0.3-0)^2=0.54\\ sample\;3\;loss=(0.1-1)^2+(0.2-0)^2+(0.7-0)^2=1.34\\ MES=\frac{0.54+0.54+1.34}{3}=0.81 \]

模型二

\[sample\;1\;loss=(0.1-0)^2+(0.2-0)^2+(0.7-1)^2=0.14\\ sample\;2\;loss=(0.1-0)^2+(0.7-1)^2+(0.2-0)^2=0.14\\ sample\;3\;loss=(0.3-1)^2+(0.4-0)^2+(0.3-0)^2=1.74\\ MES=\frac{0.14+0.14+0.74}{3}=0.34 \]

我们发现MES能够判断出来模型二优于模型一,那么为什么不采用这种损失函数呢?主要原因是在分类问题中使用\(sigmoid/softmax\)得到概率,配合\(MSE\)损失函数时,采用梯度下降法进行学习时,会出现模型一开始训练的时候,学习速率变得非常慢的情况。
对于分类问题的损失函数来说,分类错误率和均方误差都不是很好的损失函数,下面看一下交叉熵损失函数的表现。

Cross Entropy Loss Function

二分类

在二分的情况下,模型最后需要预测的结果只有两种情况,对于每个类别我们预测得到的概率为\(p\)\(1-p\)此时损失函数的表达式为:$$L=\frac{1}{N}\sum_iL_i=\frac{1}{N}\sum_i-[y_i\cdot log(p_i)+(1-y_i)\cdot log(1-p_i)]\tag1$$

其中:

  • \(y_i\) 表示样本\(i\)的label,正类为\(1\),负类为\(0\)
  • \(p_i\) 表示样本\(i\)预测为正类的概率

多分类

多分类的情况实际上就是对二分类的扩展:

\[L=\frac{1}{N}\sum_iL_i=-\frac{1}{N}\sum_{c=1}^My_{ic}ln(p_{ic})\tag2 \]

其中:

  • \(M\) 代表类别的数量
  • \(y_{ic}\) 符号函数(\(0\)\(1\)),如果样本\(i\)的真实类别等于\(c\)\(1\),否则取\(0\)
  • \(p_{ic}\) 观测样本\(i\)属于类别\(c\)的预测概率。

现在利用交叉熵损失函数计算上面的损失值:

模型一

\[sample\;1\;loss = -(0\times ln(0.3)+0\times ln(0.3)+1\times ln(0.4))=0.91 \\ sample\;2\;loss = -(0\times ln(0.3)+1\times ln(0.4)+0\times ln(0.3))=0.91 \\ sample\;3\;loss = -(1\times ln(0.1)+0\times ln(0.2)+0\times ln(0.7))=2.30 \]

对所有样本的loss求平均:

\[L = \frac{0.91+0.91+2.30}{3}=1.37 \]

模型二

\[sample\;1\;loss = -(0\times ln(0.1)+0\times ln(0.2)+1\times ln(0.7))=0.35 \\ sample\;2\;loss = -(0\times ln(0.1)+1\times ln(0.7)+0\times ln(0.2))=0.35 \\ sample\;3\;loss = -(1\times ln(0.3)+0\times ln(0.4)+0\times ln(0.3))=1.20 \]

对所有样本的loss求平均:

\[L = \frac{0.35+0.35+1.20}{3}=0.63 \]

可以发现交叉熵损失函数可以得到模型一模型二的预测效果差异。

学习过程

交叉熵损失函数经常用于分类问题当中,特别是在神经网络做问题分类的时候,也经常使用交叉熵做损失函数,此外,由于交叉熵涉及到计算每个类别的概率,所以交叉熵几乎每次都和\(sigmoid/softmax\)函数一起出现

posted @ 2021-07-29 20:14  X-POWER  阅读(383)  评论(0编辑  收藏  举报