当前位置: 首页 > 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))
http://www.xdnf.cn/news/365851.html

相关文章:

  • 嵌入式学习笔记 - 关于结构体成员地址对齐问题
  • Edu教育邮箱申请成功下号
  • Knife4j文档的会被全局异常处理器拦截的问题解决
  • Python MNE-Python 脑功能磁共振数据分析
  • IO-Link系列集线器(三格电子)
  • MySQL 安全架构:从渗透测试到合规审计
  • 对称加密以及非对称加密
  • 从零理解 RAG:检索增强生成的原理与优势
  • Linux系统Shell脚本之sed
  • 深度学习-161-Dify工具之对比使用工作流和聊天流生成图表可视化的html文件
  • css样式实现-新闻列表
  • MySQL相关查询
  • 在 MyBatis 中实现控制台输出 SQL 参数
  • htmlUnit和Selenium的区别以及使用BrowserMobProxy捕获网络请求
  • RoPE长度外推:外插内插
  • ResNet详解
  • 企业名录搜索软件靠谱吗 企业名录搜索软件怎么使用
  • LSTM的简单模型
  • git做commit信息时的校验
  • C++ —— 可变参数
  • D720201 PCIE 转USB HUB
  • 值拷贝、浅拷贝和深拷贝
  • 利用混合磁共振成像 - 显微镜纤维束成像技术描绘结构连接组|文献速递-深度学习医疗AI最新文献
  • DAY04:Vue.js 指令与事件处理深度解析之从基础到实战
  • 弹窗表单的使用,基于element-ui二次封装
  • 十三、基于大模型的在线搜索平台——整合function calling流程
  • 萤石无插件取流巡检组件,便捷支持多屏预览与回放
  • MCP(Model Context Protocol,模型上下文协议)
  • tcpdump 的用法
  • [sklearn] 特征工程