【机器学习】 Sigmoid函数:机器学习中的关键激活函数


🌈个人主页: 鑫宝Code
🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础
💫个人格言: "如无必要,勿增实体"
文章目录
- Sigmoid函数:机器学习中的关键激活函数
- 1. 引言
- 2. Sigmoid函数定义
- 3. Sigmoid函数的图像特性
- 4. Sigmoid函数的导数
- 5. Sigmoid函数在机器学习中的应用
- 5.1 二元分类
- 5.2 神经网络激活函数
- 5.3 门控循环单元(GRU)
- 6. Sigmoid函数的优点
- 7. Sigmoid函数的缺点
- 8. Sigmoid函数的替代品
- 9. 结论
Sigmoid函数:机器学习中的关键激活函数
1. 引言
在机器学习和深度学习领域,激活函数扮演着至关重要的角色。它们为神经网络引入非线性,使得网络能够学习复杂的模式。Sigmoid函数是最早被广泛使用的激活函数之一,至今仍在许多应用中发挥重要作用。本文将深入探讨Sigmoid函数的定义、特性、应用以及优缺点。
2. Sigmoid函数定义
Sigmoid函数,也称为逻辑函数(Logistic Function),是一种常见的S型函数。其数学表达式为:
S ( x ) = 1 1 + e − x S(x) = \frac{1}{1 + e^{-x}} S(x)=1+e−x1
其中,e是自然对数的底数,约等于2.71828。
3. Sigmoid函数的图像特性
Sigmoid函数具有以下几个重要的图像特性:
- 函数值域在(0, 1)之间
- 在原点(0, 0.5)处对称
- 在x趋近于正无穷时,y趋近于1;在x趋近于负无穷时,y趋近于0
- 函数曲线呈S型,在中间部分近似线性,两端逐渐平缓
4. Sigmoid函数的导数
Sigmoid函数的导数有一个非常优雅的形式,这也是它在早期神经网络中广泛使用的原因之一。Sigmoid函数的导数可以用函数本身表示:
S ′ ( x ) = S ( x ) ( 1 − S ( x ) ) S'(x) = S(x)(1 - S(x)) S′(x)=S(x)(1−S(x))
证明如下:
S ′ ( x ) = d d x ( 1 1 + e − x ) = e − x ( 1 + e − x ) 2 = 1 1 + e − x ⋅ e − x 1 + e − x = 1 1 + e − x ⋅ ( 1 − 1 1 + e − x ) = S ( x ) ( 1 − S ( x ) ) \begin{align*} S'(x) &= \frac{d}{dx}\left(\frac{1}{1 + e^{-x}}\right) \\ &= \frac{e^{-x}}{(1 + e^{-x})^2} \\ &= \frac{1}{1 + e^{-x}} \cdot \frac{e^{-x}}{1 + e^{-x}} \\ &= \frac{1}{1 + e^{-x}} \cdot (1 - \frac{1}{1 + e^{-x}}) \\ &= S(x)(1 - S(x)) \end{align*} S′(x)=dxd(1+e−x1)=(1+e−x)2e−x=1+e−x1⋅1+e−xe−x=1+e−x1⋅(1−1+e−x1)=S(x)(1−S(x))
这个简洁的导数形式使得在神经网络的反向传播过程中计算梯度变得非常方便。
5. Sigmoid函数在机器学习中的应用
5.1 二元分类
Sigmoid函数最常见的应用之一是在逻辑回归中用于二元分类。由于Sigmoid函数的输出范围在0到1之间,我们可以将其解释为某一类别的概率。通常,我们设置一个阈值(如0.5),当输出大于阈值时归为一类,小于阈值时归为另一类。
在逻辑回归中,模型可以表示为:
P ( y = 1 ∣ x ) = 1 1 + e − ( β 0 + β 1 x 1 + β 2 x 2 + . . . + β n x n ) P(y=1|x) = \frac{1}{1 + e^{-(\beta_0 + \beta_1x_1 + \beta_2x_2 + ... + \beta_nx_n)}} P(y=1∣x)=1+e−(β0+β1x1+β2x2+...+βnxn)1
其中,x是输入特征,β是模型参数。
5.2 神经网络激活函数
在传统的前馈神经网络中,Sigmoid函数常被用作隐藏层和输出层的激活函数。它将神经元的输出压缩到(0, 1)范围内,这种特性使得Sigmoid函数在早期神经网络中非常流行。
对于一个神经元,其输出可以表示为:
y = S ( w x + b ) = 1 1 + e − ( w x + b ) y = S(wx + b) = \frac{1}{1 + e^{-(wx + b)}} y=S(wx+b)=1+e−(wx+b)1
其中,w是权重,x是输入,b是偏置。
5.3 门控循环单元(GRU)
在更复杂的神经网络结构中,如门控循环单元(GRU),Sigmoid函数也扮演着重要角色。GRU使用Sigmoid函数来控制信息的流动,具体来说,在更新门和重置门中使用Sigmoid函数。
GRU的更新门和重置门的计算如下:
z t = σ ( W z ⋅ [ h t − 1 , x t ] ) z_t = \sigma(W_z \cdot [h_{t-1}, x_t]) zt=σ(Wz⋅[ht−1,xt])
r t = σ ( W r ⋅ [ h t − 1 , x t ] ) r_t = \sigma(W_r \cdot [h_{t-1}, x_t]) rt=σ(Wr⋅[ht−1,xt])
其中,σ表示Sigmoid函数,z_t是更新门,r_t是重置门。
6. Sigmoid函数的优点
-
输出范围有界:Sigmoid函数的输出始终在0和1之间,这使得它在某些应用中非常有用,例如在需要将输出解释为概率的情况下。
-
平滑和连续:Sigmoid函数是平滑和连续的,这意味着它在整个定义域内都是可微的。这对于基于梯度的优化算法非常重要。
-
非线性:Sigmoid函数引入了非线性,使得神经网络能够学习复杂的非线性关系。
-
导数简单:Sigmoid函数的导数形式简单,可以用函数本身表示,这在计算梯度时非常方便。
7. Sigmoid函数的缺点
尽管Sigmoid函数有许多优点,但它也存在一些限制:
-
梯度消失问题:当输入值很大或很小时,Sigmoid函数的梯度接近于0,这可能导致深层网络中的梯度消失问题。
-
输出不是零中心的:Sigmoid函数的输出范围是(0, 1),这意味着输出总是正的。这可能导致后续层的梯度更新出现zigzag现象。
-
计算复杂度:Sigmoid函数涉及指数运算,计算复杂度相对较高。
-
软饱和性:在输入的绝对值较大时,函数的变化率接近于0,这可能导致学习过程变慢。
8. Sigmoid函数的替代品
由于Sigmoid函数存在一些限制,研究人员提出了一些替代函数:
-
ReLU(Rectified Linear Unit):
f ( x ) = m a x ( 0 , x ) f(x) = max(0, x) f(x)=max(0,x)
ReLU解决了梯度消失问题,并且计算简单,现在已经成为许多深度学习模型的默认选择。 -
Tanh函数:
f ( x ) = e x − e − x e x + e − x f(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} f(x)=ex+e−xex−e−x
Tanh函数的输出范围是(-1, 1),是零中心的,但仍然存在梯度消失问题。
- Leaky ReLU:
f ( x ) = { x , if x > 0 α x , otherwise f(x) = \begin{cases} x, & \text{if } x > 0 \\ \alpha x, & \text{otherwise} \end{cases} f(x)={x,αx,if x>0otherwise
其中α是一个小的正常数,通常为0.01。Leaky ReLU解决了ReLU在负值区间梯度为0的问题。
9. 结论
Sigmoid函数在机器学习和深度学习的发展历程中扮演了重要角色。尽管在深度神经网络中已经不再是首选的激活函数,但在某些特定应用中,如二元分类和某些循环神经网络结构中,Sigmoid函数仍然是一个有力的工具。
理解Sigmoid函数的特性、优点和局限性,对于选择合适的激活函数和设计有效的神经网络架构至关重要。作为机器学习从业者,我们应该熟悉各种激活函数,并根据具体问题选择最合适的函数。
在未来,随着神经网络架构和训练技术的不断发展,我们可能会看到更多新型激活函数的出现。然而,Sigmoid函数作为机器学习中的基础概念,其重要性将永远不会被低估。

相关文章:

【机器学习】 Sigmoid函数:机器学习中的关键激活函数
🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 💫个人格言: "如无必要,勿增实体" 文章目录 Sigmoid函数:机器学习中的关键激活函数1. 引言2. Sigmoid函数定义3.…...

Vue+Element Plus后台管理主界面搭建实现
续接Django REST Framework,使用Vite构建Vue3的前端项目 1. 后台管理系统主界面框架搭建 后台系统主界面搭建 新建后台管理文件目录 完成后台整体布局 // 1.主界面 index.vue<script setup lang"ts"></script><template><el-…...

JAVA—异常
认识异常,学会从报错信息中发现问题,解决问题。并学会构建自定义异常,提醒编程时注意 目录 1.认识异常 2.自定义异常 1.自定义运行时异常 2.自定义编译时异常 3.异常的处理 1.认识异常 异常就是代表程序出现的问题,用来查询B…...

常见八股面试题:Dubbo 和 Spring Cloud Gateway 有什么区别?
大家好,我是鸭鸭! 此答案节选自鸭鸭最近弄的面试刷题神器面试鸭,更多大厂常问面试题,可以点击进行阅读哈! 目前这个面试刷题神器刚出,有网页和小程序双端可以阅读! 回归面试题! …...

k8s分布式存储-ceph
文章目录 Cephdeploy-ceph部署1.系统环境初始化1.1 修改主机名,DNS解析1.2 时间同步1.3 配置apt基础源与ceph源1.4关闭selinux与防火墙1.5 **创建** ceph **集群部署用户** cephadmin1.6分发密钥 2. ceph部署2.1 **安装** ceph 部署工具2.2 **初始化** mon **节点**…...
Redis cluster集群部署
redis搭建集群模式、Cluster模式(6节点,3主3从集群模式,添加删除节点)_redis cluster节点带数据增减-CSDN博客...

Java泛型的理解
前言 泛型是Java中一个比较重要的特性,是于JDK5引入新特性,其主要目的是为了提供编译时的类型安全检测机制和简化代码。本文主要探讨一下泛型的使用。 假如说没有泛型 假如说没有泛型,可以举一个例子: ArrayList list new Ar…...

Linux 照片图像编辑器
前言 照片图像编辑器是一种软件程序,它允许用户对数字照片或图像进行各种编辑和修改。以下是一些常见的功能及其解释: 裁剪与旋转 : 裁剪:移除图像的某些部分,以改善构图或符合特定尺寸要求。旋转:改变图像的方向,可以校正歪斜的照片或者为了艺术效果而旋转。调整亮度…...

【51单片机仿真】基于51单片机设计的智能六位密码锁(匿*输入/密码修改/警示/保存/恢复/初始密码)源码仿真设计文档演示视频——文末资料下载
基于51单片机设计的智能六位密码锁 演示视频 基于51单片机设计的智能六位密码锁 功能简介 - 能够从键盘中输入密码,并相应地在显示器上显示"*" - 能够判断密码是否正确,正确则开锁,错误则输出相应信息 - 能够实现密码的修改 -…...

【Vue3】组件通信之mitt
【Vue3】组件通信之mitt 背景简介开发环境开发步骤及源码总结 背景 随着年龄的增长,很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来,技术出身的人总是很难放下一些执念,遂将这些知识整理成文,以纪念曾经努力学习奋斗的日…...
状态压缩动态规划——状压dp
状压dp:意思是将状态进行压缩,从而更容易地写出状态转移方程 通常做法:将每个状态(一个集合)用二进制表示,每个位的1就代表着这个编号的元素存在,0就代表着这个编号的元素不存在,如…...

【算法】最短路径算法思路小结
一、基础:二叉树的遍历->图的遍历 提到搜索算法,就不得不说两个最基础的思想: BFS(Breadth First Search)广度优先搜索 DFS(Depth First Search)深度优先搜索 刚开始是在二叉树遍历中接触这…...

zabbix7.0TLS-05-快速入门-触发器
文章目录 1 概述2 查看主机的触发器3 添加触发器3.1 触发器配置项介绍3.2 扩展文档3.2.1 关于配置项中每个键值返回值的说明3.2.2 触发器函数文档 4 验证触发器5 问题5.1 查了问题总列表5.2 查看问题详情5.3 更新处理问题5.4 查看已经处理的问题 6 问题恢复 1 概述 监控项用于…...
vue关于双向数据绑定的骚操作
组件传值大家都知道 直接上代码 computed: {optionModel: {get() {return this.selectedWidget.options;},set(newValue) {this.selectedWidget.options newValue;}}} 我们将optionModel传递给子组件 子组件可以直接修改props 来实现双向数据绑定 但是正常来时我们是不能修…...

基于Jeecgboot3.6.3的vue3版本的流程中仿钉钉流程的鼠标拖动功能支持
因为这个项目license问题无法开源,更多技术支持与服务请加入我的知识星球。 1、因为原先仿钉钉流程里不能进行鼠标拖动来查看流程,所以根据作者提供的信息进行修改,在hooks下增加下面文件useDraggableScroll.ts import { ref, onMounted, on…...

Docker Compse单机编排
一.Docker Compse 介绍 Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,你可以使用 YAML 文件来配置应用程序的服务、网络和卷,然后使用单个命令创建和启动所有服务。这使得在开发、测试和部署过程中管理多容器应用程…...

“AI+Security”系列第2期(一):对抗!大模型自身安全的攻防博弈
近日,由安全极客、Wisemodel 社区和 InForSec 网络安全研究国际学术论坛联合主办的“AISecurity”系列第 2 期——对抗!大模型自身安全的攻防博弈线上活动如期举行。本次活动邀请了君同未来创始人兼 CEO 韩蒙、前阿里云高级安全专家郑瀚、ChaMd5 AI 组负…...

Python Static Typing: 提升代码可靠性与可读性的使用技巧
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storm…...

Datawhale多模态赛事(1)
赛事说明:https://tianchi.aliyun.com/competition/entrance/532251/introduction?spma2c22.12281925.0.0.2f307137p8qZmp 学习平台:https://linklearner.com/home 第一天 1.报名赛道学习赛事 https://tianchi.aliyun.com/competition/entrance/53225…...

云手机在海外社交媒体运营中的作用
随着社交媒体的全球普及,海外社交媒体运营成为众多企业与个人提升品牌影响力和扩大市场份额的重要策略。在这一进程中,海外云手机以其独特的功能,为海外社交媒体运营提供了强大的支持。 那么,海外云手机在海外社交媒体运营中究竟扮…...

XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...

vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...
适应性Java用于现代 API:REST、GraphQL 和事件驱动
在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...
JS红宝书笔记 - 3.3 变量
要定义变量,可以使用var操作符,后跟变量名 ES实现变量初始化,因此可以同时定义变量并设置它的值 使用var操作符定义的变量会成为包含它的函数的局部变量。 在函数内定义变量时省略var操作符,可以创建一个全局变量 如果需要定义…...