首页 > 其他分享 >机器学习中的两个重要函数--sigmoid和softmax

机器学习中的两个重要函数--sigmoid和softmax

时间:2024-08-06 18:06:16浏览次数:11  
标签:plt frac 函数 sigmoid -- softmax np

机器学习中,常常见到两个函数名称:sigmoidsoftmax
前者在神经网络中反复出现,也被称为神经元的激活函数;
后者则出现在很多分类算法中,尤其是多分类的场景,用来判断哪种分类结果的概率更大。

本文主要介绍这两个函数的定义,形态,在算法中的作用,以及两个函数之间的联系。

1. sigmoid函数

1.1. 函数定义

sigmoid函数一类函数的统称,常见的sigmoid函数有:\(y=\frac{1}{1+e^{-x}}\)
它有时也被称为S函数,是因为它的图像显示出来是S形的。

x = np.linspace(-10, 10, 100)
y = 1 / (1 + np.exp(-x))

plt.figure(figsize=(6, 4))
plt.plot(x, y)
plt.title("S-函数")
plt.grid(True)

plt.show()

image.png
从图形可以看出,S函数的输出会控制在一个有限的范围内(上面的函数是0~1之间),
真是这个特性使得它非常适合表示概率或者用于二分类问题的输出层。

注意,sigmoid函数的输出并不是一定要在区间(0,1)中,
比如还有个常用的S函数:\(tanh(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}}\),它的的输出区间是(-1,1)
image.png

1.2. 应用场景

sigmoid函数的主要使用场景有:

  1. 逻辑回归算法:sigmoid函数可用于将线性回归模型的输出转换为概率值,从而用于二分类问题。模型输出的概率值表示了样本属于某一类的可能性。
  2. 神经网络的激活函数:它帮助神经网络学习复杂的决策边界,通过非线性转换增加模型的表达能力。
  3. 门控机制:在LSTM(长短期记忆网络)等循环神经网络中,sigmoid函数(或其变体)被用作门控机制的一部分,以控制信息的流动。

sigmoid函数在机器学习和早期的深度学习中扮演着重要的角色,尤其是在处理二分类问题和作为神经网络中的激活函数时。
不过,随着深度学习的发展,其他激活函数因其更优越的性能而逐渐取代了sigmoid函数在某些场景下的地位。

2. softmax函数

2.1. 函数定义

接下来介绍softmax函数,softmax函数是一种在机器学习和深度学习中广泛使用的函数,特别是在处理多分类问题的场景中。
而上面介绍的sigmoid函数更多应用在二分类场景。

softmax函数的主要作用是将一个K维向量(通常表示每个类别的原始预测分数)转换成一个元素范围都在(0, 1)之间K维向量,并且所有元素的和为1
这段话有点抽象,举个例子来说,比如有一个3维向量:\((x_1,x_2,x_3) = (3,1,-2)\)
其中每个元素的值都不在区间(0, 1)中,所有元素的和也不是1

那么,softmax函数是如何转换的呢?
首先,求出各个元素的exp的和:\(m=e^{x_1}+e^{x_2}+e^{x_3}\)。
然后,将向量\(x\)转换为向量\(y\):\((y_1,y_2,y_3)= (\frac{e^{x_1}}{m},\frac{e^{x_2}}{m},\frac{e^{x_3}}{m})\approx(0.876,0.118,0.006)\)
转换之后的\(y\)向量每个元素的值都在区间(0, 1)中,并且所有元素的和为1

softmax函数也可以绘制图形。

from mpl_toolkits.mplot3d import Axes3D


def softmax(x0, x1, x2):
    m = np.exp(x0) + np.exp(x1) + np.exp(x2)
    return np.exp(x0) / m, np.exp(x1) / m, np.exp(x2) / m


count = 30
x0 = np.linspace(-10, 10, count)
x1 = np.linspace(-5, 5, count)

y = np.zeros((count, count, 3))
for i0 in range(count):
    for i1 in range(count):
        y[i1, i0, :] = softmax(x0[i0], x1[i1], 1)

xx0, xx1 = np.meshgrid(x0, x1)
plt.figure(figsize=(10, 4))

ax1 = plt.subplot(1, 2, 1, projection="3d")
ax1.plot_surface(xx0, xx1, y[:, :, 0], color="g")
ax1.set_xlabel("$x_0$", color="g")
ax1.set_ylabel("$x_1$", color="g")
ax1.set_zlabel("$y_0$", color="g")

ax2 = plt.subplot(1, 2, 2, projection="3d")
ax2.plot_surface(xx0, xx1, y[:, :, 1], color="r", cstride=1)
ax2.set_xlabel("$x_0$", color="r")
ax2.set_ylabel("$x_1$", color="r")
ax2.set_zlabel("$y_1$", color="r")
ax2.zaxis.labelpad=-1

plt.tight_layout()
plt.show()

image.png
从图中可以看出,\(y_0,y_1\)被映射到区间(0, 1)中。

2.2. 应用场景

softmax函数可以应用在:

  1. 多分类问题:它是处理多分类问题时的标准输出层激活函数。能够将模型的原始输出(通常是线性层的输出)转换为概率分布,便于后续使用交叉熵损失函数进行训练。
  2. 神经网络的输出层:在构建用于分类任务的神经网络时,常被用作输出层的激活函数。特别是在卷积神经网络(CNN)、循环神经网络(RNN)及其变体中用于生成最终的类别预测。
  3. 强化学习:在某些强化学习场景中,可用于将Q值(即动作的价值估计)转换为选择每个动作的概率,从而实现基于概率的动作选择策略。
  4. 自然语言处理:用来计算注意力权重,这些权重决定了模型在处理输入时应该给予哪些部分更多的关注。

