交叉熵损失函数
交叉熵损失函数
标签(空格分隔): 损失函数
在得到预测结果之后我们使用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\)
模型一:
模型二:
我们发现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\)预测为正类的概率
多分类
多分类的情况实际上就是对二分类的扩展:
其中:
- \(M\) 代表类别的数量
- \(y_{ic}\) 符号函数(\(0\)或\(1\)),如果样本\(i\)的真实类别等于\(c\)取\(1\),否则取\(0\)。
- \(p_{ic}\) 观测样本\(i\)属于类别\(c\)的预测概率。
现在利用交叉熵损失函数计算上面的损失值:
模型一:
对所有样本的loss求平均:
模型二:
对所有样本的loss求平均:
可以发现交叉熵损失函数可以得到模型一和模型二的预测效果差异。
学习过程
交叉熵损失函数经常用于分类问题当中,特别是在神经网络做问题分类的时候,也经常使用交叉熵做损失函数,此外,由于交叉熵涉及到计算每个类别的概率,所以交叉熵几乎每次都和\(sigmoid/softmax\)函数一起出现