Softmax简介

简介: Softmax是一种数学函数,通常用于将一组任意实数转换为表示概率分布的实数。其本质上是一种归一化函数,可以将一组任意的实数值转化为在[0, 1]之间的概率值,因为softmax将它们转换为0到1之间的值,所以它们可以被解释为概率。如果其中一个输入很小或为负,softmax将其变为小概率,如果输入很大,则将其变为大概率,但它将始终保持在0到1之间。

Softmax是逻辑回归的一种推广,可以用于多分类任务,其公式与逻辑回归的sigmoid函数非常相似。只有当分类是互斥的,才可以在分类器中使用softmax函数,也就是说只能是多元分类(即数据只有一个标签),而不能是多标签分类(即一条数据可能有多个标签)。

许多多层神经网络输出层的最后一层是一个全连接层,输出是一个实数向量,这个向量通常代表了每个类别的得分或置信度。为了将这些得分转换为概率分布,通常会使用softmax函数。因为它将分数转换为规范化的概率分布,可以显示给用户或用作其他系统的输入。所以通常附加一个softmax函数在神经网络的最后一层之后。

Softmax函数的公式

softmax函数的输入是一个包含K个元素的向量,其中不带箭头的z表示向量的一个元素:

下面是一个例子:

其中分子的函数可视化如下:

Softmax的分子将指数函数应用于向量的每个元素,对于最高的输入值返回最高的输出值。因为它的范围是(0,∞),所以任何负数也变成正数。这可以从上面的图和下面的的区间中看出。

Softmax分母中的求和是通过确保函数的和为1来标准化每个元素,创建一个概率分布。所有的指数元素加在一起,所以当每个指数元素除以这个和时,它将是它的一个百分比。[5,7,10]的指数元素之和如下:

下面这个例子将使用一个3元素向量[5,7,10]来演示softmax。

i表示向量的每个元素单独传入,这样会创建一个包含K个元素的向量作为输出。由于K = 3,函数将被计算三次:

输出为[0.006,0.047,0.946],总和约为1。

我们可以使用框架中已经实现的softmax函数可以用来自动计算,例如PyTorch中:

 import torch
 
 # set the vector to a tensor
 z = torch.Tensor([5, 7, 10])
 
 # apply softmax
 softmax = torch.exp(z) / torch.sum(torch.exp(z))
 
 #tensor([0.0064, 0.0471, 0.9465])

对于矩阵来说,也是一样的,我们下面先手动计算矩阵的softmax

 softmax = torch.exp(x) / torch.sum(torch.exp(x), axis=1, keepdims=True)

得到了结果:

 tensor([[0.0900, 0.2447, 0.6652],
         [0.0900, 0.2447, 0.6652],
         [0.0900, 0.2447, 0.6652]])

每个向量加起来大约是1。但是这里有一个问题:输入向量不同但是结果是相同的。为什么会这样?

因为只要指数值之间的距离相同,结果就是是相同的,看看下面的计算:

为了验证我们的计算,可以使用框架内置的函数,比如torch的nn.Softmax

 import torch.nn as nn
 
 x = torch.Tensor([[1, 2, 3],
                   [4, 5, 6],
                   [7, 8, 9]])
 
 # sum each row
 softmax_layer = nn.Softmax(dim=1)
 
 output = softmax_layer(x)

结果是一样的

 tensor([[0.0900, 0.2447, 0.6652],
         [0.0900, 0.2447, 0.6652],
         [0.0900, 0.2447, 0.6652]])

说明我们的实现是没有问题的,但是还要说明一点,尽量使用框架提供的计算,因为这样会经过优化,速度会比我们手动实现快很多。

https://avoid.overfit.cn/post/2d318bac9289468db61c8510c4e3b613

作者:Hunter Phillips

