详细剖析机器学习中的损失函数---交叉熵

上一篇文章总结了机器学习需要掌握的数学知识点—详细整理,这一节针对里面的第八章,第一节的前四个小段内容进行一个详细的整理,如有不当之处,欢迎各位大神指出。

所谓机器学习,就是“使用算法解析数据,从中学习,然后对世界上的某件事情做出决定或预测”。这句话就表明,建立一个合适的数学模型是机器学习的核心任务。那么问题来了,什么才是合适的数学模型?是否随意建立一个数学模型就可以让计算机去学了?答案显然不是。只有预测结果令人满意的数学模型才是我们需要的,通过‘最小化损失函数’的方法可以达到这一目的。本章节的重点就是围绕机器学习中的损失函数进行深入浅出的说明。

本章节涉及的主要知识点如下:

l 信息论与交叉熵损失函数的关系
l 交叉熵损失函数的定义及应用
l 如何通过代码实现交叉熵损失函数
l 解决多分类与二分类的损失函数
l 均方差损失函数与其他自定义损失函数

8.1 交叉熵损失函数

本节重点介绍机器学习中最常用的损失函数,交叉熵损失函数的概念及应用。通过举例的方式让读者对交叉熵的概念有一个直观的了解。

信息论与交叉熵

信息论

前面我们说了,“使用算法解析数据,从中学习,然后对世界上的某件事情做出决定或预测”即所谓机器学习。这里学习的依据是什么?就是我们获取的外部信息。那么这与信息论与交叉熵又有什么关系呢?我们先来看一看信息论要说什么。

信息论是做什么的呢?信息论是从物理学中借鉴而来,它是一种用来描述概率分布或者概率分布之间相似性的手段。它的基本思想就是,小概率事件的发生一定伴随着大量的信息。通俗的说就是,一个不太可能或者很少见的事情发生了一定比通常时常发生的常态事件包含更多外部信息。比如有一则消息是,‘一个女生结婚三个月后怀孕了’,这是一件很平常的事情,信息量非常的少且不会引起关注。但是如果消息改为‘一个男生结婚三个月后怀孕了’,这就是一件超乎想象的事情了,信息量就非常的大。

我们通过信息论的基本思想对信息进行量化,通常遵循以下三个性质:

• 非常可能发生的事件信息量要比较少,并且极端情况下,确定能够发生的事件应该没有信息量。

• 较不可能发生的事件具有更高的信息量。

• 独立事件应具有倍增量的信息。例如,投掷的硬币两次正面朝上传递的信息量,应该是投掷一次硬币正面朝上的信息量的两倍。

为了满足上述三点性质,我们可以定义一个事件的自信息(self-information)为:
在这里插入图片描述
对上述公式的说明:

  1. P ( x ) P(x) P(x)是随机事件 X = x X=x X=x发生的概率,因此是大于0且小于1(这里要注意的是 P ( x ) P(x) P(x)一定是大于0,否则无意义);

  2. 我们用 l o g log log来表示自然对数,其底数为 e e e,这个对数是一个增函数,因此我们在前面增加一个负号:事件发生的可能性越大, I ( x ) I(x) I(x)就越小;

  3. I ( x ) I(x) I(x) 的单位是奈特,1奈特代表一个事件发生概率为 1 / e 1/e 1/e时所传递的信息量。


介绍了信息论关于机器学习的相关数学知识后,我们再来介绍另外一个重要的概念:熵。

什么是熵?熵就是描述上述信息量的期望值的一种术语,数学表述如下:
在这里插入图片描述
这里关于期望值的概念大家可以参考7.1节-数学期望进行回顾。在实际应用中,我们会通过香农熵(Shannon entropy)对整个事件概率分布的不确定性总量进行量化。数学表述如下:
在这里插入图片描述
不难发现公式8.3和公式8.2其实是同一个公式, E ( X ) E(X) E(X)就是随机变量的数学期望,相关公式如下:

离散时:
在这里插入图片描述

连续时:
在这里插入图片描述
带入公式8.3后得到:

离散时:
在这里插入图片描述
连续时:
在这里插入图片描述
上述公式中 k k k代表类别, n n n代表类别总数。

为了便于读者对这一概念的理解,我们举一个简单的例子。

小王一家有六口人,大家吃饭的偏好各不相同,为了满足大家各自的需要同时又不会增加过大的做饭工作量,小王家对吃饭主食的规定如下:

早餐:一律吃面包

午餐:三份米饭,三份面条

晚餐:两份水饺,两份包子,两份米饭

现在我们来分别计算一下这三顿主食的香农熵。
在这里插入图片描述
很显然,按照这种生活模式,早上吃面包是必然事件,中午吃米饭或者面条的可能性居中,晚上的主食变动较大,难以猜测。
在这里插入图片描述
图8.1形象的展示了香农熵与事件概率之间的关系,从上图我们很容易发现,概率接近1或者0这种确定性事件时,香农熵取值变小,当概率趋近0.5(均匀分布)的时候,香农熵取值达到最大。

