[激活函数][学习笔记] 神经网络常见激活函数整理及其 Python 绘图

1 Sigmoid Function

1.1 简介

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

S i g m o i d ( z ) = 1 1 + e − z Sigmoid(z) = \frac{1}{1+e^{-z}} Sigmoid(z)=1+ez1

1.2 优缺点

  • 优点:Sigmoid 函数求导简便,在在特征相差比较复杂或是相差不是特别大时效果比较

  • 缺点:激活函数计算量大,在反向传播时容易出现梯度消失问题;当 z z z 很大或者很小时,函数变化的很慢,会拖慢梯度下降算法

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

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()

图像绘制结果如下所示:

2 Tanh Function

2.1 简介

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

t a n h ( z ) = e z − e − z e z + e − z tanh(z)=\frac{e^{z}-e^{-z}}{e^{z}+e^{-z}} tanh(z)=ez+ezezez

2.2 优缺点

  • 优点:Tanh 函数几乎总比 Sigmoid 函数表现的好,因为函数输出介于 -1 和 1 之间,激活函数的平均值更接近 0,使用 Tanh 函数有类似数据中心化的效果,使得数据的平均值更接近 0,使得下一层的学习更加方便

  • 缺点:在输出层时,我们更希望输出值 y ^ \hat{y} y^ 是一个介于 0 和 1 之间的数而不是 -1 和 1 之间; 在二元分类的时候, Tanh 函数作为输出层的表现也不如 Sigmoid 函数; 当 z z z 很大或者很小时,函数变化的很慢,会拖慢梯度下降算法

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()

图像绘制结果如下所示:

3 ReLU (Rectified Linear Unit)

3.1 简介

通常意义下,线性修正单元 ReLU 指代数学中的斜坡函数,即
R e L U ( z ) = m a x { 0 , z } ReLU(z) = max\{0, z\} ReLU(z)=max{0,z}

而在神经网络中,ReLU 通常作为神经元的默认激活函数,定义了该神经元在线性变换 w T x + b w^{T}x+b wTx+b 之后的非线性输出结果。换言之,对于进入神经元的来自上一层神经网络的输入向量,使用线性整流激活函数的神经元会输出
R e L U ( z ) = m a x { 0 , w T x + b } ReLU(z) = max\{0, w^{T}x+b\} ReLU(z)=max{0,wTx+b}
至下一层神经元或作为整个神经网络的输出

3.2 优缺点

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

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()

图像绘制结果如下所示:

4 选择 Activation Functions 的经验法则

  • 如果输出值是 0 和 1 (二元分类),Sigmoid Function 很适合作为输出层的激活函数,其他单元都用 ReLU 作为激活函数(如果你不知道隐层应该用什么激活函数)
  • 如果愿意的话,也可以用 L e a k y R e L U ( z ) = m a x { 0.01 z , z } Leaky ReLU(z) = max\{0.01z,z\} LeakyReLU(z)=max{0.01z,z} ,与 ReLU 相比, Leaky ReLU 在 z < 0 z<0 z<0 的部分导数不为 0。当然,Leaky ReLU 中的系数 0.01 0.01 0.01 也可以把其看做一个需要学习的参数进行训练
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值