当前位置: 首页 > news >正文

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


鑫宝Code

🌈个人主页: 鑫宝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+ex1

其中,e是自然对数的底数,约等于2.71828。

3. Sigmoid函数的图像特性

Sigmoid函数具有以下几个重要的图像特性:

  1. 函数值域在(0, 1)之间
  2. 在原点(0, 0.5)处对称
  3. 在x趋近于正无穷时,y趋近于1;在x趋近于负无穷时,y趋近于0
  4. 函数曲线呈S型,在中间部分近似线性,两端逐渐平缓

4. Sigmoid函数的导数

Sigmoid函数的导数有一个非常优雅的形式,这也是它在早期神经网络中广泛使用的原因之一。Sigmoid函数的导数可以用函数本身表示:

S ′ ( x ) = S ( x ) ( 1 − S ( x ) ) S'(x) = S(x)(1 - S(x)) S(x)=S(x)(1S(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+ex1)=(1+ex)2ex=1+ex11+exex=1+ex1(11+ex1)=S(x)(1S(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[ht1,xt])
r t = σ ( W r ⋅ [ h t − 1 , x t ] ) r_t = \sigma(W_r \cdot [h_{t-1}, x_t]) rt=σ(Wr[ht1,xt])

其中,σ表示Sigmoid函数,z_t是更新门,r_t是重置门。
在这里插入图片描述

6. Sigmoid函数的优点

  1. 输出范围有界:Sigmoid函数的输出始终在0和1之间,这使得它在某些应用中非常有用,例如在需要将输出解释为概率的情况下。

  2. 平滑和连续:Sigmoid函数是平滑和连续的,这意味着它在整个定义域内都是可微的。这对于基于梯度的优化算法非常重要。

  3. 非线性:Sigmoid函数引入了非线性,使得神经网络能够学习复杂的非线性关系。

  4. 导数简单:Sigmoid函数的导数形式简单,可以用函数本身表示,这在计算梯度时非常方便。

7. Sigmoid函数的缺点

尽管Sigmoid函数有许多优点,但它也存在一些限制:

  1. 梯度消失问题:当输入值很大或很小时,Sigmoid函数的梯度接近于0,这可能导致深层网络中的梯度消失问题。

  2. 输出不是零中心的:Sigmoid函数的输出范围是(0, 1),这意味着输出总是正的。这可能导致后续层的梯度更新出现zigzag现象。

  3. 计算复杂度:Sigmoid函数涉及指数运算,计算复杂度相对较高。

  4. 软饱和性:在输入的绝对值较大时,函数的变化率接近于0,这可能导致学习过程变慢。

8. Sigmoid函数的替代品

由于Sigmoid函数存在一些限制,研究人员提出了一些替代函数:

  1. ReLU(Rectified Linear Unit):
    f ( x ) = m a x ( 0 , x ) f(x) = max(0, x) f(x)=max(0,x)
    ReLU解决了梯度消失问题,并且计算简单,现在已经成为许多深度学习模型的默认选择。

  2. 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+exexex
Tanh函数的输出范围是(-1, 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函数作为机器学习中的基础概念,其重要性将永远不会被低估。

End

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • jmeter-beanshell学习16-自定义函数
  • 【ML】pre-train model 是什么如何微调它,如何预训练
  • pip笔记
  • POST_CRC
  • ceph分布式存储系统
  • 多头注意力用单元矩阵实现以及原因
  • SO_REUSEADDR 和 SO_REUSEPORT 的区别
  • WEB渗透-未授权访问篇
  • 图像处理案例03
  • 深度学习与图像修复:ADetailer插件在Stable Diffusion中的应用
  • 【JavaEE初阶】JUC(java.uitl.concurrent)的常见类
  • Java Server-Sent Event 服务端发送事件
  • [FSCTF 2023]细狗2.0
  • 力扣热题100_二叉树_94_二叉树的中序遍历
  • C语言中常用的函数
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 2017-08-04 前端日报
  • Android开源项目规范总结
  • ES6之路之模块详解
  • iOS 系统授权开发
  • IOS评论框不贴底(ios12新bug)
  • Nodejs和JavaWeb协助开发
  • PAT A1120
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • uva 10370 Above Average
  • Vue组件定义
  • 初识 beanstalkd
  • 从零开始学习部署
  • 从重复到重用
  • 通信类
  • 我感觉这是史上最牛的防sql注入方法类
  • 无服务器化是企业 IT 架构的未来吗?
  • 异步
  • 智能网联汽车信息安全
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • 【云吞铺子】性能抖动剖析(二)
  • UI设计初学者应该如何入门?
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • ​Benvista PhotoZoom Pro 9.0.4新功能介绍
  • ​用户画像从0到100的构建思路
  • ‌JavaScript 数据类型转换
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #define、const、typedef的差别
  • $.proxy和$.extend
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (C11) 泛型表达式
  • (ibm)Java 语言的 XPath API
  • (LLM) 很笨
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (四)Android布局类型(线性布局LinearLayout)
  • (一)WLAN定义和基本架构转