文章目录

  • 一、Tanh
  • 二、Sigmoid
  • 三、ReLU
  • 四、Leaky ReLU
  • 五、ELU
  • 六、SiLU
  • 七、Mish

本文主要介绍卷积神经网络中常用的激活函数及其各自的优缺点

最简单的激活函数被称为线性激活,其中没有应用任何转换。 一个仅由线性激活函数组成的网络很容易训练,但不能学习复杂的映射函数。线性激活函数仍然用于预测一个数量的网络的输出层(例如回归问题)。

非线性激活函数是更好的,因为它们允许节点在数据中学习更复杂的结构 。两个广泛使用的非线性激活函数是 sigmoid 函数和 双曲正切 激活函数。

一、Tanh

Tanh 函数公式如下,数值范围在 (-1, 1),导数范围为 (0, 1]

Tanh 函数的优点:

  • 以 0 为中心,能够达到正负平衡,避免出现梯度的不稳定性

Tanh 函数的缺点:

  • 会导致梯度消失问题!

二、Sigmoid

Sigmoid 函数公式如下,数值范围为 (0, 1),导数范围为 (0, 0.25]:

  • f ( x ) = 1 1 + e − z f(x) = \frac{1}{1+e^{-z}} f(x)=1+e−z1​

sigmoid 函数优点:

  • 可以把输入映射到 (0, 1)区间,可以用来表示概率,在物理意义上最为接近生物神经元

sigmoid 函数缺点:

  • 梯度消失问题 :由于 sigmoid 的导数 f′(zl) 区间为 (0, 0.25],所以其极易落入饱和区,导致梯度非常小,权重接近不变,无法正常更新
  • sigmoid 的输出并不是均值为 0 的,所有输出数据的大于0,会增加梯度的不稳定性
  • 当输出接近饱和或剧烈变化时,对输出范围的这种缩减往往会带来一些不利影响

三、ReLU

f ( x ) = max ( 0 , x ) f(x) = \text{max}(0, x) f(x)=max(0,x)

ReLU 函数的优点:

  • 摒弃了复杂的计算, 比 sigmoid/tanh 收敛的更快 (大概快 6x)
  • 其导数在其权重和(z) 大于 0 的时候为 1,不存在梯度消失现象权重可以正常更新,但也要防止 ReLU 的梯度爆炸

ReLU 函数的缺点:

  • 小于 0 的输出经过 ReLU 之后会全都变成 0,梯度值为0,从而权重无法正常更新
  • 输出具有偏移现象,即输出均值恒大于零
  • 当使用了较大的学习速率时,易受到饱和的神经元的影响。

四、Leaky ReLU

公式如下:

  • f ( x ) = α x , x < 0 f(x) = \alpha x, \ x<0 f(x)=αx, x<0
  • f ( x ) = x , x > = 0 f(x) = x, \ x>=0 f(x)=x, x>=0

为了防止模型 dead 的情况,出现了很多 ReLU 的改进版本,如 Leaky ReLU,在 0 右侧和 ReLU 一样,左侧从全零变成了一个斜率很小的直线

优点:

  • 避免了小于零的特征被处理为 0 导致特征丢失的情况,同时左右两侧梯度都是恒定的,不会出现梯度消失现象

缺点:

  • Leaky ReLU中的 α \alpha α 为常数,一般设置 0.01。这个函数通常比 ReLU 激活函数效果要好,但是效果不是很稳定,所以在实际中 Leaky ReLU 使用的并不多。

五、ELU

ELU(Exponential Linear Unit,指数线性单元)尝试加快学习速度。基于ELU,有可能得到比ReLU更高的分类精确度。

优点:

  • 解决了 ReLU 可能导致的网络 dead 的问题

缺点:

  • 计算量较大

六、SiLU

f ( x ) = x ∗ sigmoid ( β x ) f(x) = x *\text{sigmoid}(\beta x) f(x)=x∗sigmoid(βx), β = 1 \beta=1 β=1 时就是 SiLU

优点:

  • 相比 ReLU 增加了平滑性的特点

缺点:

  • 引入了指数计算,增加了计算量

