交叉熵损失函数和softmax
时间: 2025-05-11 09:29:17 浏览: 37
### 交叉熵损失函数与Softmax的关系及用法
#### 背景知识
在深度学习中,分类任务通常涉及将输入映射到一组离散类别中的某一个。为此,模型的最后一层通常会使用 **Softmax 函数** 将原始输出转化为概率分布形式[^3]。随后,为了衡量预测的概率分布与真实标签之间的差异,常采用 **交叉熵损失函数**。
#### Softmax 的作用
Softmax 是一种激活函数,其核心功能是将任意实数向量转换成一个合法的概率分布向量。具体而言,对于给定的未归一化的分数 \( z_k \),Softmax 计算方式如下:
\[
y_t, k = \frac{e^{z_{t,k}}}{\sum_k e^{z_{t,k}}}
\]
其中:
- 下标 \( t \) 表示第 \( t \) 个样本;
- \( k \) 对应输出层的第 \( k \) 个神经元;
- 输出值被约束在区间 [0, 1] 并且总和为 1。
这种特性使得 Softmax 非常适合用于多分类问题,因为它能够清晰地表示每个类别的相对可能性。
#### 交叉熵损失函数的作用
交叉熵是一种常用的评估指标,在二分类或多分类场景下广泛适用。它通过比较两个概率分布——实际分布(通常是独热编码的形式)以及预测分布来量化误差大小。假设目标的真实分布为 \( y^* \),而模型预测得到的是经过 Softmax 处理后的分布 \( \hat{y} \),那么单个样本上的交叉熵可以写成:
\[
H(y^*, \hat{y}) = -\sum_k y^*_k \log(\hat{y}_k)
\]
当应用于批量数据时,则需取平均值得到最终的损失值。值得注意的是,如果某个类别属于正例 (\( y^*_k = 1 \)) ,则仅该位置对应的 log 值会被保留;其余部分因乘积项均为零而不影响结果[^2]。
#### PyTorch 中的具体实现
PyTorch 提供了一个便捷的方法 `torch.nn.CrossEntropyLoss` 来同时完成这两步操作:先应用内部隐式的 Softmax 变换,接着计算基于此变换之后的结果同真值间的交叉熵距离。这意味着开发者无需显式调用额外的 Softmax 层即可获得期望效果。
以下是利用 PyTorch 实现的一个简单例子:
```python
import torch
import torch.nn as nn
# 构造假数据
input_tensor = torch.randn((3, 5), requires_grad=True) # 批次大小为3,有5个可能的类别
target_labels = torch.tensor([1, 0, 4]) # 正确的目标索引分别是第二、第一和第五列
criterion = nn.CrossEntropyLoss()
loss_value = criterion(input_tensor, target_labels)
print(f'Computed Loss Value: {loss_value.item()}')
```
上述代码片段展示了如何创建一批未经处理的数据并指定相应的目标类别编号,进而借助预定义好的 CrossEntropyLoss 类型对象求得整体训练过程里的代价反馈信号强度。
---
#### 总结
综上所述,Softmax 和交叉熵紧密相连,前者负责生成合理的概率估计序列,后者依据这些估算判定偏离程度从而指导优化方向调整权重参数直至收敛至较优解空间附近为止[^1]。
阅读全文
相关推荐




















