交叉熵(Cross Entropy)是用来衡量两个概率分布之间的差异性的一种方法。在机器学习和深度学习中,交叉熵常常被用作损失函数,用来衡量模型预测的结果与真实结果之间的差距。
设有两个概率分布p和q,p表示真实的分布,q表示模型预测的分布,交叉熵的定义如下:
H ( p , q ) = − ∑ i = 1 n p i log ( q i ) H(p,q)=-\sum_{i=1}^{n}p_i\log(q_i) H(p,q)=−i=1∑npilog(qi)
其中, p i p_i pi表示真实分布中第i个事件发生的概率, q i q_i qi表示模型预测分布中第i个事件发生的概率。
交叉熵越小,表示模型预测的结果与真实结果越接近,反之则越不接近。因此,在机器学习中,我们通常将交叉熵作为损失函数,用来指导模型的优化。
以分类问题为例,假设有m个样本,每个样本有k个类别,用 y i j y_{ij} yij表示第i个样本属于第j个类别的概率(0≤ y i j y_{ij} yij≤1, ∑ j = 1 k y i j = 1 \sum_{j=1}^{k}y_{ij}=1 ∑j=1kyij=1),用 t i j t_{ij} tij表示第i个样本的真实标签,如果第i个样本的真实标签是第j个类别,那么 t i j t_{ij} tij为1,否则为0。那么,模型的交叉熵损失函数可以表示为:
L = − 1 m ∑ i = 1 m ∑ j = 1 k t i j log ( y i j ) L=-\frac{1}{m}\sum_{i=1}^{m}\sum_{j=1}^{k}t_{ij}\log(y_{ij}) L=−m1i=1∑mj=1∑ktijlog(yij)
通过最小化交叉熵损失函数,我们可以训练出一个可以对输入进行有效分类的模型。
举例
交叉熵在机器学习中有广泛的应用,特别是在分类问题中。一个典型的例子是图像分类,假设我们有一张图片,我们需要将其分类到不同的类别中。我们可以使用神经网络模型进行分类,模型的输出是每个类别的概率。例如,我们将该图片分类为狗、猫或鸟的概率分别为0.6、0.3和0.1。我们可以使用交叉熵来计算模型输出和实际标签之间的差距。假设实际标签为狗,则交叉熵可以表示为:
H ( p , q ) = − ∑ i = 1 n p ( x i ) l o g ( q ( x i ) ) H(p,q)=-\sum_{i=1}^{n}{p(x_i)log(q(x_i))} H(p,q)=−∑i=1np(xi)log(q(xi))
其中, p ( x i ) p(x_i) p(xi)表示实际标签为狗的概率, q ( x i ) q(x_i) q(xi)表示模型预测为狗的概率。将实际标签代入上式,可以得到:
H ( p , q ) = − 1 l o g ( 0.6 ) − 0 l o g ( 0.3 ) − 0 ∗ l o g ( 0.1 ) = 0.51 H(p,q)=-1log(0.6)-0log(0.3)-0*log(0.1)=0.51 H(p,q)=−1log(0.6)−0log(0.3)−0∗log(0.1)=0.51
可以看到,交叉熵值越小,表示模型预测结果与实际标签越接近。因此,我们可以使用交叉熵作为损失函数,通过优化模型参数来最小化交叉熵,从而提高模型分类准确率。