本篇博客介绍了具有S型曲线的Sigmoid函数,以及如何设置、调整Sigmoid函数的参数实现S曲线的平滑、平移和翻转操作。博客给出了Python代码示例,更加深刻形象。
Sigmoid函数,也称为Logistic函数,是一种常用的数学函数,通常表示为 σ ( z ) σ(z) σ(z),其中 z z z是实数输入。Sigmoid函数的数学表达式如下:
σ ( z ) = 1 1 + e − z σ(z) =\frac{1} {1 + e^{-z}} σ(z)=1+e−z1
其中, 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函数的原理仍然有助于理解深度学习的基本概念和发展历史。
σ ( z ) = 1 1 + e − a ( z − b ) σ(z) =\frac{1} {1 + e^{-a(z-b)}} σ(z)=1+e−a(z−b)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()
收集整理和创作不易, 若有帮助, 请帮忙点赞
➕收藏
❤️, 谢谢!✨✨