目录
相关文章
|
存储 弹性计算 固态存储
阿里云服务器1TB存储收费标准(数据盘/对象存储OSS/文件存储NAS)
阿里云服务器1TB存储多少钱?系统盘最大可选到500GB,数据盘选到1TB价格为3655元一年。也可以选择对象存储OSS和文件存储NAS
7704 2
阿里云服务器1TB存储收费标准(数据盘/对象存储OSS/文件存储NAS)
|
存储 缓存 监控
安谋科技(Arm China)马闯:Arm架构下性能分析与优化介绍
2023年9月19日,系列课程第九节《Arm®架构下性能分析与优化介绍》正式上线,由安谋科技 (Arm China)主任工程师马闯主讲,内容涵盖:Arm架构下性能监控单元 (PMU) 介绍、Arm统计性能分析扩展 (SPE) 介绍、Arm性能分析工具介绍、Arm架构下性能优化案例分享,本期节目在阿里云官网、阿里云微信视频号、阿里云钉钉视频号、InfoQ官网、阿里云开发者微信视频号、阿里云创新中心直播平台 & 微信视频号同步播出,同时可以点击【https://developer.aliyun.com/topic/ecs-yitian】进入【倚天实例迁移课程官网】了解更多内容。
|
7月前
|
机器学习/深度学习 自然语言处理 并行计算
《探寻Transformer架构中位置编码的奥秘:解锁序列信息的隐藏密钥》
Transformer架构通过自注意力机制革新了自然语言处理,但其位置无关特性需依赖位置编码来感知序列顺序。位置编码方式包括正弦编码(简单高效)、可学习编码(灵活适配)和相对位置编码(捕捉语法语义)。不同任务与数据规模需权衡选择编码方式。未来,结合外部知识及新兴计算技术的位置编码有望进一步提升模型性能,推动自然语言处理技术发展。
174 6
|
9月前
|
负载均衡 IDE Java
SpringBoot整合XXL-JOB【04】- 以GLUE模式运行与执行器负载均衡策略
在本节中,我们将介绍XXL-JOB的GLUE模式和集群模式下的路由策略。GLUE模式允许直接在线上改造方法为定时任务,无需重新部署。通过一个测试方法,展示了如何在调度中心配置并使用GLUE模式执行定时任务。接着,我们探讨了多实例环境下的负载均衡策略,确保任务不会重复执行,并可通过修改路由策略(如轮训)实现任务在多个实例间的均衡分配。最后,总结了GLUE模式和负载均衡策略的应用,帮助读者更深入理解XXL-JOB的使用。
404 9
SpringBoot整合XXL-JOB【04】-  以GLUE模式运行与执行器负载均衡策略
|
12月前
|
机器学习/深度学习 人工智能
【AI大模型】深入Transformer架构:编码器部分的实现与解析(下)
【AI大模型】深入Transformer架构:编码器部分的实现与解析(下)
|
机器学习/深度学习 PyTorch 语音技术
【文献学习】Conformer: Convolution-augmented Transformer for Speech Recognition
文章介绍了Conformer模型,这是一种结合了Transformer的自注意力机制和CNN卷积模块的混合模型,旨在提高语音识别任务的性能,通过自注意力捕捉全局上下文信息,同时利用卷积模块有效捕获局部特征。
591 0
|
数据采集 自然语言处理 调度
一文详谈RAG优化方案与实践
RAG通过检索现有的大量知识,结合强大的生成模型,为复杂的问答、文本摘要和生成任务带来了全新的解决方案。本文详细的介绍了RAG遇到的挑战、通用范式、工程实践、优化实现策略等。
|
机器学习/深度学习 数据采集 数据挖掘
【机器学习】普通最小二乘法和ridge回归有什么区别?
【5月更文挑战第21天】【机器学习】R-squared系数有什么缺点?如何解决?【机器学习】普通最小二乘法和ridge回归有什么区别?
|
机器学习/深度学习 存储 自然语言处理
深度探索自适应学习率调整:从传统方法到深度学习优化器
【5月更文挑战第15天】 在深度学习的复杂网络结构与海量数据中,学习率作为模型训练的关键超参数,其调整策略直接影响着模型的收敛速度与最终性能。传统的学习率调整方法,如固定学习率、学习率衰减等,虽然简单易行,但在多样化的任务面前往往显得力不从心。近年来,随着自适应学习率技术的兴起,一系列创新的优化器如Adam、RMSProp和Adagrad等应运而生,它们通过引入自适应机制动态调整学习率,显著改善了模型的训练效率与泛化能力。本文将深入剖析传统学习率调整方法的原理与局限性,并详细介绍当前主流的自适应学习率优化器,最后探讨未来可能的发展方向。
|
算法 Java 索引
Java中String字符串截取几种方法(substring,split)
Java中String字符串截取几种方法(substring,split)
329 0