交叉熵损失函数

交叉熵损失函数

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


在得到预测结果之后我们使用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_icdot log(p_i)+(1-y_i)cdot log(1-p_i)] ag1$$

其中:

  • (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}) ag2 ]

其中:

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

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

模型一

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

对所有样本的loss求平均:

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

模型二

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

对所有样本的loss求平均:

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

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

学习过程

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

原文地址:https://www.cnblogs.com/A-FM/p/15076881.html