tensorflow系列教程之六:数学知识-sigmoid

定义

Sigmoid函数是一个在生物学中常见的S型函数,也称为S型生长曲线。 [1] 在信息科学中,由于其单增以及反函数单增等性质,Sigmoid函数常被用作神经网络的阈值函数,将变量映射到0,1之间。

公式

$$S(x)=\cfrac{1}{1+e^{-x}}=\cfrac{e^x}{e^x+1}$$

其对x的导数可以用自身表示: $$S^{'}(x)=\cfrac{e^{-x}}{(1+e^{-x})^2}=S(x)(1-S(x))$$

python实现

In [7]:
import numpy as np
#定义sigmoid函数
#exp:高等数学里以自然常数e为底的指数函数
#numpy.exp():返回e的幂次方,e是一个常数,值为2.71828
def sigmoid(x):
    return 1.0/(1+np.exp(-x))
print(sigmoid(-5))
print(sigmoid(0))
print(sigmoid(5))
0.0066928509242848554
0.5
0.9933071490757153

函数图像

In [9]:
import numpy as np
import matplotlib.pyplot as plt

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

sigmoid_inputs = np.arange(-10,10)
print("Sigmoid函数输入是{}".format(sigmoid_inputs))

sigmoid_outputs=sigmoid(sigmoid(sigmoid_inputs))
print("Sigmoid函数输出是{}".format(sigmoid_outputs))

#将输入和输出绘制出来

plt.plot(sigmoid_inputs,sigmoid_outputs)
plt.xlabel("Sigmoid input")
plt.ylabel("Sigmoid output")
plt.show()
Sigmoid函数输入是[-10  -9  -8  -7  -6  -5  -4  -3  -2  -1   0   1   2   3   4   5   6   7
   8   9]
Sigmoid函数输出是[0.50001135 0.50003085 0.50008384 0.50022776 0.50061816 0.50167321
 0.50449643 0.51185425 0.52976549 0.56683301 0.62245933 0.67503753
 0.70698737 0.72163256 0.72750761 0.72974065 0.73057215 0.73087942
 0.73099264 0.73103432]

优缺点

优点:

1.Sigmoid函数的输出映射在(0,1)之间,单调连续,输出范围有限,优化稳定,可以用作输出层。

2.求导容易。

缺点:

1.由于其软饱和性,容易产生梯度消失,导致训练出现问题。

2.其输出并不是以0为中心的。

应用

logistic函数在统计学和机器学习领域应用最为广泛或者最为人熟知的肯定是逻辑回归模型了。逻辑回归(Logistic Regression,简称LR)作为一种对数线性模型(log-linear model)被广泛地应用于分类和回归场景中。此外,logistic函数也是神经网络最为常用的激活函数,即sigmoid函数。