1 Sigmoid Function

1.1 简介

Sigmoid 函数又名 Logistic 函数,值域为 (0, 1) ,可以将任意一个实数映射到一个介于 (0, 1) 区间之内的值,常用于隐层神经元输出,其函数表达式为:

python 自带openssl python 自带sigmoid函数_python 自带openssl

1.2 优缺点

  • 优点:Sigmoid 函数求导简便,在在特征相差比较复杂或是相差不是特别大时效果比较
  • 缺点:激活函数计算量大,在反向传播时容易出现梯度消失问题;当 python 自带openssl python 自带sigmoid函数_人工智能_02

★ 除非在二分类的输出层,否则尽量不要使用

1.3 函数图像

使用 matplotlib.pyplot 进行绘图,代码如下

import matplotlib.pyplot as plt
import math
import numpy as np

x = np.arange(-10, 10, 0.01) # 生成一个 [-10, 10] 之间差值为 0.01 的等差数列,代表图像中的 x axis
y = []
for num in x:
    y.append(1/(1 + math.exp(-num)))

plt.title('Sigmoid Function')
plt.xlabel('z')
plt.ylabel('σ(z)')
plt.plot(x, y)
plt.show()

图像绘制结果如下所示:



python 自带openssl python 自带sigmoid函数_python_03


2 Tanh Function

2.1 简介

Tanh 函数叫做 反正切 函数,值域为 (-1, 1) ,可以将任意一个实数映射到一个介于 (-1, 1) 区间之内的值,其函数表达式为:

python 自带openssl python 自带sigmoid函数_python 自带openssl_04

2.2 优缺点

  • 优点:Tanh 函数几乎总比 Sigmoid 函数表现的好,因为函数输出介于 -1 和 1 之间,激活函数的平均值更接近 0,使用 Tanh 函数有类似数据中心化的效果,使得数据的平均值更接近 0,使得下一层的学习更加方便
  • 缺点:在输出层时,我们更希望输出值 python 自带openssl python 自带sigmoid函数_人工智能_05 是一个介于 0 和 1 之间的数而不是 -1 和 1 之间; 在二元分类的时候, Tanh 函数作为输出层的表现也不如 Sigmoid 函数; 当 python 自带openssl python 自带sigmoid函数_人工智能_02

2.3 函数图像

使用 matplotlib.pyplot 进行绘图,代码如下

import matplotlib.pyplot as plt
import math
import numpy as np

x = np.arange(-10, 10, 0.01) # 生成一个 [-10, 10] 之间差值为 0.01 的等差数列,代表图像中的 x axis
y = []
for num in x:
    y.append((math.exp(num) - math.exp(-num))/(math.exp(num) + math.exp(-num)))

plt.title('Tanh Function')
plt.xlabel('x')
plt.ylabel('tanh(x)')
plt.plot(x, y)
plt.show()

图像绘制结果如下所示:



python 自带openssl python 自带sigmoid函数_python_07


3 ReLU (Rectified Linear Unit)

3.1 简介

通常意义下,线性修正单元 ReLU 指代数学中的斜坡函数,即
python 自带openssl python 自带sigmoid函数_python_08

而在神经网络中,ReLU 通常作为神经元的默认激活函数,定义了该神经元在线性变换python 自带openssl python 自带sigmoid函数_python_09 之后的非线性输出结果。换言之,对于进入神经元的来自上一层神经网络的输入向量,使用线性整流激活函数的神经元会输出
python 自带openssl python 自带sigmoid函数_神经网络_10
至下一层神经元或作为整个神经网络的输出

3.2 优缺点

  • 优点:更加有效率的梯度下降以及反向传播:避免了梯度爆炸和梯度消失问题;简化计算过程:没有了其他复杂激活函数中诸如指数函数的影响;同时相较于 Sigmoid Function & Tanh Function, 神经网络整体计算成本下降,速度加快很多
  • 缺点:在 python 自带openssl python 自带sigmoid函数_人工智能_11 时导数为 0 ,在 python 自带openssl python 自带sigmoid函数_神经网络_12

3.3 函数图像

使用 matplotlib.pyplot 进行绘图,代码如下

import matplotlib.pyplot as plt
import math
import numpy as np

x = np.arange(-10, 10, 0.01) # 生成一个 [-10, 10] 之间差值为 0.01 的等差数列,代表图像中的 x axis
y = []
for num in x:
    if num <= 0 :
        y.append(0)
    else:
        y.append(num)

plt.title('Rectified Linear Unit')
plt.xlabel('z')
plt.ylabel('ReLU(z)')
plt.plot(x, y)
plt.show()

图像绘制结果如下所示:



python 自带openssl python 自带sigmoid函数_python_13


4 选择 Activation Functions 的经验法则

  • 如果输出值是 0 和 1 (二元分类),Sigmoid Function 很适合作为输出层的激活函数,其他单元都用 ReLU 作为激活函数(如果你不知道隐层应该用什么激活函数)
  • 如果愿意的话,也可以用 python 自带openssl python 自带sigmoid函数_python 自带openssl_14 ,与 ReLU 相比, Leaky ReLU 在 python 自带openssl python 自带sigmoid函数_人工智能_11 的部分导数不为 0。当然,Leaky ReLU 中的系数 python 自带openssl python 自带sigmoid函数_神经网络_16