神经网络中的交叉熵

本文介绍了交叉熵作为分类问题损失函数的用途,特别是在神经网络的多分类任务中。通过示例解释了如何计算交叉熵,展示了它如何衡量预测概率分布与真实标签之间的距离。在PyTorch中,交叉熵通过torch.nn.CrossEntropyLoss函数实现,该函数内部包含了Softmax操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[参考《TensorFlow实战Google深度学习框架(第2版)》]

作为分类问题中的损失函数

在神经网络的多分类问题中,常常使用one-hot的方法设置n类输出,比如在手写体识别问题中,如果是数字1,神经网络的输出越接近[0,1,0,0,0,0,0,0,0,0]越好。那么如何衡量神经网络与label的接近程度呢?交叉熵是常用的使用方法。其刻画的是两个概率分布之间的距离
交叉熵是信息论中的概念。对于给定的两个概率分布p和q,交叉熵的计算公式是(PyTorch中对数以自然常数e为底):
H ( p , q ) = − ∑ i p i   l n   q i H(p,q)=-\sum_{i}p_i\,ln\, q_i H(p,q)=ipilnqi
在神经网络中常常通过一个Softmax层将原始输出层变成一个概率分布(神经网络图如下:):
y o u t p u t = s o f t m a x ( y ) i = e y i ∑ j = 1 n e y j y_{output}=softmax(y)_i=\frac{e^{yi}}{\sum_{j=1}^{n}e^{yj}}

### 交叉熵损失函数的概念与实现 #### 1. 交叉熵损失函数的定义 交叉熵损失函数是一种衡量两个概率分布之间差异的工具,常用于分类问题。假设真实标签为 \( y \)(通常为 one-hot 编码),预测值为 \( a \)(经过 softmax 激活后的输出)。对于单个样本,交叉熵损失可以表示为: \[ C = -\sum_{i=1}^{x} y_i \log(a_i) \] 其中: - \( x \) 是预测向量的维度; - \( y_i \) 是真实标签中第 \( i \) 维的值(0 或 1); - \( a_i \) 是预测值中第 \( i \) 维的值(经过 softmax 激活后,\( a_i \in [0, 1] \) 且所有 \( a_i \) 的和为 1)。 当类别标签为 \( y=1 \) 时,预测值 \( a \) 越接近 1,则损失越小;当类别标签为 \( y=0 \) 时,预测值 \( a \) 越接近 0,则损失越小[^2]。 #### 2. 交叉熵损失函数的用途 交叉熵损失函数广泛应用于分类任务中,特别是在神经网络模型中作为目标函数。其主要优点包括: - **对错误分类的惩罚更强**:相比于均方误差(MSE),交叉熵损失函数对错误分类的样本施加更大的惩罚,从而加速模型学习。 - **与 softmax 激活函数配合良好**:交叉熵损失函数与 softmax 激活函数结合使用时,能够提供更平滑的梯度,有助于优化算法更快收敛[^3]。 #### 3. 交叉熵损失函数的计算方式 对于一个包含 \( n \) 个样本的批次,交叉熵损失函数的平均值可以表示为: \[ C = -\frac{1}{n} \sum_{j=1}^{n} \sum_{i=1}^{x} y_{ji} \log(a_{ji}) \] 其中: - \( n \) 是样本数量; - \( j \) 表示第 \( j \) 个样本; - \( y_{ji} \) 和 \( a_{ji} \) 分别是第 \( j \) 个样本的真实标签和预测值在第 \( i \) 维上的值。 #### 4. 交叉熵损失函数的实现方法 以下是使用 Python 和 TensorFlow 实现交叉熵损失函数的代码示例: ```python import tensorflow as tf # 定义真实标签和预测值 y_true = tf.constant([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]], dtype=tf.float32) # 真实标签 (one-hot 编码) y_pred = tf.constant([[0.9, 0.05, 0.05], [0.1, 0.8, 0.1]], dtype=tf.float32) # 预测值 (softmax 输出) # 计算交叉熵损失 loss = tf.reduce_mean(tf.reduce_sum(-y_true * tf.math.log(y_pred), axis=1)) print("交叉熵损失:", loss.numpy()) ``` 上述代码中: - `y_true` 是真实标签,采用 one-hot 编码形式; - `y_pred` 是经过 softmax 激活后的预测值; - 使用 TensorFlow 的 `reduce_sum` 和 `reduce_mean` 函数分别计算每个样本的交叉熵损失以及批次内的平均损失[^4]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值