机器学习中,常常见到两个函数名称: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()


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

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

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()


从图中可以看出,\(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函数扩展到多变量之后而得到的。

机器学习中的两个重要函数--sigmoid和softmax的更多相关文章

  1. 【PyTorch教程】P3. Python学习中的两大法宝函数(当然也可以用在PyTorch)

    温馨提示:为了更好的教程体验,提供视频.阅读地址 Youtube: https://www.youtube.com/playlist?list=PLgAyVnrNJ96CqYdjZ8v9YjQvCBc ...

  2. 如何在Python中让两个print()函数的输出打印在一行内?

    1.两个连续的print()函数为什么在输出时内容会分行显示? 解:print()中有两个默认参数sep和end,其中sep是代替分隔符,end是代替末尾的换行符,默认使用‘,’代替空格,且默认末尾加 ...

  3. javascript中的两个定时函数setTimeOut()和setInterVal()的区别

    js中经常性要用到间隔几秒或暂停几秒执行某个函数, 简单介绍我从网上收集到setTimeOut()和setInterVal()的区别1.setInterVal()介绍 1)定义 setInterval ...

  4. MySQL中的两个时间函数,用来做两个时间之间的对比

    TIMESTAMPDIFF,(如果当期时间和之前时间的分钟数相比较.大于1天,即等于1:小于1天,则等于0) select TIMESTAMPDIFF(DAY,'2016-11-16 10:13:42 ...

  5. mysql中计算两个日期的时间差函数TIMESTAMPDIFF用法

    mysql中计算两个日期的时间差函数TIMESTAMPDIFF用法: 语法: TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2) 说明: 返回日 ...

  6. Delphi中的操作二进制文件的两个重要函数

    Delphi中的操作二进制文件的两个重要函数 对于通过Byte数组进行文件操作的,在FTP中经常会使用到,我也是在Delphi调用Web Service进行文件的上传和下载时找到这两个函数的,挺好用的 ...

  7. js中ajax连接服务器open函数的另外两个默认参数get请求和默认异步(open的post方式send函数带参数)(post请求和get请求区别:get:快、简单 post:安全,量大,不缓存)(服务器同步和异步区别:同步:等待服务器响应当中浏览器不能做别的事情)(ajax和jquery一起用的)

    js中ajax连接服务器open函数的另外两个默认参数get请求和默认异步(open的post方式send函数带参数)(post请求和get请求区别:get:快.简单 post:安全,量大,不缓存)( ...

  8. 机器学习中的 7 大损失函数实战总结(附Python演练)

    介绍 想象一下-你已经在给定的数据集上训练了机器学习模型,并准备好将它交付给客户.但是,你如何确定该模型能够提供最佳结果?是否有指标或技术可以帮助你快速评估数据集上的模型? 当然是有的,简而言之,机器 ...

  9. 机器学习中的相似性度量(Similarity Measurement)

    机器学习中的相似性度量(Similarity Measurement) 在做分类时常常需要估算不同样本之间的相似性度量(Similarity Measurement),这时通常采用的方法就是计算样本间 ...

  10. paper 127:机器学习中的范数规则化之(二)核范数与规则项参数选择

    机器学习中的范数规则化之(二)核范数与规则项参数选择 zouxy09@qq.com http://blog.csdn.net/zouxy09 上一篇博文,我们聊到了L0,L1和L2范数,这篇我们絮叨絮 ...

随机推荐

  1. 机器学习(一)——递归特征消除法实现SVM(matlab)

    机器学习方法对多维特征数据进行分类:本文用到非常经典的机器学习方法,使用递归特征消除进行特征选择,使用支持向量机构建分类模型,使用留一交叉验证的方法来评判模型的性能. 构建模型:支持向量机(Suppo ...

  2. TensorFLow手写字识别深度学习网络分析详解

    Tensorflow和MNIST简介 TensorFlow 是一个采用数据流图,用于数值计算的开源软件库.它是一个不严格的"神经网络"库,可以利用它提供的模块搭建大多数类型的神经网 ...

  3. Swin Transformer:最佳论文,准确率和性能双佳的视觉Transformer | ICCV 2021

    论文提出了经典的Vision Transormer模型Swin Transformer,能够构建层级特征提高任务准确率,而且其计算复杂度经过各种加速设计,能够与输入图片大小成线性关系.从实验结果来看, ...

  4. 3.8折钜惠,瑞芯微RK3568J国产工业评估板“限时折扣”!

  5. Ubuntu 查看用户历史记录

    Ubuntu 查看用户历史记录 1. 查看用户命令行历史记录 1. 查看当前登录账号所属用户的历史命令行记录 打开命令行,输入 history 就会看到当前登录账号所属用户的历史记录 2. 查看系统所 ...

  6. Mac Eclipse 常用快捷键汇总

    寻找类:shift+command+t 删除当前行:command+d 上移当前行代码:option+↑ 下移当前行代码:option+↓ 复制当前行至下一行:option+command+↓ 复制当 ...

  7. Linux常用指令及shell脚本记录

    记录一些常用指令在博客上,以防哪天因太久不敲而忘却,还可以直接翻看博客记录,不用再一条条百度搜...... 一.Linux常用指令 一.设置文件权限为aapp用户及用户组-- chown -R app ...

  8. 物联网浏览器(IoTBrowser)-基于计算机视觉开发的应用“智慧眼AIEye”

    一.起因 最近毕业在家:),准备筹划社区运营和IoTBrowser升级的事务,遇到了一系列物业管理上的问题,本来出于好心提醒物业人员,结果反被误认为是打广告推销的,当时被激怒一下,后面一想也许这也是一 ...

  9. Java-泛型,枚举,注解

    1 泛型类 package demo; public class FanXingLei { public static void main(String[] args) { // TODO 自动生成的 ...

  10. Git 奇幻之旅⌛️

    第一天: 本地仓库 故事的主角是小明,一个刚入门编程的小白.他正在为一个项目写代码,但是他发现每次修改代码都很麻烦,因为他要不断地备份文件,而且很容易弄混版本.有一天,他听说了一个叫 Git 的神奇工 ...