游戏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函数值和导数。

相关推荐
江_小_白38 分钟前
自动驾驶之激光雷达
人工智能·机器学习·自动驾驶
yusaisai大鱼2 小时前
TensorFlow如何调用GPU?
人工智能·tensorflow
珠海新立电子科技有限公司4 小时前
FPC柔性线路板与智能生活的融合
人工智能·生活·制造
IT古董5 小时前
【机器学习】机器学习中用到的高等数学知识-8. 图论 (Graph Theory)
人工智能·机器学习·图论
曼城周杰伦5 小时前
自然语言处理:第六十三章 阿里Qwen2 & 2.5系列
人工智能·阿里云·语言模型·自然语言处理·chatgpt·nlp·gpt-3
余炜yw5 小时前
【LSTM实战】跨越千年,赋诗成文:用LSTM重现唐诗的韵律与情感
人工智能·rnn·深度学习
莫叫石榴姐6 小时前
数据科学与SQL:组距分组分析 | 区间分布问题
大数据·人工智能·sql·深度学习·算法·机器学习·数据挖掘
如若1236 小时前
利用 `OpenCV` 和 `Matplotlib` 库进行图像读取、颜色空间转换、掩膜创建、颜色替换
人工智能·opencv·matplotlib
YRr YRr6 小时前
深度学习:神经网络中的损失函数的使用
人工智能·深度学习·神经网络
ChaseDreamRunner7 小时前
迁移学习理论与应用
人工智能·机器学习·迁移学习