计算机系统应用教程网站

网站首页 > 技术文章 正文

一文了解机器学习中的交叉熵

btikc 2024-09-02 17:09:53 技术文章 10 ℃ 0 评论

在介绍交叉熵之前首先介绍熵(entropy)的概念。熵是信息论中最基本、最核心的一个概念,它衡量了一个概率分布的随机程度,或者说包含的信息量的大小。

首先来看离散型随机变量。考虑随机变量取某一个特定值时包含的信息量的大小。假设随机变量取值为x,对应的概率为p(x)。直观来看,取这个值的可能性越小,而它又发生了,则包含的信息量就越大。因此如果定义一个函数h(x)来描述随机变量取值为的信息量的大小的话,则h(x)应该是p(x)的单调减函数。例如,一年之内人类登陆火星,包含的信息量显然比广州明天要下雨大,因为前者的概率明显小于后者。

满足单调递减要求的函数太多了,我们该选择哪个函数呢?接着考虑。假设有两个相互独立的随机变量,它们的取值分别为和,取该值的概率为p(x)p(y)。根据随机变量的独立性,它们的联合概率为:

p(x,y)=p(x)p(y)

由于这两个随机变量是相互独立的,因此它们各自取某一值时包含的信息量应该是两个随机变量分别取这些值的时候包含的信息量之和:

h(x,y)=h(x)+h(y)

这要求h(x)能把p(x)的乘法转化为加法,在数学上,满足此要求的是对数函数。因此,可以把信息量定义为:

h(x)=-logp(x)

这个对数的底数是多少并没有太大关系,根据换底公式,最后计算出来的结果就差了一个倍数,信息论中通常以2为底,在机器学习中通常以e为底,在后面的计算中为了方便起见我们用10为底。需要强调的对数函数前面加上了负号,这是因为对数函数是增函数,而我们要求h(x)p(x)的减函数。另外,由于0≤p(x)≤1,因此logp(x)<0,加上负号之后刚好可以保证这个信息量为正。

上面只是考虑了随机变量取某一个值时包含的信息量,而随机变量的取值是随机的,有各种可能,那又怎么计算它取所有各种取值时所包含的信息量呢?既然随机变量取值有各种情况,而且取每个值有一个概率,那我们计算它取各个值时的信息量的均值即数学期望即可,这个信息量的均值,就是熵。

对于离散型随机变量,熵定义为

这里约定pi =p(xi)

下面用实际例子来说明离散型随机变量熵的计算。对于下表定义的概率分布

它的熵为

再来看另外一个概率分布

它的熵为

从上面两个结果可以看出一个现象。第一个概率分布非常均匀,随机变量取每个值的概率相等;第二个不均匀,以极大的概率取值为1,取值为2-4的概率非常小。第一个概率分布的熵明显的大于第二个概率分布,即随机变量越均匀(随机),熵越大,反之越小。

下面考虑连续型随机变量。对于连续型随机变量,熵(微分熵)定义为

这里将求和换成了广义积分。

根据熵的定义,随机变量取各个值的概率相等(均匀分布)时有极大值,在取某一个值的概率为1,取其他所有值的概率为0时有极小值(此时随机变量退化成某一必然事件或者说确定的变量)。下面证明这一结论。

对于离散型随机变量,熵定义的是如下函数

其中xi 为随机变量取第 i 个值的概率。约束条件为:

由于对数函数的定义域是非负的,因此可以去掉不等式约束。构造拉格朗日乘子函数

xi 求偏导数并令其为0,可以得到

这意味着在极值点处所有的xi 必须相等。对λ求偏导数并令其为0,可以得到


因此当xi = 1/n时函数取得极值。此时熵的值为


进一步的可以证明该值是极大值。熵的二阶偏导数为

因此Hessian矩阵为

由于 xi > 0,该矩阵负定,熵是凹函数,有极大值。因此当 xi =1/n时熵有极大值。如果定义

显然它与下面的极限是一致的

则当某一个xi =1,其他xj =0, j!=0的时熵有极小值0

除此情况之外,只要满足 0<xi <1,则logxi < 0,因此

上面这些结果说明熵是非负的,当且仅当随机变量取某一值的概率为1,取其他值的概率为0时熵有极小值0。此时随机变量退化成普通的变量,取值固定。而当随机变量取所有值的概率相等时即均匀分布时熵有极大值。故熵的范围为

下面举例说明熵在机器学习中的应用,以决策树为例。用于对分类问题,决策树在训练每个非叶子节点时要寻找最佳分裂,将样本进行划分成尽可能纯的子集。此时熵的作用是度量数据集的“纯度”值。样本集D的熵不纯度定义为

当样本只属于某一类时熵有最小值,当样本均匀的分布于所有类中时熵有最大值。找到一个分裂让熵最小化,它就是最佳分裂。

交叉熵

