一般我们在做分类任务中会在模型的最后加入一层softmax去预测样本对于每个类别的概率,然后通过交叉熵损失函数去计算loss,但是交叉熵损失函数为什么能让模型work呢?为什么计算交叉熵损失函数时要把样本标签变成一个one-hot向量呢?下面我们就来讨论一下。
首先我们来描述一下问题:表示真实分布中N个样本,
表示其中的一个随机变量,
表示随机变量
的类别标签,M表示总共有M个类别,求新采样的样本
属于哪一个类别?
对于这个分类问题,我们一般希望构建一个概率模型,这个概率模型会预测样本在M个类别上的概率,那么M个概率中最大的那个类别标签就是样本的标签。假设就是我们要构建的概率模型,
为模型中需要学习的参数,
为输入的样本,
为类别标签变量,再假设
为样本
在所有类别标签上的真实条件概率分布。下面我们希望概率模型
尽可能的与真实分布
接近,很容易想到KL散度就可以刻画这两个分布的接近程度:
由于真实分布是恒定的,所以右边第一项是一个常数,最小化KL散度相当于最小化右边第二项,所以目标函数变为:
由于变量c是离散的,所以目标函数展开有:
这就是我们大名鼎鼎的交叉熵损失函数了,下面对这个损失函数进行一下说明。求和里面第一项表示样本
属于
类别的真实概率,在真实样本-标签中,如果
属于
类别,那么该样本对应的
类别概率为1,即
,在其他类别上的概率为0,所以计算交叉熵损失函数时要把样本标签变成一个one-hot向量,为1的分量表示该样本属于该类别的概率为1,否则为0。最后最小化上面的目标函数,就可以求出我们模型的参数了。