说起交叉熵损失函数「Cross Entropy Loss」,相信大家都非常熟悉,但是要深入理解交叉熵损失函数的原理和作用,还得溯本追源才能对其有一个真实的理解与认知。
交叉熵
交叉熵是用来度量两个概率分布的差异性的,因此它被广泛的应用于机器学习和深度学习,用来衡量模型学习到的分布和真实分布的差异。要理解交叉熵,需要从信息量、熵、相对熵几个概念开始
- 信息量
信息奠基人香农认为“信息是用来消除随机不确定性的东西”,因此他提出了信息量的概念,信息量表示一条信息消除不确定性的程度,信息量的大小和信息发生的概率成反比。比如,“太阳从东边升起”这条信息的信息量为0,因为太阳肯定会从东边升起;“中国成为了世界第一强国”这条信息的信息量就比较大,因为中国能不能成为第一强国不确定性很大(只是举例,不代表任何立场!)
设某事情x发生的概率为P(x),那么它的信息量可以表示为:
“负号”很好理解,因为信息量与概率成反比;香农用“比特”来度量信息量,而信息量的比特数和所有可能情况的对数函数 log 有关。
- 熵
信息熵简称熵,表示信息量的期望(均值),期望可以理解为所有可能结果的概率乘以该对应的结果,那么熵可以表示为:
X={x1,x2...xn}表示一个随机变量(随机事件),{x1,x2...xn}表示所有可能的结果
- 相对熵(KL散度)
相对熵用来表示两个概率分布的差异,设一个随机变量X有两个独立的概率分布和,其相对熵可以表示为:
- 交叉熵
先直接上公式再讲解
观察上面的式子可知:相对熵=交叉熵-信息熵,就是交叉熵了。
在机器学习和深度学习中,往往已经有了真实的样本(随机变量)和标签(随机变量产生的所有可能结果),可以理解为实际的概率分布,而训练得到的模型相当于学习到的分布。样本和标签已知,那么信息熵相当于常量,所以直接用交叉熵来衡量两个独立概率分布的差异。
交叉熵损失函数
知道了交叉熵原理,我们就可以设计交叉熵损失函数来度量模型学习效果和真实数据分布的差异了
- 二分类交叉熵损失函数
根据交叉熵的原理,所谓二分类就是指随机变量X只有两种可能的结果(两个类别)。假设有一个真实模型只有两个类别y1,y2,模型的概率分布为,现在训练一个模型,其概率分布为,为了评价该模型训练的好不好(是否接近真实概率分布),定义一个交叉熵损失函数来度量
上面的式子中,,分别表示模型对y1,y2的预测结果,,分别表示实际为类y1,y2的概率,,分别表示预测为类y1,y2的概率
- 多分类交叉熵损失函数
多分类就是指随机变量X有多种可能的结果,明白了二分类交叉熵损失函数,多分类交叉熵损失函数就很容易知道了
上面的式子中,表示实际为类的概率,表示预测为类的概率
- 交叉熵损失函数在机器学习中的应用
虽然理解了交叉熵,也明白了交叉熵损失函数的原理,但是在机器学习的应用中我仍然是一脸懵,,怎么求啊?为什么代码中的交叉熵公式并不是这样的啊?实际上,在机器学习中存在一个隐含的转化过程
1)假设现在有一个猫y1、狗y2、车y3的图像识别任务,对于一个含有猫的图片,它的标签为Y=(1,0,0),Y代表的含义其实是,,。为什么是这样?因为对于这张含有猫的图片,猫出现的概率就是1,而狗和车出现的概率就是0
)2)模型对这张含有猫的图片的预测输出实际上是三个实数值,,,机器学习中会用softmax(二分类是sigmoid)这个函数将,,转化为概率再输出,所以你会发现模型输出直接参与损失函数的计算,其实它们已经变成了概率,,
为什么是交叉熵损失函数?
损失函数那么多,为什么在机器学习分类任务中偏爱交叉熵损失函数呢?它有如下两个优点
- 在分类问题中,大多数损失函数具有非凸的性质,采用梯度下降法训练模型,不一定能保证模型到达全局最优解
- 交叉熵损失函数的曲线是凸曲线,曲线整体呈单调性,loss越大,梯度越大,便于反向传播时的快速优化