多分类问题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))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/80068.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/80068.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数智读书笔记系列032《统一星型模型--一种敏捷灵活的数据仓库和分析设计方法》

引言 在当今数字化时代,数据仓库作为企业数据管理的核心基础设施,承担着整合、存储和提供企业数据的关键角色。随着商业环境的快速变化和业务需求的日益复杂,数据仓库的设计方法也在不断演进,以适应新的挑战和要求。 背景与意义 数据仓库领域长期存在着两种主流方法论之…

RT-Thread 深入系列 Part 1:RT-Thread 全景总览

摘要: 本文将从 RTOS 演进、RT-Thread 的版本分支、内核架构、核心特性、社区与生态、以及典型产品应用等多维度,全面呈现 RT-Thread 的全景图。 关键词:RT-Thread、RTOS、微内核、组件化、软件包管理、SMP 1. RTOS 演进与 RT-Thread 定位 2…

[docker基础一]docker简介

目录 一 消除恐惧 1) 什么是虚拟化,容器化 2)案例 3)为什么需要虚拟化,容器化 二 虚拟化实现方式 1)应用程序执行环境分层 2)虚拟化常见类别 3)常见虚拟化实现 一)主机虚拟化(虚拟机)实现 二)容器虚拟化实现 一 消除恐…

PostgreSQL 的 pg_advisory_lock 函数

PostgreSQL 的 pg_advisory_lock 函数 pg_advisory_lock 是 PostgreSQL 提供的一种应用级锁机制,它不锁定具体的数据库对象(如表或行),而是通过数字键值来协调应用间的并发控制。 锁的基本概念 PostgreSQL 提供两种咨询锁(advi…

SGLang 实战介绍 (张量并行 / Qwen3 30B MoE 架构部署)

一、技术背景 随着大语言模型(LLM)的飞速发展,如何更高效、更灵活地驾驭这些强大的模型生成我们期望的内容,成为了开发者们面临的重要课题。传统的通过拼接字符串、管理复杂的状态和调用 API 的方式,在处理复杂任务时…

微服务中 本地启动 springboot 无法找到nacos配置 启动报错

1. 此处的环境变量需要匹配nacos中yml配置文件名的后缀 对于粗心的小伙伴在切换【测试】【开发】环境的nacos使用时会因为这里导致项目总是无法启动成功

Lua从字符串动态构建函数

在 Lua 中,你可以通过 load 或 loadstring(Lua 5.1)函数从字符串动态构建函数。以下是一个示例: 示例 1:基本动态函数构建 -- 动态构建一个函数 local funcStr "return function(a, b) return a b end"-…

【Python】‌Python单元测试框架unittest总结

1. 本期主题:Python单元测试框架unittest详解 unittest是Python内置的单元测试框架,遵循Java JUnit的"测试驱动开发"(TDD)理念,通过继承TestCase类实现测试用例的模块化组织。本文聚焦于独立测试脚本的编写…

【Python 实战】---- 使用Python批量将 .ncm 格式的音频文件转换为 .mp3 格式

1. 前言 .ncm 格式是网易云音乐专属的加密音频格式,用于保护版权。这种格式无法直接播放,需要解密后才能转换为常见的音频格式。本文将介绍如何使用 Python 批量将 .ncm 格式的音频文件转换为 .mp3 格式。 2. 安装 ncmdump ncmdump 是一个专门用于解密 .ncm 文件的工具。它…

Linux 学习笔记2

Linux 学习笔记2 一、定时任务调度操作流程注意事项 二、磁盘分区与管理添加新硬盘流程磁盘管理命令 三、进程管理进程操作命令服务管理(Ubuntu) 四、注意事项 一、定时任务调度 操作流程 创建脚本 vim /path/to/script.sh # 编写脚本内容设置可执行权…

YOLO目标检测算法

文章目录 前言一、目标检测算法简介1、传统目标检测算法(1)R-CNN算法简介(2)Fast R-CNN算法简介(3)Faster R-CNN算法简介 2、目标检测中的算法设计范式(1)one-stage(2&am…

【软件设计师:软件】20.软件设计概述

一、软件设计基本原则 一、软件设计基本原则 1. 模块 是指执行某一特定任务的数据结构和程序代码。 将模块的接口和功能定义为其外部特性将模块的局部数据和实现该模块的程序代码称为内部特性。在模块设计时,最重要的原则就是实现信息隐蔽和模块独立。 2 . 信息隐蔽 将每…

软件工程之面向对象分析深度解析

前文基础: 1.软件工程学概述:软件工程学概述-CSDN博客 2.软件过程深度解析:软件过程深度解析-CSDN博客 3.软件工程之需求分析涉及的图与工具:软件工程之需求分析涉及的图与工具-CSDN博客 4.软件工程之形式化说明技术深度解…

需求分析阶段测试工程师主要做哪些事情

在软件测试需求分析阶段,主要围绕确定测试范围、明确测试目标、细化测试内容等方面开展工作,为后续测试计划的制定、测试用例的设计以及测试执行提供清晰、准确的依据。以下是该阶段具体要做的事情: 1. 需求收集与整理 收集需求文档&#x…

vLLM部署Qwen2-7B模型推理

vllm简介 vLLM是一个高效的大语言模型推理和部署服务系统,专为大型语言模型的高效执行而设计。它不仅支持多种量化技术以减少模型大小和加速推理过程,还提供了与OpenAI API兼容的服务接口,使得现有的应用程序能够无缝对接。 一、前提环境 …

【STM32 学习笔记】GPIO输入与输出

GPIO详解 一、GPIO基本概念 GPIO(通用输入输出)是微控制器与外部设备交互的核心接口,具有以下特性: 可编程控制输入/输出模式支持数字信号的读取与输出集成多种保护机制复用功能支持片上外设连接 二、GPIO位结构解析 2.1 保护二…

安科瑞光伏综自系统在新能源电站中的应用及调度上传方案研究

摘要 随着全球对清洁能源需求的不断增长,光伏发电作为一种可持续的能源解决方案,正迅速发展。光伏综合自动化系统(综自系统)在确保光伏电站高效、稳定运行方面起着关键作用。本文详细介绍了安科瑞光伏综自系统,包括其背…

[python] 函数2-匿名函数

一 匿名函数 格式: 函数名 lambda 形参 : 返回值(表达式) 调用: 结果 函数名(实参) 一般只有一行代码,他是对def定义函数的一种简化,只能实现简单的逻辑 逻辑复杂时不要使用lambda add lambda a,b: ab # a,b就是形参 print(add(2,5)) 1.1 无参数 noargs_func lambda…

深入理解C/C++内存管理:从基础到高级优化实践

一、内存区域划分与基础管理机制​​ ​​栈(Stack)​​ 栈由系统自动管理,用于存储函数调用时的局部变量、参数及返回地址。其特点是高效但空间有限(通常1-8MB),遵循后进先出(LIFO)…

kafka 面试总结

Kafka的幂等性是一种机制,确保生产者发送的每条消息在Broker端只被持久化一次,即使生产者因网络问题等原因重试发送,也不会导致消息重复。 实现原理 生产者ID(PID) 每个生产者实例在初始化时,会被分配一个…