【转载】损失函数 - 交叉熵损失函数

MSE

转载自:损失函数 - MSE[1]

数理统计中均方误差是指参数估计值与参数值之差平方的期望值,记为MSE。MSE是衡量“平均误差”的一种较方便的方法,MSE可以评价数据的变化程度,MSE的值越小,说明预测模型描述实验数据具有更好的精确度。

SSE(和方差)

在统计学中,该参数计算的是拟合数据和原始对应点的误差的平方和,计算公式为:SSE=\sum {i=1^m w_i(y_i-\hat y_i)^2}

其中y_i是真实数据,\hat y_i是拟合的数据,w_i>0 ,从这里可以看出SSE接近于0,说明模型选择和拟合更好,数据预测也越成功。

缺点:

使用MSE的一个缺点就是其偏导值在输出概率值接近0或者接近1的时候非常小,这可能会造成模型刚开始训练时,偏导值几乎消失。

假设我们的MSE损失函数为:J=\frac{1}{2}(y_i-\hat y_i)^2,偏导为:

\frac{dJ}{dW}=(y_i-\hat y_i) {\delta}'(Wx_i+b)x_i,其中{\delta }' (Wx_i+b)\delta (Wx_i+b)(1-\delta (Wx_i+b))。可以看出来,在\delta (Wx_i+b)值接近0或者1的时候,\frac{dJ}{dW}的值都会接近于0,其函数图像如下,这导致模型在一开始学习的时候速率非常慢,而使用交叉熵作为损失函数则不会导致这样的情况发生。

举例说明:

预测政治倾向例子:

我们希望根据一个人的年龄、性别、年收入等相互独立的特征,来预测一个人的政治倾向,有三种可预测结果:民主党、共和党、其他党。假设我们当前有两个逻辑回归模型(参数不同),这两个模型都是通过sigmoid的方式得到对于每个预测结果的概率值:

模型1:

对于样本1和样本2以非常微弱的优势判断正确,对于样本3的判断则彻底错误。

模型2

对于样本1和样本2判断非常准确,对于样本3判断错误,但是相对来说没有错得太离谱。

好了,有了模型之后,我们需要通过定义损失函数来判断模型在样本上的表现了,那么我们可以定义哪些损失函数呢?

分析方法:

  • 1. Classification Error(分类错误率)

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

模型1:cls error = 1/3

模型2:cls error = 1/3

我们知道,模型1模型2虽然都是预测错了1个,但是相对来说模型2表现得更好,损失函数值照理来说应该更小,很遗憾的是,classification error 并不能判断出来,所以这种损失函数虽然好理解,但表现不太好。

  • 2. Mean Squared Error (均方误差)

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

模型1:

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.32

对所有样本的loss求平均:

MSE = \frac{0.54+0.54+1.32}{3}=0.8

模型2:

sample\ 1\ loss = (0.1-0)^2+(0.2-0)^2+(0.7-1)^2=0.138

sample\ 2\ loss = (0.1-0)^2+(0.7-1)^2+(0.2-0)^2=0.138

sample\ 3\ loss = (0.3-1)^2+(0.4-0)^2+(0.3-0)^2=0.72

对所有样本的loss求平均:

MSE = \frac{0.138+0.138+0.72}{3}=0.332

我们发现,MSE能够判断出来模型2优于模型1,那为什么不采样这种损失函数呢?主要原因是逻辑回归配合MSE损失函数时,采用梯度下降法进行学习时,会出现模型一开始训练时,学习速率非常慢的情况。

有了上面的直观分析,我们可以清楚的看到,对于分类问题的损失函数来说,分类错误率和均方误差损失都不是很好的损失函数,下面我们来看一下交叉熵损失函数的表现情况。

Cross Entropy Error Function(交叉熵损失函数)

转载自损失函数 - 交叉熵损失函数[2]

二分类

在二分的情况下,模型最后需要预测的结果只有两种情况,对于每个类别我们的预测得到的概率为p1-p。此时表达式为:

L=\frac{1}{N}\sum _iL_i=\frac{1}{N}\sum _i-[y_i*log(p_i)+(1-y_i)*log(1-p_i)]

其中:

- y_i —— 表示样本i的label,正类为1,负类为0

- p_i —— 表示样本i预测为正的概率

现在我们利用这个表达式计算上面例子中的损失函数值:

模型1:

sample\ 1\ loss = -(0*log0.3+0*log0.3+1*log0.4)=0.91

sample\ 2\ loss = -(0*log0.3+1*log0.4+0*log0.3)=0.91

sample\ 3\ loss = -(1*log0.1+0*log0.2+0*log0.7)=2.30

对所有样本的loss求平均:

L = \frac{0.91+0.91+2.3}{3}=1.37

模型2:

sample\ 1\ loss = -(0*log0.1+0*log0.2+1*log0.7)=0.35

sample\ 2\ loss = -(0*log0.1+1*log0.7+0*log0.2)=0.35

sample\ 3\ loss = -(1*log0.3+0*log0.4+0*log0.4)=1.20

对所有样本的loss求平均:

L = \frac{0.35+0.35+1.2}{3}=0.63

函数图像:

多分类

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

L=\frac{1}{N}\sum _i L_i=\frac{1}{N}\sum _i-\sum _{c=1}^My_{ic}log(p_{ic})

其中:

- M ——类别的数量;

- y_{ic} ——指示变量(0或1),如果该类别和样本i的类别相同就是1,否则是0;

- p_{ic} ——对于观测样本i属于类别c的预测概率。

优缺点

4.1 优点

在用梯度下降法做参数更新的时候,模型学习的速度取决于两个值:一、学习率;二、偏导值。其中,学习率是我们需要设置的超参数,所以我们重点关注偏导值。从上面的式子中,我们发现,偏导值的大小取决于x_i\left [ \delta (s)-y \right ],我们重点关注后者,后者的大小值反映了我们模型的错误程度,该值越大,说明模型效果越差,但是该值越大同时也会使得偏导值越大,从而模型学习速度更快。所以,使用逻辑函数得到概率,并结合交叉熵当损失函数时,在模型效果差的时候学习速度比较快,在模型效果好的时候学习速度变慢。

4.2 缺点

Deng [3]在2019年提出了ArcFace Loss,并在论文里说了Softmax Loss的两个缺点:1、随着分类数目的增大,分类层的线性变化矩阵参数也随着增大;2、对于封闭集分类问题,学习到的特征是可分离的,但对于开放集人脸识别问题,所学特征却没有足够的区分性。对于人脸识别问题,首先人脸数目(对应分类数目)是很多的,而且会不断有新的人脸进来,不是一个封闭集分类问题。

另外,sigmoid(softmax)+cross-entropy loss 擅长于学习类间的信息,因为它采用了类间竞争机制,它只关心对于正确标签预测概率的准确性,忽略了其他非正确标签的差异,导致学习到的特征比较散。基于这个问题的优化有很多,比如对softmax进行改进,如L-Softmax、SM-Softmax、AM-Softmax等。

 

Reference

[1]损失函数 - MSE

[2]损失函数 - 交叉熵损失函数

[3] Deng, Jiankang, et al. "Arcface: Additive angular margin loss for deep face recognition." Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2019.

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值