softmax函数是机器学习和深度学习中处理多分类问题、生成概率分布和进行概率决策的重要工具。

3. 两者的联系

最后,再分析下这两个函数的关系。
根据前面的介绍,sigmoid函数适合二分类问题,softmax函数适合多分类问题。
那么,sigmoid函数会不会是softmax函数的一个简化版本呢?

假设一个只有两个变量的softmax函数,那么其中\(y_0=\frac{e^{x_0}}{e^{x_0}+e^{x_1}}\),
分子分母同时乘以\(e^{-x_0}\)可得:\(y_0=\frac{e^{x_0}e^{-x_0}}{e^{x_0}e^{-x_0}+e^{x_1}e^{-x_0}}=\frac{e^{x_0-x_0}}{e^{x_0-x_0}+e^{x_1-x_0}}= \frac{1}{1+e^{-(x_0-x_1)}}\)
假设\(y=y_0, x = x_0-x_1\),可得:\(y=\frac{1}{1+e^{-x}}\),
这就是一个典型的 sigmoid函数。

因此,我们可以认为softmax函数是将sigmoid函数扩展到多变量之后而得到的。

标签:plt,frac,函数,sigmoid,--,softmax,np
From: https://www.cnblogs.com/wang_yb/p/18345751

相关文章

  • java解一些算法题
    题目描述某部门计划通过结队编程来进行项目开发,已知该部门有N名员工,每个员工有独一无二的职级,每三个员工形成一个小组进行结队编程。结队分组规则如下:从部门中选出序号分别为i、j、k的3名员工,他们的职级分别为level[i],level[j],level[k]结队小组需满足level[i]<le......
  • NFS-Ganasha 高可用配置
    1.安装所需的软件源yumconfig-manager--set-enabledol9_addons2.安装所需的软件yuminstall-ypacemakercorosyncpcs3.编写corosync配置文件文件路径:/etc/corosync/corosync.conftotem{version:2cluster_name:myclustertransport:udpu}nod......
  • Mac开发基础23-NSMenu
    NSMenu是macOS应用中的一个重要控件,用于创建应用程序的菜单。这些菜单通常出现在屏幕顶部的菜单栏中,但也可以作为上下文菜单出现。NSMenu和NSMenuItem协同工作,NSMenu是菜单容器,而NSMenuItem是菜单项。本指南将详细介绍NSMenu的常见API和基础技巧。基本使用创建和初......
  • 抢先体验iOS 18开发者预览版Beta 5已发布怎么升级
    苹果今日向iPhone和iPad用户推送了iOS/iPadOS18开发者预览版Beta5更新(内部版本号:22A5326f),距离上次发布Beta/RC间隔7天。此次引入了更新设计的Photos应用程序以及全新的Safari选项等,并优化了很多细节。由于之前的相册大改版备受吐槽,苹果公司这次收集用户对Photos应用的反......
  • c语言11天笔记
    函数的概述函数:实现一定功能的,独立的代码模块。我们的函数一定是先定义,后使用。使用函数的优势:1.我们可以通过函数提供功能给别人使用。当然我们也可以使用别人提供的函数,减少代码量。2.借助函数可以减少重复性的代码。3.实现结构化(模块化)程序设计思想:结构化程序设......
  • Springboot计算机毕业设计电影推荐网站0unwo
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,电影分类,电影信息,通知公告,电影资讯开题报告内容一、研究背景与意义随着互联网技术的飞速发展,在线娱乐已成为人们日常生活中不可或缺的一部分。电影作为......
  • Springboot计算机毕业设计电商订单管理系统(程序+源码+数据库)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,商品分类,商家,商品信息开题报告内容摘要本文旨在设计并实现一个高效、易用的电商订单管理系统,以满足现代电商企业对订单处理、库存控制、物流跟踪及财务......
  • Springboot计算机毕业设计电脑商城购物系统(数据库、调试部署、开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,商品分类,商品品牌,商品信息开题报告内容1.选题背景及意义1.1选题背景随着计算机和网络的普及,电子商务已经成为现代社会不可或缺的一部分。特别是在21......
  • 第6章>>实验6:PS(ARM)端Linux RT与PL端FPGA之间(通过Reg寄存器进行通信和交互)-《LabVIEW Z
    1、实验内容       前面第五章入门实验和上一个实验5里面我们向大家展示通过了布尔类型的Reg寄存器通道实现了ZYNQPS端ARM和PL端FPGA二者之间的开关量交互,抛砖引玉。       从本节实验开始,接下来4个实验我们将着重向大家讲解更为通用和更为全面的4种交互方......
  • Spring Boot 中使用 JSON Schema 来校验复杂JSON数据
    JSON是我们编写API时候用于数据传递的常用格式,那么你是否知道JSONSchema呢?在数据交换领域,JSONSchema以其强大的标准化能力,为定义和规范JSON数据的结构与规则提供了有力支持。通过一系列精心设计的关键字,JSONSchema能够详尽地描述数据的各项属性。然而,仅凭JSONSchema......