交叉熵(Cross-Entropy)是信息论和机器学习中常用的一个概念,特别是在分类任务中。它衡量了两个概率分布之间的差异性,通常用于衡量模型预测结果与真实标签之间的差异。
在分类任务中,假设有一个真实的标签分布 yyy 和一个模型的预测分布 y^\hat{y}y^,交叉熵可以通过以下公式计算:
H(y,y^)=−∑iyilog(y^i)H(y, \hat{y}) = -\sum_{i} y_i \log(\hat{y}_i)H(y,y^)=−∑iyilog(y^i)
其中,yiy_iyi 是真实标签的第 i 个类别的概率,y^i\hat{y}_iy^i 是模型预测的第 i 个类别的概率,log\loglog 是自然对数。交叉熵越小,表示模型的预测结果与真实标签之间的差异性越小,模型的性能越好。
在机器学习中,交叉熵常用于分类模型的损失函数(loss function)。对于二分类问题,交叉熵损失函数可以简化为:
Binary Cross-Entropy Loss=−(ylog(y^)+(1−y)log(1−y^))\text{Binary Cross-Entropy Loss} = -\left( y \log(\hat{y}) + (1-y) \log(1-\hat{y}) \right)Binary Cross-Entropy Loss=−(ylog(y^)+(1−y)log(1−y^))
其中,yyy 是真实的二分类标签(0或1),y^\hat{y}y^ 是模型预测的概率值。这个损失函数在训练过程中常用于衡量二分类模型的预测误差,通过优化这个损失函数,模型可以学习到更好的分类能力。
import torch
import torch.nn.functional as F
# 创建真实标签 y 和模型预测的概率分布 y_hat
y = torch.tensor([0, 1, 1]) # 真实标签,假设是一个二分类任务,0代表负类,1代表正类
y_hat = torch.tensor([[0.2, 0.8], [0.6, 0.4], [0.4, 0.6]]) # 模型预测的概率分布,每个样本有两个类别的概率值
# 使用 PyTorch 的交叉熵函数计算交叉熵损失
cross_entropy_loss = F.cross_entropy(y_hat, y)
print("交叉熵损失:", cross_entropy_loss.item())
import torch
import torch.nn.functional as F
# 创建真实标签 y 和模型预测的概率分布 y_hat
y = torch.tensor([0, 1, 1]) # 真实标签,假设是一个二分类任务,0代表负类,1代表正类
y_hat = torch.tensor([[0.2, 0.8], [0.6, 0.4], [0.4, 0.6]]) # 模型预测的概率分布,每个样本有两个类别的概率值
# 使用 PyTorch 的交叉熵函数计算交叉熵损失
cross_entropy_loss = F.cross_entropy(y_hat, y)
print("交叉熵损失:", cross_entropy_loss.item())