【激活函数--中】激活函数和阶跃函数的可视化及对比

一、Python中绘制阶跃函数的图形

在Python中实现阶跃函数的代码如下:

import numpy as np

def step_function(x):
    return np.array(x > 0, dtype=np.int)

这个函数接受一个NumPy数组x,并返回一个整数数组,其中大于0的元素被置为1,其余为0。

为了可视化阶跃函数,我们使用matplotlib库绘制其图形。首先,我们生成一个从-5.0到5.0的数组x,然后应用step_function函数计算对应的y值,并使用matplotlib.pyplot进行绘图:

import matplotlib.pylab as plt

x = np.arange(-5.0, 5.0, 0.1)  # 生成从-5到5的值,步长为0.1
y = step_function(x)            # 应用阶跃函数
plt.plot(x, y)                  # 绘制x和y
plt.ylim(-0.1, 1.1)             # 设置y轴的范围
plt.show()

绘制的结果如图所示,可以清晰地看到阶跃函数的特征:当输入小于或等于0时,输出为0;当输入大于0时,输出为1。这种从0到1的突变正是阶跃函数的核心特性,也是其名称的由来。

在这里插入图片描述

二、实现和可视化Sigmoid函数

2.1 Python实现

在Python中,可以通过使用NumPy库中的exp函数来实现Sigmoid函数,如下所示:

import numpy as np

def sigmoid(x):
    return 1 / (1 + np.exp(-x))

此实现利用了NumPy的广播功能,使得函数能够接受单个数值、列表或NumPy数组作为输入,并对每个元素执行Sigmoid运算。

Sigmoid函数的输出始终在0和1之间,这对于模拟概率非常有用。当输入接近正无穷时,输出趋近于1;当输入接近负无穷时,输出趋近于0;当输入为0时,输出为0.5。

2.2 可视化Sigmoid函数

为了更好地理解Sigmoid函数的行为,我们可以使用matplotlib库来绘制其图形。以下是绘制Sigmoid函数的Python代码:

import matplotlib.pyplot as plt
import numpy as np

# 定义Sigmoid函数
def sigmoid(x):
    return 1 / (1 + np.exp(-x))

# 生成数据
x = np.arange(-5.0, 5.0, 0.1)
y = sigmoid(x)

# 绘图
plt.plot(x, y)
plt.title("Sigmoid Function")
plt.ylim(-0.1, 1.1)  # 设置y轴范围
plt.show()

执行上述代码后,将得到如下图所示的Sigmoid函数图形:

在这里插入图片描述

Sigmoid函数由于其平滑的梯度和输出范围限制在(0,1)之间的特性,曾广泛用于神经网络的输出层,尤其是在二分类问题中。然而,由于它在输入值很大或很小时导致的梯度消失问题,现在在隐藏层中较少使用,被ReLU等函数所取代。但是,了解Sigmoid函数仍然对于理解神经网络的历史和基本理论非常重要。

三、比较Sigmoid函数与阶跃函数

Sigmoid函数和阶跃函数都作为神经网络中的激活函数,但它们各有不同的属性和对模型行为的影响。通过检查它们的图形表示并讨论它们的含义,我们来探讨它们之间的差异和相似之处。

3.1 Sigmoid函数与阶跃函数的差异

  1. 平滑性和连续性

    • Sigmoid函数:它是平滑且连续的,从0渐变到1。这种平滑性允许进行导数计算,这对于在训练神经网络时使用的反向传播算法至关重要。
    • 阶跃函数:在阈值(x=0)处从0跳跃到1。这种突然的变化意味着它在传统意义上缺乏导数,这可能会使基于梯度的学习方法复杂化。

    Sigmoid函数的平滑性对于基于梯度的优化方法特别重要,因为它在每个点上都提供了梯度,这有助于有效的网络训练。

  2. 输出范围

    • Sigmoid函数:输出值在0到1之间,这使得它非常适合用作概率表示。它可以返回介于0和1之间的任何值,如0.731、0.880等。
    • 阶跃函数:只能输出0或1,这限制了它的输出能表示的信息量。

3.2 Sigmoid函数与阶跃函数的共同点

尽管在平滑性上存在差异,从宏观视角看,Sigmoid函数和阶跃函数具有相似的形状。实际上,它们的结构都是“输入小时,输出接近0(或为0);随着输入增大,输出向1靠近(或变成1)”。这意味着:

  • 当输入信号是重要信息时,阶跃函数和Sigmoid函数都会输出较大的值。
  • 当输入信号不重要时,两者都输出较小的值。
  • 无论输入信号多小或多大,输出信号的值都限制在0到1之间。

在这里插入图片描述

阶跃函数和Sigmoid函数虽然处理信息的方式有所不同,但它们都是为了在神经网络中实现输入到输出的有效映射。Sigmoid函数因其平滑性和连续的输出范围而广泛用于早期的神经网络模型中,尤其是在需要概率输出的应用中。然而,由于梯度消失的问题,现代更多使用ReLU等其他激活函数来代替Sigmoid函数。阶跃函数因其简单和直观,常被用于理论演示和二元分类的最终决策阶段。


在这里插入图片描述

  • 28
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Matlab是一种强大的数值计算和科学编程软件,广泛应用于工程、科学和数学领域。它提供了丰富的工具和函数库,可以进行数据处理、可视化、模拟和建模等操作。 阶跃函数是一种常见的非线性函数,它在某个阈值点上突变。在Matlab,可以使用非线性拟合方法来拟合阶跃函数。 以下是使用Matlab进行阶跃函数非线性拟合的一般步骤: 1. 准备数据:首先,需要准备包含阶跃函数数据的输入和输出向量。输入向量通常是自变量,输出向量是因变量。 2. 定义模型:根据阶跃函数的形式,定义一个适当的非线性模型。可以使用Matlab提供的函数,如`fittype`来定义模型。 3. 拟合数据:使用`fit`函数将数据拟合到定义的模型上。该函数会返回拟合结果,包括拟合参数和拟合误差等信息。 4. 可视化结果:使用Matlab的绘图函数,如`plot`来绘制原始数据和拟合曲线,以便观察拟合效果。 下面是一个简单的示例代码,演示如何在Matlab进行阶跃函数非线性拟合: ```matlab % 准备数据 x = [0, 1, 2, 3, 4, 5]; % 输入向量 y = [0, 0, 0, 1, 1, 1]; % 输出向量 % 定义模型 model = fittype('stepfun(x, a, b)'); % 使用stepfun函数定义阶跃函数模型 % 拟合数据 fit_result = fit(x', y', model, 'StartPoint', [2, 3]); % 使用fit函数进行拟合,设置起始点为[2, 3] % 可视化结果 plot(x, y, 'o'); % 绘制原始数据点 hold on; plot(fit_result); % 绘制拟合曲线 legend('原始数据', '拟合曲线'); ``` 这段代码,我们使用了`stepfun`函数来定义阶跃函数模型,然后使用`fit`函数进行拟合,并使用`plot`函数绘制原始数据和拟合曲线。 希望以上内容对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Peter-Lu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值