神经网络多分类任务的损失函数——交叉熵

本文介绍神经网络解决多分类问题的方法,包括使用n个输出节点表示n个类别,并利用Softmax回归将输出转化为概率分布,最后通过交叉熵评估预测结果与实际标签间的差距。

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

神经网络解决多分类问题最常用的方法是设置n个输出节点,其中n为类别的个数。对于每一个样例,神经网络可以得到的一个n维数组作为输出结果。数组中的每一个维度(也就是每一个输出节点)对应一个类别。在理想情况下,如果一个样本属于类别k,那么这个类别所对应的输出节点的输出值应该为1,而其他节点的输出都为0。

以识别手写数字为例,0~9共十个类别。识别数字1,神经网络的输出结果越接近[0,1,0,0,0,0,0,0,0,0]越好。交叉熵是最好的评判方法之一。交叉熵刻画了两个概率分布之间的距离,它是分类问题中使用比较广的一种损失函数。

p代表正确答案,q代表的是预测值。交叉熵值越小,两个概率分布越接近。

需要注意的是,交叉熵刻画的是两个概率分布之间的距离,然而神经网络的输出却不一定是一个概率分布,很多情况下是实数。如何将神经网络前向传播得到的结果也变成概率分布,Softmax回归就是一个非常有用的方法。

Softmax将神经网络的输出变成了一个概率分布,这个新的输出可以理解为经过神经网络的推导,一个样例为不同类别的概率分别是多大。这样就把神经网络的输出也变成了一个概率分布,从而可以通过交叉熵来计算预测的概率分布和真实答案的概率分布之间的距离了。

例子:

假设有一个三分类问题,某个样例的正确答案是(1,0,0)。某模型经过Softmax回归之后的预测答案是(0.5,0,4,0.1),那么这个预测和正确答案直接的交叉熵是:

如果另外一个模型的预测是(0.8,0.1,0.1),那么这个预测值和真实值的交叉熵是:

从直观上可以很容易知道第二个答案要优于第二个。通过交叉熵计算得到的结果也是一致的(第二个交叉熵的值更小)。

### 神经网络中的得分函数、损失函数和激活函数 #### 得分函数 (Score Function) 得分函数通常用于分类任务中,其主要作用是将输入数据映射到各个类别的分数上。常见的实现方式包括全连接层(即线性变换),通过权重矩阵 \( W \) 和偏置向量 \( b \),将前一层的输出转换为类别分数。 公式表示如下: \[ s = f(x; W, b) = Wx + b \] 其中,\( s \) 是得分向量,\( x \) 是输入特征向量,\( W \) 是权重矩阵,\( b \) 是偏置项[^1]。 得分函数主要用于最终预测阶段,在多分类问题中,它会给出每个类别的可能性评分。 --- #### 损失函数 (Loss Function) 损失函数衡量的是模型预测值与真实标签之间的差距。它的目标是最小化这种差距,从而优化模型参数。不同的任务可能采用不同类型的损失函数: - **均方误差 (MSE)**:适用于回归问题。 \[ L_{\text{MSE}} = \frac{1}{n} \sum_{i=1}^{n}(y_i - \hat{y}_i)^2 \] - **交叉熵损失 (Cross Entropy Loss)**:常用于分类问题。 \[ L_{\text{CE}} = -\frac{1}{N}\sum_{i=1}^{N} y_i \log(\hat{y}_i) \] 损失函数的作用在于指导反向传播过程中的梯度更新方向,因此它是训练过程中不可或缺的一部分[^2]。 --- #### 激活函数 (Activation Function) 激活函数引入了非线性特性,使得神经网络能够拟合复杂的模式。如果没有激活函数,则无论有多少隐藏层,整个网络都相当于一个简单的线性组合。 一些常用的激活函数及其特点如下: - **Sigmoid 函数** \[ f(x) = \frac{1}{1 + e^{-x}} \] 特点:平滑连续,范围在 (0, 1);但在深度网络中容易引发梯度消失问题。 - **Tanh 函数** \[ f(x) = \tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} \] 特点:零中心分布,收敛速度更快;同样存在梯度消失的风险。 - **ReLU 函数** \[ f(x) = \max(0, x) \] 特点:计算简单高效,有效缓解梯度消失现象;但对于负数区域完全抑制信号传输。 - **Softmax 函数** \[ f(x_j) = \frac{\exp(x_j)}{\sum_k \exp(x_k)} \] 特点:适合多分类问题,可将原始得分转化为概率形式。 激活函数的选择取决于具体应用场景以及性能需求。 --- #### 使用场景的区别与联系 | 功能 | 主要用途 | |--------------|--------------------------------------------------------------------------------------------| | **得分函数** | 将输入映射至类别或数值空间,提供初步判断依据 | | **损失函数** | 衡量预测结果与实际值间的差异程度,驱动模型调整 | | **激活函数** | 增加模型表达能力,使复杂关系建模成为可能 | 三者共同构成了完整的监督学习框架——先由得分函数完成初始评估,再借助激活函数赋予灵活性,最后利用损失函数反馈并修正偏差。 ```python import numpy as np def sigmoid(z): return 1 / (1 + np.exp(-z)) def tanh(z): return np.tanh(z) def relu(z): return np.maximum(0, z) def softmax(z): exp_z = np.exp(z - np.max(z)) # 防止溢出 return exp_z / np.sum(exp_z, axis=-1, keepdims=True) ``` 上述代码展示了几种常见激活函数的具体实现方法。 ---
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值