Softmax交叉熵损失函数公式
时间: 2025-04-19 14:38:48 浏览: 33
### Softmax 交叉熵损失函数的数学表达式
对于一个多分类问题,假设输入向量 \(\mathbf{z} = (z_1, z_2, ..., z_K)\),其中 \(K\) 是类别数量。Softmax 函数将这个输入向量转换成一个概率分布:
\[
S(z_i) = \frac{\exp(z_i)}{\sum_{j=1}^{K}\exp(z_j)}
\]
在这个上下文中,\(S(z_i)\) 表示第 \(i\) 类别的预测概率。
给定真实标签 \(\mathbf{y}=(y_1,y_2,...,y_K)\),这里 \(y_i\) 是 one-hot 编码形式的真实标签(即只有一个位置为1其余全为0),那么针对单个样本的交叉熵损失函数定义如下[^1]:
\[
L(\mathbf{y}, S(\mathbf{z}))=-\sum_{i=1}^{K}{y_i\log(S(z_i))}
\]
当考虑整个训练集时,则需要计算所有样本平均后的总损失值。如果数据集中有 \(N\) 个样本,则总体均方误差表示为:
\[
J=\frac{1}{N}\sum_{n=1}^{N}-\sum_{k=1}^{K}{y_k^n\log(S(z_k^n))}
\]
上述公式描述了如何通过比较模型输出的概率分布与实际标签来衡量错误程度,并指导参数更新过程以最小化这种差异。
```python
import numpy as np
def softmax_cross_entropy_loss(logits, labels):
"""
计算softmax交叉熵损失
参数:
logits -- 形状为(n_classes,) 的numpy数组,未经过激活函数处理的原始分数.
labels -- 形状为(n_classes,) 的one-hot编码numpy数组,真实的类别标签.
返回:
loss -- 单个样本上的交叉熵损失值
"""
exp_logits = np.exp(logits - np.max(logits)) # 数值稳定性措施
probabilities = exp_logits / np.sum(exp_logits)
log_likelihoods = -np.log(probabilities[labels==1])
loss = np.mean(log_likelihoods)
return loss
```
阅读全文
相关推荐




