交叉熵的定义

前面我们介绍了信息论和熵的基本概念,现在进入本节的主题-交叉熵。交叉熵是如何应用到机器学习或者深度学习中的呢?

要想搞明白这个问题,我们先来看一看什么是损失函数。损失函数(loss function)是用来估量模型的预测值与真实值的不一致程度,它是一个非负函数。一般来说,损失函数越小,模型的鲁棒性越好。这里的‘损失’指我们为了实现某一个目的而搭建的模型的预测结果与与真实结果之间的差距。(说明:现实生活中,我们往往知道真实事件的结果,但是通向这个结果的真是模型是不存在的,我们要做的就是搭建一个逼近真实模型的近似模型,并利用这个模型对输入条件进行预测)

在这里插入图片描述

上图描述了损失函数的基本原理,损失函数最大的作用就是衡量机器学习的预测能力,减少损失函数的目的就是尽量使得真实曲线接近预测曲线(当然也不是越接近越好,详细的说明见过拟合和欠拟合的章节)。

现在我们再来看一看交叉熵的定义是如何说明的,在深度学习领域,交叉熵是用来刻画两个概率分布方向向量之间的距离的,是分类问题中使用比较广的一种损失函数。从这句话我们显然知道,距离越小,函数越精确。那么问题来了,我们如何判断两个概率分布之间的这个距离是大还是小?我们接着往下看-交叉熵的计算公式。

交叉熵的计算公式

在这里插入图片描述

式8.9即为交叉熵的计算公式,看起来与式8.6和8.7类似,区别在于公式的左边是 H ( P , Q ) H(P,Q) H(P,Q)而非 H ( X ) H(X) H(X),前者代表概率分布 Q Q Q对概率分布 P P P估计的准确程度。所以在使用交叉熵损失函数时,一般设定 P P P代表准确结果, Q Q Q代表预测值。

现在的问题是公式8.9是如何得到的?通过8.1.1节我们知道,一个分布的香农熵是指遵循这个分布的事件所产生的期望信息总量。这里我们做一个约定,对于 X X X的同一个随机变量如果有两个单独的概率分布 P ( x ) P(x) P(x) Q ( x ) Q(x) Q(x),则可以使用 K L KL KL散度来衡量这两个分布之间的距离,相关公式如下:

在这里插入图片描述
K L KL KL散度的定义我们知道它是一个非负值,当 D K L D_{KL} DKL取0时,表示 P ( x ) P(x) P(x) Q ( x ) Q(x) Q(x)取值处处相同。在机器学习算法中,经常会用到 K L KL KL散度来衡量两个概率分布之间的距离,但是实际做法中我们不会直接使用 K L KL KL散度,而是使用它的替代形式,也就是公式8.9所示的交叉熵。交叉熵和 K L KL KL散度关系密切,用 H ( P , Q ) H(P,Q) H(P,Q)表示交叉熵,则有:
在这里插入图片描述
将8.6、8.10带入8.11得到
在这里插入图片描述公式8.12简化后得到
在这里插入图片描述
很显然,式8.9就是式8.13的loss函数形式。

交叉熵的应用

我们现在搞明白了交叉熵的计算模型,为了便于理解,我们以MINIST手写体数字识别为例,详细说明交叉熵是如何判断数学模型的预测结果是否与真实值接近的。

手写体识别问题可以被归纳为一个十分类问题,主要是判断一张图片中的阿拉伯数字是0-9中的哪一个。解决此类分类问题最常用的方法是设置n个网络的输出节点,节点的个数要与类别的个数一致。对于网络输入的每一个样本,神经网络的输出都是一个n维的向量,向量中的每一个结果都对应n个类别中的某一类别的概率值。

例如,在理想情况下,如果一个样本属于类别k,那么这个类别所对应的输出节点的输出值应该为1,其他节点的输出值均为0.以手写体识别数字1为例,网络模型的输出结果可能是【0.1,0.8,0.1,.0,.0,.0,.0,.0,.0,.0】或者【0.2,0.5,0.2,0.1,.0,.0,.0,.0,.0,.0,】。根据输出结果,我们的直觉是选择其中概率最大的那个作为最终答案,所以这两个结果都能判断出数字的结果为1.当然最理想的输出结果一定是这样的【.0,1.0,.0,.0,.0,.0,.0,.0,.0,.0,】.

现在我们利用交叉熵的公式分别对网络模型的两个输出结果进行计算,判断哪个结果与理想结果最为接近。计算过程如下:

针对结果【0.1,0.8,0.1,.0,.0,.0,.0,.0,.0,.0】
在这里插入图片描述
针对结果【0.2,0.5,0.2,0.1,.0,.0,.0,.0,.0,.0,】

在这里插入图片描述
显然,我们会更倾向于第一个结果。

在这里插入图片描述
关于机器学习需要掌握的数学知识点的其余内容,我会持续更新,如有不当之处,欢迎指正,不胜感激。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三景页三景页

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值