交叉熵的定义与熵类似,不同的是定义在两个概率分布而不是一个概率分布之上。对于离散型随机变量,交叉熵定义为:

其中x为离散型随机变量,p(x)q(x)是它的两个概率分布。交叉熵衡量了两个概率分布的差异。其值越大,两个概率分布相差越大;其值越小,则两个概率分布的差异越小。

下面通过实际例子来说明交叉熵的计算。对于下表的两个概率分布

其交叉熵为

对于下表的两个概率分布

其交叉熵为

第一个表格中两个概率分布完全相等,第二个则差异很大。第二个的熵比第一个大。后面我们会证明这一结论。

对于连续型概率分布,交叉熵定义为

如果两个概率分布完全相等,则交叉熵退化成熵。

可以证明,当两个分布相等的时候,交叉熵有极小值。假设第一个概率分布固定即p(x)为常数,此时交叉熵为如下形式的函数

约束条件为

构造拉格朗日乘子函数

对所有变量求偏导数,并令偏导数为0,有

最后可以解得

交叉熵函数的Hessian矩阵为:

该矩阵正定,因此交叉熵损失函数是凸函数,上面的极值点是极小值点。

用于logistic回归

交叉熵在机器学习中用得更多,通常用于充当目标函数,以最小化两个概率分布的差异。下面介绍交叉熵在logistic回归中的应用。logistic的预测函数为

样本属于正样本的概率为

属于负样本的概率为

其中y为类别标签,取值为1或者0,分别对应正负样本。

训练样本集为( xi, yi),i=1, ..., l, xi 为特征向量,yi为类别标签,取值为1或0。给定w参数和样本特征向量x,样本属于每个类的概率可以统一写成如下形式

y为1和0,上式分别等于样本属于正负样本的概率。由于训练样本之间相互独立,训练样本集的似然函数为

对似然函数取对数,得到对数似然函数为

这就是交叉熵的特殊情况,随机变量只取01两个值。要求该函数的最大值,等价于求下面函数的极小值:

目标函数的梯度为

Hessian矩阵为

如果单个样本的特征向量为:

矩阵Xi定义为

此矩阵可以写成如下乘积形式

对任意不为0的向量X

从而矩阵Xi 半正定,另外由于

因此Hessian矩阵半正定,目标函数是凸函数。logistic回归求解的优化问题是不带约束条件的凸优化问题。可以证明,如果使用欧氏距离作为目标函数则无法保证目标函数是凸函数。这是使用交叉熵而不使用欧氏距离作为logistic回归的目标函数的主要原因。

用于softmax回归

softmax回归是logistic回归的推广,用于解决多分类问题。给定l个训练样本(xi, yi),其中xin维特征向量,yi为类别标签,取值为1k之间的整数。softmax回归估计一个样本属于每一类的概率

模型的输出为一个k维的概率向量,其元素之和为1,每一个分量为样本属于该类的概率。使用指数函数进行变换的原因是指数函数值都大于0,概率值必须是非负的。分类时将样本判定为概率最大的那个类。要估计的参数为:

其中θi 每个都是一个列向量,θ是一个n×k的矩阵。如果将上面预测出的概率向量记为y*,即:

样本真实标签向量用one-hot编码,即如果样本是第 i 类,则向量的第个分量为1,其他为0,将这个标签向量记为y。仿照logistic回归的做法,样本属于每个类的概率可以统一写成:

显然这个结论是成立的。因为只有一个yi 为1,其他的都为0,一旦y的取值确定,如样本为第j类样本,则上式的值为yj* 。给定一批样本,它们的似然函数为:

yij 为第 i 个训练样本标签向量的第 j 个分量。对上式取对数,得到对数似然函数为

让对数似然函数取极大值等价于让下面的损失函数取极小值

这就是交叉熵,同样可以证明这个损失函数是凸函数。

对单个样本的损失函数可以写成:

如果样本属于第 i 类,则yi = 1,其他的分量都为0,上式可以简化为

下面计算损失函数对θp 的梯度。如果i=p,则有:

否则

如果一个样本是第p类的,对单个样本的损失函数可以简化为

如果softmax回归预测出来的属于第p类的值为1,即与真实标签值完全吻合,此时损失函数有极小值0。反之,如果预测出来属于第p类的值为0,此时损失函数值为正无穷。

用于神经网络

softmax回归经常被用作神经网络的最后一层,完成多分类任务,训练时采用的损失函数一般为交叉熵。在神经网络的早期,更多的使用了欧氏距离损失函数,后来对分类任务交叉熵使用的更多。对于分类问题,交叉熵一般比欧氏距离有更好的效果,可以收敛到更好的局部最优解。此时训练样本的类别标签向量同样为one-hot编码形式,是类别取每个值的概率,神经网络输出的概率估计向量要和真实的样本标签向量接近。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表