介绍Sigmoid函数的平移、平滑和翻转【基于Python可视化分析】

文章目录

  • 简介
  • Sigmoid函数
  • Sigmoid函数曲线调控参数设置
  • python可视化
  • 参考

简介

本篇博客介绍了具有S型曲线的Sigmoid函数,以及如何设置、调整Sigmoid函数的参数实现S曲线的平滑、平移和翻转操作。博客给出了Python代码示例,更加深刻形象。

Sigmoid函数

Sigmoid函数,也称为Logistic函数,是一种常用的数学函数,通常表示为 σ ( z ) σ(z) σ(z),其中 z z z是实数输入。Sigmoid函数的数学表达式如下:

σ ( z ) = 1 1 + e − z σ(z) =\frac{1} {1 + e^{-z}} σ(z)=1+ez1

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

Sigmoid函数具有以下特点:

  • 值范围:Sigmoid函数的输出范围在0到1之间,即σ(z)的值总是在0和1之间。这使得它特别适用于表示概率或将实数映射到概率分布。

  • S形状:Sigmoid函数的图形呈S形状曲线,因此它也被称为S形函数。这个曲线在z接近0时接近线性,然后在z远离0时饱和,导致输出趋于0或1。

Sigmoid函数在深度学习和人工智能中有多种应用,包括但不限于以下几个方面:

  • 二元分类:Sigmoid函数通常用于二元分类问题,其中模型的输出表示一个样本属于某一类的概率。模型的输出通过Sigmoid函数转化为概率值,然后可以根据设定的阈值来做出分类决策。

  • 神经网络的激活函数:Sigmoid函数曾经是神经网络中常用的激活函数之一。尤其在早期的神经网络中,Sigmoid函数被用于神经元的激活函数,但后来由于它存在梯度消失问题,逐渐被更复杂的激活函数如ReLU(Rectified Linear Unit)所取代。

  • 阈值单位:Sigmoid函数可以模拟神经元的兴奋与抑制效应,因此在一些特定应用中仍然有用,例如逻辑回归模型中的逻辑单元(Logistic Unit)。

  • 深度学习中的门控单元:Sigmoid函数的变种如长短时记忆网络(LSTM)和门控循环单元(GRU)中的门控单元起到重要作用,用于控制信息的流动和遗忘。

尽管Sigmoid函数在某些情况下仍有用,但在深度学习领域,它已经被其他激活函数如ReLU广泛取代,因为ReLU更容易训练,并且解决了梯度消失问题。但了解Sigmoid函数的原理仍然有助于理解深度学习的基本概念和发展历史。

Sigmoid函数曲线调控参数设置

  • 参数 a a a控制S曲线的平滑程度: a a a越接近于0越平滑, a a a越大则曲线越陡峭。
  • 参数 b b b控制S曲线的对称中心位置。
  • 取消参数 a a a前的负号,可以得到反S曲线。

σ ( z ) = 1 1 + e − a ( z − b ) σ(z) =\frac{1} {1 + e^{-a(z-b)}} σ(z)=1+ea(zb)1

python可视化

介绍Sigmoid函数的平移、平滑和翻转【基于Python可视化分析】_第1张图片

import matplotlib.pyplot as plt
import numpy as np

z = np.linspace(start=-10, stop=10, num=100)
colorlist = ['red', 'green', 'black', 'cyan', 'pink', 'blue', 'purple', 'orange', 'brown', 'grey', 'silver', 'golden', 'megenta']

fig = plt.figure(figsize=(12, 5))
ax1 = fig.add_subplot(1, 2, 1)
ax1.set_title(label="S curve")
# 绘制不同平滑度的S曲线
b = 0
for idx, a in enumerate(np.arange(start=0.5, stop=3, step=0.5)):
    sigmoid = 1 / (1 + np.exp(-a*z-b))
    ax1.plot(z, sigmoid, color=colorlist[idx], linewidth=1, linestyle='-', label=f'FPS score: a={a}, b={b}')
# 绘制S曲线的平移
b = 5
sigmoid = 1 / (1 + np.exp(-a*z-b))
ax1.plot(z, sigmoid, color=colorlist[idx], linewidth=2, linestyle='-', label=f'FPS score: a={a}, b={b}')
ax1.legend()
ax1.grid(visible=True, color='grey', linestyle='--', linewidth=0.5)

ax2 = fig.add_subplot(1, 2, 2)
ax2.set_title(label="Anti S curve")
# 绘制不同平滑度的反S曲线
b = 0
for idx, a in enumerate(np.arange(start=0.5, stop=3, step=0.5)):
    sigmoid = 1 / (1 + np.exp(a*z-b))
    ax2.plot(z, sigmoid, color=colorlist[idx], linewidth=1, linestyle='-', label=f'FPS score: a={a}, b={b}')
ax2.legend()
ax2.grid(visible=True, color='grey', linestyle='--', linewidth=0.5)
plt.savefig("sigmoid.jpg", dpi=600)
plt.show()

参考

  1. 知乎:Sigmoid函数及变形用于两种测量结果的加权求和
  2. 维基百科:S型函数
  3. 百度百科:Sigmoid函数

收集整理和创作不易, 若有帮助, 请帮忙点赞收藏❤️, 谢谢!✨✨

你可能感兴趣的:(Python,MachineLearning,python,人工智能)