七、Mish

f ( x ) = x ∗ tanh ( ln ( 1 + e x ) ) f(x) = x * \text{tanh}(\text{ln}(1+e^x)) f(x)=x∗tanh(ln(1+ex))

优点:

  • 平滑、非单调、无上界、有下界

缺点:

  • 引入了指数函数,增加了计算量

绘图代码:

import matplotlib.pyplot as plt
import numpy as np
import math
#
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False## sigmoid
def sigmoid(x):return 1 / (1 + np.exp(-x))
x1 = np.arange(-10.0, 10.0, 0.1)
y1 = sigmoid(x1)
plt.plot(x1, y1, color='purple', label='sigmoid')
plt.legend()## ReLU
def ReLU(x):return np.maximum(0, x)  # ReLU函数的定义
x2 = np.arange(-10.0, 10.0, 0.1)
y2 = ReLU(x2)
plt.plot(x2, y2, color='orange', label='ReLU')
plt.legend()## tanh
def tanh(x):return (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x))
x3 = np.arange(-10.0, 10.0, 0.1)
y3 = tanh(x3)
plt.plot(x3, y3, color='yellow', label='Taanh')
plt.legend()## Leaky ReLU
def Leaky_ReLU(xx):return [x if x > 0 else 0.1 * x for x in xx]
x4 = np.arange(-10, 10.0, 0.1)
y4 = Leaky_ReLU(x4)
plt.plot(x4, y4, color='black', label='Leaky ReLU(alpha=0.1)')
plt.legend()## ELU
def ELU(xx):return [x if x > 0 else 1 * (np.exp(x) - 1) for x in xx]
x5 = np.arange(-10.0, 10.0, 0.1)
y5 = ELU(x5)
plt.plot(x5, y5, color='green', label='ELU(alpha=1)')
plt.legend()# silu
def SiLU(xx):return [x * (1 / (1 + np.exp(-x))) for x in xx]
x6 = np.arange(-10.0, 10.0, 0.1)
y6 = SiLU(x6)
plt.plot(x6, y6, color='red', label='SiLU')
plt.legend()## Mish
def Mish(xx):return [x * tanh(np.log(1 + np.exp(x))) for x in xx]
def tanh(x):return (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x))
x7 = np.arange(-10.0, 10.0, 0.1)
y7 = Mish(x7)
plt.plot(x7, y7, color='pink', label='Mish')
plt.legend()# 获得当前的axis
ax = plt.gca()
# 设置图像的上边、右边axis为无色
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')# 设置x轴坐标在下部
ax.xaxis.set_ticks_position('bottom')
# 设置x轴位于图像y=0处
ax.spines['bottom'].set_position(('data', 0))
# 设置x轴坐标在左部
ax.yaxis.set_ticks_position('left')
# 设置y轴位于图像x=0处
ax.spines['left'].set_position(('data', 0))
plt.show()

