游戏AI的创造思路-技术基础-sigmoid函数详解

在前面的机器学习和深度学习的内容中,大量出现了sigmoid函数,所以本篇为大家介绍下sigmoid函数,希望对大家理解前面的算法和后面的Transformer有所帮助

目录

[3.8. sigmoid函数](#3.8. sigmoid函数)

[3.8.1. 定义](#3.8.1. 定义)

[3.8.2. 性质](#3.8.2. 性质)

[3.8.3. 应用](#3.8.3. 应用)

[3.8.4. 缺点](#3.8.4. 缺点)

[3.8.5. sigmoid函数的导数](#3.8.5. sigmoid函数的导数)

[3.8.5.1. 导数的定义](#3.8.5.1. 导数的定义)

[3.8.5.2. 导数的性质](#3.8.5.2. 导数的性质)

[3.8.5.3. 导数的应用](#3.8.5.3. 导数的应用)

[3.8.5.4. 注意事项](#3.8.5.4. 注意事项)

[3.8.6. Python代码实现](#3.8.6. Python代码实现)


3.8. sigmoid函数

3.8.1. 定义

sigmoid函数是一种常见的数学函数,其形状为"S"形曲线。

在机器学习和深度学习中,特别是在处理二分类问题时,sigmoid函数被广泛用作激活函数。

sigmoid函数的数学公式为:

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

3.8.2. 性质

  • 值域:sigmoid函数的值域为(0, 1),这意味着无论输入( x )是什么,输出总是在0和1之间。这个性质使得sigmoid函数非常适合用于表示概率或者将任意实数映射到(0, 1)区间内。
  • 单调性:sigmoid函数在其定义域内是单调递增的。
  • 可导性:sigmoid函数在其定义域内是可导的,这个性质在神经网络中非常重要,因为它允许我们使用梯度下降等优化算法来训练网络。其导数为:
  • 形状 :sigmoid函数的形状类似于"S",在附近变化较快,而在远离0的地方变化较慢。这种特性使得sigmoid函数在处理一些需要非线性变换的问题时非常有用。

3.8.3. 应用

  1. 二分类问题:在机器学习中,sigmoid函数常用于二分类问题的输出层,将网络的输出转换为概率值。例如,在逻辑回归中,sigmoid函数用于将线性回归的输出转换为预测为正类的概率。
  2. 神经网络激活函数:虽然近年来ReLU(Rectified Linear Unit)等激活函数在深度学习中更为流行,但sigmoid函数仍然在某些情况下被用作神经网络的激活函数,特别是在需要输出概率或进行二分类的任务中。

3.8.4. 缺点

尽管sigmoid函数有其优点,但在深度学习中作为激活函数时也存在一些缺点:

  1. 梯度消失问题:当输入值远离0时,sigmoid函数的导数接近于0。在深层神经网络中,这可能导致梯度在反向传播过程中迅速减小,使得网络难以训练。
  2. 计算成本:sigmoid函数涉及指数运算,这在计算上可能相对昂贵,尤其是在大规模数据集和深层网络上。
  3. 非零中心化:sigmoid函数的输出总是大于0,这意味着在神经网络中,后续层的输入总是正的。这可能导致权重更新的不稳定性。

3.8.5. sigmoid函数的导数

sigmoid函数的导数表示了该函数的斜率,即函数值随输入变量变化的速率。以下是关于sigmoid函数导数的详细解释:

3.8.5.1. 导数的定义

sigmoid函数的导数定义为函数值与其补的乘积,具体公式为:

其中,是sigmoid函数的值。

这个公式表明,sigmoid函数的导数可以通过原函数的值来计算。

3.8.5.2. 导数的性质
  • 范围 :sigmoid函数的导数值在0到0.25之间。当输入值趋近于正无穷或负无穷时,导数值趋近于0;而当输入值接近0时,导数值接近其最大值0.25。
  • 与函数值的关系 :导数值与原函数值密切相关。
    • 当sigmoid函数的值接近1或0时,其导数值会变小,表明函数在这些区域的变化率较小。
    • 相反,当接近0.5(即接近0)时,导数值较大,说明函数在这一区域变化较快。
3.8.5.3. 导数的应用
  • 神经网络训练:在神经网络中,sigmoid函数的导数对于使用反向传播算法进行权重更新至关重要。通过计算导数,我们可以了解函数值随输入变化的敏感度,并据此调整网络参数。
  • 优化算法:在优化算法中,如梯度下降法,sigmoid函数的导数用于计算损失函数关于模型参数的梯度,从而指导参数更新的方向和步长。
3.8.5.4. 注意事项

虽然sigmoid函数的导数在神经网络训练中有其应用,但由于存在梯度消失的问题(即在函数值接近1或0时导数值很小),在深层网络中可能导致训练困难。

因此,在实际应用中需要权衡sigmoid函数的优缺点。

3.8.6. Python代码实现

python 复制代码
import numpy as np  
  
def sigmoid(x):  
    """  
    计算sigmoid函数值。  
      
    参数:  
    x -- 输入值,可以是标量、向量或矩阵  
      
    返回:  
    s -- sigmoid函数的值,与输入x的形状相同  
    """  
    s = 1 / (1 + np.exp(-x))  
    return s  
  
def sigmoid_derivative(x):  
    """  
    计算sigmoid函数的导数。  
      
    参数:  
    x -- 输入值,可以是标量、向量或矩阵  
      
    返回:  
    ds -- sigmoid函数的导数,与输入x的形状相同  
    """  
    s = sigmoid(x)  
    ds = s * (1 - s)  
    return ds  
  
# 示例用法  
x = np.array([1, 2, 3])  
print("Sigmoid Function Values:")  
print(sigmoid(x))  
  
print("Sigmoid Derivative Values:")  
print(sigmoid_derivative(x))

这段代码首先定义了两个函数:sigmoidsigmoid_derivativesigmoid函数计算给定输入x的sigmoid值,而sigmoid_derivative函数则计算sigmoid函数在给定输入x处的导数。

在示例用法部分,我们创建了一个NumPy数组x,其中包含三个元素,并分别调用了sigmoidsigmoid_derivative函数来计算这些值的sigmoid函数值和导数。

相关推荐
Power202466631 分钟前
NLP论文速读|LongReward:基于AI反馈来提升长上下文大语言模型
人工智能·深度学习·机器学习·自然语言处理·nlp
数据猎手小k34 分钟前
AIDOVECL数据集:包含超过15000张AI生成的车辆图像数据集,目的解决旨在解决眼水平分类和定位问题。
人工智能·分类·数据挖掘
好奇龙猫39 分钟前
【学习AI-相关路程-mnist手写数字分类-win-硬件:windows-自我学习AI-实验步骤-全连接神经网络(BPnetwork)-操作流程(3) 】
人工智能·算法
沉下心来学鲁班1 小时前
复现LLM:带你从零认识语言模型
人工智能·语言模型
数据猎手小k1 小时前
AndroidLab:一个系统化的Android代理框架,包含操作环境和可复现的基准测试,支持大型语言模型和多模态模型。
android·人工智能·机器学习·语言模型
YRr YRr1 小时前
深度学习:循环神经网络(RNN)详解
人工智能·rnn·深度学习
sp_fyf_20241 小时前
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-01
人工智能·深度学习·神经网络·算法·机器学习·语言模型·数据挖掘
多吃轻食1 小时前
大模型微调技术 --> 脉络
人工智能·深度学习·神经网络·自然语言处理·embedding
北京搜维尔科技有限公司2 小时前
搜维尔科技:【应用】Xsens在荷兰车辆管理局人体工程学评估中的应用
人工智能·安全
说私域2 小时前
基于开源 AI 智能名片 S2B2C 商城小程序的视频号交易小程序优化研究
人工智能·小程序·零售