当前位置: 首页 > news >正文

多分类问题softmax传递函数+交叉熵损失

在多分类问题中,Softmax 函数通常与交叉熵损失函数结合使用。

Softmax 函数

Softmax 函数是一种常用的激活函数,主要用于多分类问题中。它将一个实数向量转换为概率分布,使得每个元素的值在 0 到 1 之间,且所有元素的和为 1。

Softmax 函数的数学表达式:

softmax ( z i ) = e z i ∑ j = 1 K e z j \text{softmax}(z_i) = \frac{{\rm e}^{z_i}}{\sum_{j=1}^{K} {\rm e}^{z_j}} softmax(zi)=j=1Kezjezi

其中, z i z_i zi是输入向量的第 i i i个元素, K K K是向量的长度。

Softmax 函数的实现

在 Python 中,可以使用 NumPy 库来实现 Softmax 函数。

import numpy as npdef softmax(x):exp_x = np.exp(x - np.max(x))  # 防止数值溢出return exp_x / np.sum(exp_x)# 示例输入
x = np.array([2.0, 1.0, 0.1])
print(softmax(x))

Softmax 函数的应用

Softmax 函数广泛应用于机器学习中的分类问题,特别是在神经网络的输出层。它可以将网络的原始输出转换为概率分布,从而方便地进行分类决策。

在使用 Softmax 函数时,需要注意数值稳定性问题。由于指数函数的增长非常快,直接计算 e z i e^{z_i} ezi可能导致数值溢出。为了避免这个问题,通常会从输入向量中减去其最大值,再进行指数计算。

def softmax_stable(x):exp_x = np.exp(x - np.max(x))return exp_x / np.sum(exp_x)

Softmax 函数的梯度

在反向传播算法中,需要计算 Softmax 函数的梯度。

Softmax 函数的梯度公式:

∂ softmax ( z i ) ∂ z j = softmax ( z i ) ( δ i j − softmax ( z j ) ) \frac{\partial \text{softmax}(z_i)}{\partial z_j} = \text{softmax}(z_i) (\delta_{ij} - \text{softmax}(z_j)) zjsoftmax(zi)=softmax(zi)(δijsoftmax(zj))

其中, δ i j \delta_{ij} δij是 Kronecker delta 函数,当 i = j i = j i=j时为 1,否则为 0。

交叉熵损失

交叉熵损失(Cross-Entropy Loss)是深度学习中常用的损失函数,尤其在分类任务中广泛应用。它衡量模型预测的概率分布与真实标签分布之间的差异。

对于有 K K K个类别的多分类问题,模型预测各类的概率为 p = [ p 1 , p 2 , … , p K ] p = [p_1, p_2, \dots, p_K] p=[p1,p2,,pK](满足 ∑ i = 1 K p i = 1 \sum_{i=1}^{K} p_i = 1 i=1Kpi=1),则单个样本的交叉熵损失为:

L ( y , p ) = − ∑ i = 1 K y i log ⁡ ( p i ) L(y, p) = -\sum_{i=1}^{K} y_i \log(p_i) L(y,p)=i=1Kyilog(pi)

由于 y i y_i yi只有一个元素为 1,其余为 0,损失函数实际上只计算了正确类别的预测概率的对数。

对于多分类问题,交叉熵损失的公式为:
L = − 1 N ∑ i = 1 N ∑ k = 1 K y i , k log ⁡ ( p i , k ) L = -\frac{1}{N} \sum_{i=1}^{N} \sum_{k=1}^{K} y_{i,k} \log(p_{i,k}) L=N1i=1Nk=1Kyi,klog(pi,k)
其中, y i , k y_{i,k} yi,k是样本 i i i在类别 k k k上的真实标签(0 或 1), p i , k p_{i,k} pi,k是模型预测的样本 i i i属于类别 k k k的概率, K K K是类别总数。

假设真实标签为one hot编码向量 y y y(只有一个元素为 1,其余为 0),交叉熵损失的公式简化为:
L = − 1 N ∑ i = 1 N log ⁡ ( p i , j ) L = -\frac{1}{N} \sum_{i=1}^{N}\log(p_{i,j}) L=N1i=1Nlog(pi,j)
j j j为样本 i i i的真实类别。

交叉熵损失函数源于信息论中的交叉熵概念,用于度量两个概率分布之间的差异。在分类任务中:

  • 真实标签分布:可以视为一个确定的分布(如独热编码)。
  • 模型预测分布:是模型输出的概率分布。

交叉熵损失函数通过计算这两个分布的差异,指导模型优化,使预测分布尽可能接近真实分布。

交叉熵损失当预测概率与真实标签一致时,损失值为 0。当预测概率与真实标签差异较大时,损失值会迅速增大,从而促使模型快速调整参数。

代码示例:交叉熵损失

def cross_entropy(y_true, y_pred):return -np.sum(y_true * np.log(y_pred))# 示例标签和预测
y_true = np.array([1, 0, 0])
y_pred = softmax(np.array([2.0, 1.0, 0.1]))print("Cross Entropy Loss:", cross_entropy(y_true, y_pred))

相关文章:

  • [特征工程]机器学习-part2
  • 物流基础知识-术语 | 医药物流(1)
  • 操作系统面试题(3)
  • 北斗导航 | RTKLib中重难点技术,公式,代码
  • RISC-V AIA SPEC学习(五)
  • NWD 格式转换 STL 全流程:专业方案与迪威模型网在线转换详解
  • Filecoin存储管理:如何停止Lotus向特定存储路径写入新扇区数据
  • 21.第二阶段x64游戏实战-分析采集物偏移
  • 工业软件自主化突围:RTOS 如何打破 “协议栈 - 控制器” 生态垄断
  • MapStruct用法实战
  • 驱动-信号量
  • C++结构体介绍
  • Go Modules 的基本使用
  • 富乐德传感技术盘古信息 | 锚定“未来工厂”新坐标,开启传感器制造行业数字化转型新征程
  • [Windows] 东芝存储诊断工具1.30.8920(20170601)
  • AOP实现原理
  • LVGL9保姆级教程(源码获取)
  • 了解Hadoop
  • 背单词软件开发英语App英语提分宝超级单词表,河南数匠软件开发
  • 左支座加工工艺与钻φ25孔专用夹具设计
  • 重视体重管理,筑牢健康基石
  • 云南临沧一行贿案金额认定比受贿案多41万,重审时检方变更金额起诉
  • 扶桑谈|素称清廉的石破茂被曝受贿,日本政坛或掀起倒阁浪潮
  • 巴基斯坦军方:印度袭击已致巴方31人死亡
  • 4月深圳新房、二手房成交同比均上涨,“5月有望延续积极向好的发展态势”
  • 吴清:基金业绩差的必须少收管理费,督促基金公司从“重规模”向“重回报”转变