【卷积神经网络】12、激活函数 | Tanh / Sigmoid / ReLU / Leaky ReLU / ELU / SiLU / Mish相关推荐

  1. 激活函数总结sigmoid,tanh,relu,Leaky ReLU,RRelu,ELU,PRelu,SELU,swish

    本文总结深度学习的损失函数及其优缺点. 激活函数是深度学习模型的重要成分,目的是将线性输入转换为非线性.常见的激活函数有sigmoid,tanh,ReLU等 1.sigmoid Sigmoid 非线性 ...

  2. R语言使用自定义函数编写深度学习Leaky ReLU激活函数、并可视化Leaky ReLU激活函数

    R语言使用自定义函数编写深度学习Leaky ReLU激活函数.并可视化Leaky ReLU激活函数 目录

  3. 【深度学习】激活函数:原理+常见激活函数(Sigmoid\Tanh\ReLU\Leaky ReLU\Softmax)

    首先需要知道为什么要引入激活函数:激活函数是用来加入非线性因素的,因为线性模型的表达能力不够.引入非线性激活函数,可使深层神经网络的表达能力更加强大. 在深度学习中,线性模型只需要简单的全连接层就能实 ...

  4. 激活函数详解(ReLU/Leaky ReLU/ELU/SELU/Swish/Maxout/Sigmoid/tanh)

    神经网络中使用激活函数来加入非线性因素,提高模型的表达能力. ReLU(Rectified Linear Unit,修正线性单元) 形式如下: ReLU公式近似推导:: 下面解释上述公式中的softp ...

  5. 深度学习中的一些常见的激活函数集合(含公式与导数的推导)sigmoid, relu, leaky relu, elu, numpy实现

    文章目录 Sigmoid(x) 双曲正切 线性整流函数 rectified linear unit (ReLu) PReLU(Parametric Rectified Linear Unit) Lea ...

  6. [Pytorch 常用函数] 激活函数Relu, Leaky Relu

    修正线性单元(Rectified linear unit,ReLU)是神经网络中最常用的激活函数.它保留了 step 函数的生物学启发(只有输入超出阈值时神经元才激活),不过当输入为正的时候,导数不为 ...

  7. 【深度学习技术】卷积神经网络常用激活函数总结

    本文记录了神经网络中激活函数的学习过程,欢迎学习交流. 神经网络中如果不加入激活函数,其一定程度可以看成线性表达,最后的表达能力不好,如果加入一些非线性的激活函数,整个网络中就引入了非线性部分,增加了 ...

  8. 人工神经网络之激活函数 -tanh函数

    tanh函数 tanh(x)=e2x−1e2x+1tanh′(x)=1−tanh(x)2 证明 ∂tanh(x)∂x=(1−2e2x+1)′=2⋅2e2x(e2x+1)2=4e2x(e2x+1)2=( ...

  9. 深度学习- 激活函数总结(Sigmoid, Tanh, Relu, leaky Relu, PReLU, Maxout, ELU, Softmax,交叉熵函数)

    激活函数是用来加入非线性因素的,解决线性模型所不能解决的问题 激活函数通常有以下性质 – 非线性 – 可微性 – 单调性 –

最新文章

  1. Spring Cloud Stream 使用延迟消息实现定时任务(RabbitMQ)
  2. 我来发美食啦,馋一下各位看官
  3. struct2利用相关的Aware接口
  4. linux deepin 升级内核命令
  5. kohana::message 和config
  6. 复制出来的文本都是大写_vi或vim怎么复制粘贴
  7. 致力推广 Vim 的那个程序员走了,Vim 之父:我要把 9.0 版献给他
  8. 【luogu3834】【POJ2104】【模板】可持久化线段树 1 [主席树]
  9. Java 算法 校门外的树
  10. SpringBoot - 使用ExecutorService线程池执行异步任务教程(以Runnable任务为例)
  11. The repository ‘xxx‘ no longer has a Release file. (sudo apt --fix-broken install失败解决)
  12. Git教程、python教程、ubuntu教程 收藏
  13. 小D课堂 - 新版本微服务springcloud+Docker教程_3-01 什么是微服务的注册中心
  14. js 中二叉树的深度遍历与广度遍历(递归实现与非递归实现)
  15. Arduino学习笔记(2)-- Arduino基本函数
  16. GHGL项目总结-TIPS系统和银行拨付
  17. word根据标题自动生成目录
  18. Wsus更新失败错误代码:0x80244022故障排除
  19. 直播网站并发测试软件,HTTP/HLS/RTMP超级负载测试工具
  20. 文本对抗:《Semantically Equivalent Adversarial Rules for Debugging NLP Models》

热门文章

  1. WP免费主题,wordpress免费主题,WP建站主题
  2. 解决Windows缺少MSCOMCTL.OCX文件无法运行程序问题
  3. logstash 日志_面试和书评:LogStash书,使日志管理变得容易
  4. Go面试题——log.fatal和panic的区别
  5. [创业-33]:股权、期权、期股的区别
  6. java Lambda与stream
  7. E-R图中联系向关系模式的转化
  8. 把你的面子撕下来扔到地上,狠狠踹几脚!
  9. 护士副高需要计算机考试吗,护士评副高什么要求
  10. 使用插入排序、归并排序对链表进行排序