深度学习之常用的损失函数——分类问题和交叉熵损失函数

背景

分类问题是机器学习任务中的一个经典任务,分类问题又分为二分类问题和多分类问题,在分类问题中,使用最多的损失函数是交叉熵损失函数(Cross Entropy Loss)。

交叉熵

交叉熵(Cross Entropy)是Shannon信息论中一个重要概念,主要用于度量两个概率分布间的差异性信息。

在信息论中,交叉熵是表示两个概率分布p,q,其中p表示真实分布,q表示非真实分布,在相同的一组事件中,其中,用非真实分布q来表示某个事件发生所需要的平均比特数。假设现在有一个样本集中两个概率分布p,q,其中p为真实分布,q为非真实分布。假如,按照真实分布p来衡量识别一个样本所需要的编码长度的期望为:

H(p)=ip(i)log(1p(i))H(p) = \sum_{i}p(i)\cdot log(\frac{1}{p(i)})

但是,如果采用错误的分布q来表示来自真实分布p的平均编码长度,则应该是:

H(p,q)=ip(i)log(1q(i))H(p,q) = \sum_{i}p(i)\cdot log(\frac{1}{q(i)})

此时就将H(p,q)称之为交叉熵。对于离散变量,交叉熵的计算方式如下:

H(p,q)=ip(i)log(1q(i))H(p, q) = \sum_{i}p(i)\cdot log(\frac{1}{q(i)})

其中 ii 为可能的值

二分类问题

对于二分类问题,我们的预测结果通常为“是(1)”或“不是(0)”。我们常在深度学习神经网络的最后一层(输出层)使用Sigmoid函数作为激活函数。
对于Sigmoid函数,

sigmoid(z)=11+ezsigmoid(z) = \frac{1}{1+e^{-z}}

它的值域为(0, 1),刚好可以作为分类问题的预测结果为1的概率。
假设对于样本 x 预测结果 y=1 的概率为

P(y=1x)=y^P(y=1|x) = \hat{y}

那么预测结果y=0的概率为

P(y=0x)=1y^P(y=0|x) = 1 - \hat{y}

那么我们预测的样本x的分布为q

1 0
P y^\hat{y} 1y^1 - \hat{y}

而样本x的真实分布为p

1 0
P yy 1y1 - y

根据离散变量交叉熵的计算公式带入真实分布 p 和 预测分布 q 可得

H(p,q)=ip(i)log(1q(i))=p(y=0x)log(1q(y=0x))+p(y=1x)log(1q(y=1x))=ylog(1y^)+(1y)log(11y^)=[ylogy^+(1y)log(1y^)]\begin{aligned} H(p, q) &= \sum_{i}p(i)\cdot log(\frac{1}{q(i)}) \\ &= p_{(y=0∣x)} \cdot log(\frac{1}{q_{(y=0∣x)}}) + p_{(y=1∣x)} \cdot log(\frac{1}{q_{(y=1∣x)}}) \\ &=ylog(\frac{1}{\hat{y}}) + (1-y)log(\frac{1}{1-\hat{y}}) \\ &=-[ylog\hat{y} + (1-y)log(1-\hat{y})] \end{aligned}

那么对m个样本,二分类问题的交叉熵损失函数可表示为

J=1mi=1m[ylogy^+(1y)log(1y^)]J = -\frac{1}{m} \sum ^{m}_{i=1}[ylog\hat{y} + (1-y)log(1-\hat{y})]

交叉熵计算的是两种分布的近似程度,在机器学习中,我们希望算法预测的分布尽可能地接近真实分布,就要想办法减小预测分布和真实分布的交叉熵。这是使用交叉熵作为损失函数的理论依据。

多分类问题

在多分类问题中,我们通常在深度学习的最后一层使用Softmax分类器来将输出结果映射到不同类型的概率上去。
假设我们的分类结果有 n 个类。最后一层(输出层)就会输出n个值.
假设对样本x最后一层输出为

(a1,a2,a3...an)(a_1, a_2, a_3...a_n)

经过Softmax层处理后

yi^=softmax(ai)=eaij=1neaj\hat{y_i}=softmax(a_i) = \frac{e^{a_i}}{\sum ^{n}_{j=1}e^{a_j}}

得到

(y1^,y2^,y3^...yn^)(\hat{y_1}, \hat{y_2}, \hat{y_3}...\hat{y_n})

显然

i=1nyi=1\sum ^{n}_{i=1}y_i = 1

这是符合概率论,所有情况的概率加起来为1。
根据交叉熵的计算公式

H(p,q)=ip(i)log(1q(i))=i=1nyilog(1yi^)=i=1nyilogyi^\begin{aligned} H(p, q) &= \sum_{i}p(i)\cdot log(\frac{1}{q(i)}) \\ &= \sum ^{n}_{i=1}y_i \cdot log(\frac{1}{\hat{y_i}}) \\ &= - \sum ^{n}_{i=1}y_i \cdot log\hat{y_i} \end{aligned}

那么对m个样本,多分类问题的交叉熵损失函数可表示为

J=1mi=1mj=1nyj(i)logyj^(i)J = -\frac{1}{m} \sum ^{m}_{i=1}\sum ^{n}_{j=1}y^{(i)}_j \cdot log\hat{y_j}^{(i)}

阅读(130)
评论(0)
updated@2021-05-17
评论区
目录