深度学习中的损失函数(交叉熵)

0、前景介绍

对于线性回归模型适用于输出为连续值的情景,但是在模型输出是一个像图像类别这样的离散值时。对于这样离散值的预测问题,通常使用一些例如sigmoid/softmax的分类模型。

1. 图像分类任务

假设下面两个模型都是通过softmax的方式得到对于每个预测结果的概率值:

模型1

预测真实是否正确
0.3 0.3 0.40 0 1 (猪)正确
0.3 0.4 0.30 1 0 (狗)正确
0.1 0.2 0.71 0 0 (猫)错误

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

模型2

预测真实是否正确
0.1 0.2 0.70 0 1 (猪)正确
0.1 0.7 0.20 1 0 (狗)正确
0.3 0.4 0.31 0 0 (猫)错误

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

1.1 分类错误率

最为直接的损失函数定义为: Classification Error=\frac{Error Num}{All Num}

ErrorNumm:预测错误数    AllNum:总预测数

模型1: Classification Error=\frac{1}{3}

模型2: Classification Error=\frac{1}{3}

可以看出,模型1和模型2的分类预测结果一样,但是通过模型2可以看出,其预测错误项的误差相对较小,所以分类错误率对于这类情况表现得不是很好。

1.2 平方误差损失

平方误差损失其定义为: 

L=\frac{1}{n}\sum_{i=1}^{n}(\hat{y^{i}}-y^{i})^{2}

\hat{y}为真实概率,y为期望概率,通常为0或1

求得模型1为:Mean Squared Error =\frac{[(0.3-0)^{2}+(0.3-0)^{2}+(0.4-1)^{2}]+[(0.3-0)^{2}+(0.4-1)^{2}+(0.3-0)^{2}]+[(0.1-1)^{2}+(0.2-0)^{2}+(0.7-0)^{2}]}{3}=\frac{0.54+0.54+1.34}{3}=0.81

同理可求得模型2为:

Mean Squared Error =\frac{0.14+0.14+0.74}{3}=0.34

我们发现,MSE能够判断出来模型2优于模型1,那为什么不采样这种损失函数呢?主要原因是在分类问题中,使用sigmoid/softmx得到概率,配合MSE损失函数时,采用梯度下降法进行学习时,会出现模型一开始训练时,学习速率非常慢的情况(MSE损失函数)。

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

1.3 交叉熵损失函数

H(y^{(i)},\hat{y}^{(i)})=-\sum_{j=1}^{q}y_{j}^{(i)}\log \hat{y}^{(i)}_{j}

y^{(i)}:标签,如果每个样本只有一个标签,则为0或1

\hat{y}^{(i)}:实际计算概率

其中带下标的y_{j}^{(i)}y^{(i)}中的非0即1的元素,在上式中,我们知道只有一个y_{j}^{(i)}为1,其余的都为0,所以上式可以写为:

H(y^{(i)},\hat{y}^{(i)})=-log \hat{y}^{(i)}_{j}

假设训练数据集的样本数为n,交叉熵损失函数为:

l(\theta )=-\frac{1}{n}\sum_{i=1}^{n}H(y^{(i)},\hat{y}^{(i)})

同样的,如果每个样本只有一个标签,那么交叉熵损失函数可以简写为:

l(\theta )=-\frac{1}{n}\sum_{i=1}^{n}log\hat{y}_{y^{(i)}}^{(i)}

从另一个角度分析,我们可以知道最化l(\theta )等价于最大化exp(-nl(\theta ))=\prod_{i=1}^{n}\hat{y}_{y^{(i)}}^{(i)}

即最小化交叉熵损失函数等价于最大化训练数据集所有标签类别的联合预测概率。

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

模型1

L_{1}=-(0*log0.3+0*log0.3+1*log0.4)=0.91

L_{2}=-(0*log0.3+1*log0.4+0*log0.3)=0.91

L_{3}=-(1*log0.1+0*log0.2+0*log0.7)=2.30

对所有样本的loss求平均:

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

模型2:

L_{1}=-(0*log0.1+0*log0.2+1*log0.7)=0.35

L_{2}=-(0*log0.1+1*log0.7+0*log0.3)=0.35

L_{3}=-(1*log0.3+0*log0.4+0*log0.4)=1.20

对所有样本的loss求平均:

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

2. 函数性质

可以看出,该函数是凸函数,求导时能够得到全局最优值。

3. 学习过程

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

我们用神经网络最后一层输出的情况,来看一眼整个模型预测、获得损失和学习的流程:

  1. 神经网络最后一层得到每个类别的得分scores(也叫logits)
  2. 该得分经过sigmoid(或softmax)函数获得概率输出;
  3. 模型预测的类别概率输出与真实类别的one hot形式进行交叉熵损失函数的计算。

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值