【CUDA】

news2024/9/20 18:51:28

笔者在学习Softmax实现时遇到了一个问题,很多文章直接将softmax的计算分成了五个过程,而没有解释每个过程的含义,尤其是在阅读这篇文章时,作者想计算最基本的softmax的效率,以展示可行的优化空间:
在这里插入图片描述
贴一个gpt写的解释,个人感觉还蛮清楚的,至于为什么要减去每行的最大值,是为了使大整数运算转化为0-1的小数运算,以避免溢出。

Softmax 函数是深度学习和机器学习中常用的一种激活函数,它将输入向量转换为概率分布。具体地,softmax 函数接受一个输入向量并将其转换为概率向量,输出向量的每个元素表示输入向量中对应元素的概率。Softmax 函数的计算涉及以下五个步骤:

1. ReduceMax

目的:找到每一行的最大值。

操作

  • 对于每一行,找到该行的最大值。这用于后续步骤的数值稳定性。

内存访问

  • 读取:需要读取整个矩阵的所有元素,总共是 D 次读取。
  • 写入:需要将每一行的最大值写入到一个数组中,总共是 num_rows 次写入。

总内存访问D + num_rows

2. BroadcastSub

目的:将每个元素减去其所在行的最大值。

操作

  • 将每个元素减去其所在行的最大值,这样可以避免数值溢出(数值稳定性技巧)。

内存访问

  • 读取:需要读取整个矩阵的所有元素(D 次),以及每一行的最大值(num_rows 次),总共是 D + num_rows 次读取。
  • 写入:需要将结果写回到矩阵中,总共是 D 次写入。

总内存访问2 * D + num_rows

3. Exp

目的:对每个元素计算指数函数(exp)。

操作

  • 计算每个元素的指数函数值 exp(x)

内存访问

  • 读取:需要读取整个矩阵的所有元素,总共是 D 次读取。
  • 写入:需要将结果写回到矩阵中,总共是 D 次写入。

总内存访问2 * D

4. ReduceSum

目的:计算每一行的总和。

操作

  • 对于每一行,计算其所有元素的和。这用于将指数函数值标准化为概率。

内存访问

  • 读取:需要读取整个矩阵的所有元素,总共是 D 次读取。
  • 写入:需要将每一行的总和写入到一个数组中,总共是 num_rows 次写入。

总内存访问D + num_rows

5. BroadcastDiv

目的:将每个元素除以其所在行的总和。

操作

  • 将每个元素除以其所在行的总和,使得每一行的元素之和为 1,从而形成概率分布。

内存访问

  • 读取:需要读取整个矩阵的所有元素(D 次),以及每一行的总和(num_rows 次),总共是 D + num_rows 次读取。
  • 写入:需要将结果写回到矩阵中,总共是 D 次写入。

总内存访问2 * D + num_rows

Softmax 过程总结

这五个步骤构成了 softmax 函数的计算过程,具体如下:

  1. ReduceMax:找到每一行的最大值以进行数值稳定性处理。
  2. BroadcastSub:将每个元素减去所在行的最大值。
  3. Exp:对每个元素计算指数函数。
  4. ReduceSum:计算每一行的元素和。
  5. BroadcastDiv:将每个元素除以所在行的和,形成概率分布。

每个步骤的内存访问模式和计算方式都是为了确保整个 softmax 计算过程的数值稳定性和准确性,同时在尽量减少全局内存访问次数以优化性能。

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

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

相关文章

相见恨晚的《新程序员》 AI 专辑

声明:本文并不什么“软文”,是我的真实感受分享。本人和《新程序员》无任何利益关系,读者购买专栏我不会获得任何分成。 一、前言 前不久有位朋友送我一本 CSDN 出品的 《新程序员 006:人工智能新十年》 的杂志。 说实话&#x…

昇思25天学习打卡营第12天|FCN图像语义分割

文章目录 昇思MindSpore应用实践基于MindSpore的FCN图像语义分割1、FCN 图像分割简介2、构建 FCN 模型3、数据预处理4、模型训练自定义评价指标 Metrics 5、模型推理结果 Reference 昇思MindSpore应用实践 本系列文章主要用于记录昇思25天学习打卡营的学习心得。 基于MindSpo…

谷粒商城学习笔记-16-人人开源搭建后台管理系统

文章目录 一,克隆前/后端代码1,克隆前端工程renren-fast-value2,克隆后端工程renren-fast 二,集成后台管理系统的后端代码三,启动后台管理系统四,前端系统的安装和运行1,下载安装VSCode2&#x…

【TB作品】51单片机 Proteus仿真 超声波LCD1602ADC0832 身高体重测量仪

00024 超声波LCD1602ADC0832 实验报告:基于51单片机的身高体重测量仪设计 背景介绍 本实验设计并实现了一个基于51单片机的身高体重测量仪。该系统利用超声波传感器测量高度,通过ADC0832模数转换芯片获取重量数据,并使用LCD1602显示屏显示…

26_嵌入式系统网络接口

