交叉熵误差
时间: 2025-04-29 22:53:02 浏览: 34
### 关于交叉熵误差
#### 概念
交叉熵是一种衡量两个概率分布之间差异性的指标,在机器学习领域常用于分类任务中的损失函数。它反映了模型预测的概率分布与真实标签之间的距离[^1]。
#### 数学定义
对于离散随机变量 \(X\) 和其对应的概率分布 \(P(X)\) 以及估计分布 \(Q(X)\),交叉熵可以表示为:
\[
H(P, Q) = - \sum_{x} P(x) \log(Q(x))
\]
其中,\(P(x)\) 是真实的概率分布,而 \(Q(x)\) 则是由模型给出的预测分布[^2]。
#### 计算方法
在二元分类问题中,假设样本的真实标签为 \(y_i \in \{0, 1\}\),模型输出的预测值为 \(\hat{y}_i\) (经过激活函数如 sigmoid 后得到),则单个样本上的交叉熵损失可写成如下形式:
\[
L(y_i, \hat{y}_i) = -( y_i \cdot \log (\hat{y}_i ) + (1-y_i) \cdot \log(1-\hat{y}_i ))
\]
而对于多类别的分类问题(假设有 K 类别),如果采用 softmax 函数作为最后一层,则交叉熵损失变为:
\[
L(Y,\hat{Y})=-\frac{1}{N}\sum^N_{n=1}\sum^K_{k=1}[ Y_k^{(n)} \log \hat{Y}_k ^{(n)} ]
\]
这里 \( N \) 表示训练集大小;\(K\) 表示类别数;\(Y_k^{(n)}\) 和 \(\hat{Y}_k^{(n)}\) 分别代表第 n 个样本属于 k 类的实际值和预测值[^3]。
以下是实现上述两种情况下的 Python 实现:
```python
import numpy as np
def binary_cross_entropy_loss(y_true, y_pred):
epsilon = 1e-7 # 防止 log(0)
y_pred_clipped = np.clip(y_pred, epsilon, 1 - epsilon)
loss = -np.mean(y_true * np.log(y_pred_clipped) + (1 - y_true) * np.log(1 - y_pred_clipped))
return loss
def categorical_cross_entropy_loss(y_true, y_pred):
epsilon = 1e-7
y_pred_clipped = np.clip(y_pred, epsilon, 1 - epsilon)
loss = -np.sum(y_true * np.log(y_pred_clipped)) / y_true.shape[0]
return loss
```
#### 应用场景
交叉熵广泛应用于各种监督学习任务之中,尤其是在涉及分类的任务里表现优异。例如图像识别、自然语言处理等领域都常用到此概念来优化神经网络参数以提高准确性[^4]。
阅读全文
相关推荐



















