交叉熵损失函数
标签(空格分隔): 损失函数
在得到预测结果之后我们使用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_icdot log(p_i)+(1-y_i)cdot log(1-p_i)] ag1$$
其中:
- (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)函数一起出现