以太网接口基本原理 IEEE802标准 局域网标准协议工作在物理层和数据链路层,其将数据链路层又划分为两层,从下到上分别为介质访问控制子层(不同的MAC子层,与具体接入的传输介质相关),逻辑链路控制子层(统一的LLC子层,为上层提供统…

【JavaSE复习】数据结构、集合

JavaSE 复习 1.数据结构1.1 查找1.1.1 基本查找1.1.2 二分查找1.1.3 插值查找1.1.4 斐波那契查找1.1.5 分块查找1.1.6 分块查找的扩展(无规律数据) 1.2 排序1.2.1 冒泡排序1.2.2 选择排序1.2.3 插入排序1.2.4 快速排序 2. 集合2.1 基础集合2.1.1 集合和数…

MATLAB制作一个简单的函数绘制APP

制作一个函数绘制APP,输入函数以及左右端点,绘制出函数图像。 编写回调函数: 结果:

D1.排序

1.快速排序 双指针 采用分治的思想,基于一个数作为标准,进行分治 步骤: 确定分界点的值。x q[l]、q[(lr)/2]、q[r]、随机 都可以;划分区间:使得小于等于x的数放在数组的左边;大于等于x的数放在数组的右边…

【C语言】 —— 编译和链接

【C语言】 —— 编译和链接 一、编译环境和运行环境二、翻译环境2.1、 预处理2.2、 编译(1)词法分析(2)语法分析(3)语义分析 2.3、 汇编2.4、链接 三、运行环境 一、编译环境和运行环境 平时我们说写 C语言…

【电机控制】EG2134无刷电机驱动、控制一体板——开环、无感SMO验证

【电机控制】EG2134无刷电机驱动、控制一体板——开环、无感SMO验证 文章目录 前言一、硬件二、软件三、开环SVPWM四、SMO无感观测器闭环控制五、参考文献总结 前言 【电机控制】直流有刷电机、无刷电机汇总——持续更新 【电机控制】EG2134无感FOC驱控一体板-滑模观测器 使用…

详解Linux的shell脚本基础指令

一、shell简介 是Linux系统的用户界面,它提供用户与内核的一种交互方式。它接收用户输入的命令,并把它送入内核去执行,是一个命令解释器。 脚本:本质是一个文件,文件里面存放的是 特定格式的指令,系统可以…

数学系C++(六七)

目录 * &指针与地址 void指针 指针可以等于: const 指向常量的指针 const int *px 常指针 int * const px 指向常量的常指针const 类型标识符 * const 指针名 指针加减: 指针恒等式 函数指针【待续】 指针型函数: 指向函数的…

【mindspore进阶】02-ResNet50迁移学习

Mindspore 应用(2)ResNet50迁移学习 在实际应用场景中,由于训练数据集不足,所以很少有人会从头开始训练整个网络。普遍的做法是,在一个非常大的基础数据集上训练得到一个预训练模型,然后使用该模型来初始化…

关于Python的电影信息爬取与数据可视化分析报告

目录 1 引言 1.1 研究背景 1.2 研究目的 1.3 研究意义 2 相关技术介绍 2.1 Python语言及其应用领域 2.2 网络爬虫技术 2.3 数据可视化技术 2.4 PyCharm 2.5 Jupyter Notebook 3 数据爬取 4 数据预处理 5 数据分析及可视化 5.1数据分析背景 5.2从电影评分角度分析…

嵌入式开发SPI基本介绍与应用

目录 #SPI通信协议 #SPI基础概念 #SPI通信模式 #SPI通信时序类型 前言:本篇笔记参考嘉立创的开发文档,连接放在最后。 #SPI通信协议 #SPI基础概念 Serial Peripheral Interface 缩写SPI 翻译:串行外设接口 同步串行通信协议&…

运维系列.Nginx配置中的高级指令和流程控制

运维专题 Nginx配置中的高级指令和流程控制 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/…

镭速实现大文件传输软件预览功能

在当前的数字时代,大文件传输软件成为了提高工作效率和文件管理便捷性的关键工具。镭速作为其中的一员,以其独特的功能和优势,为用户提供了多样化的文件预览和传输解决方案。 目前镭速支持对文档格式文件,一般图片格式及视频格式…

非比较排序 计数排序

1.核心思路 首先要找出max 和 min,最大值 - 最小值 1,就可以计算出数据在什么范围然后创建计数数组大小,a[i] - min 在数组的相对位置计数 通过自然序列排序然后把计数好的值,按照顺序依次放回原数组即可 动图解释,其…

Nettyの源码分析

本篇为Netty系列的最后一篇,按照惯例会简单介绍一些Netty相关核心源码。 1、Netty启动源码分析 代码就使用最初的Netty服务器案例,在bind这一行打上断点,观察启动的全过程: 由于某些方法的调用链过深,节约篇幅&#xf…

Nuxt框架中内置组件详解及使用指南(二)

title: Nuxt框架中内置组件详解及使用指南(二) date: 2024/7/7 updated: 2024/7/7 author: cmdragon excerpt: 摘要:“本文详细介绍了Nuxt 3中和组件的使用方法,包括组件的基本概念、属性、自定义属性、获取引用以及完整示例&a…