常见的激活函数及其优缺点分析

在上一章我们总体介绍了一下卷积神经网络的框架,其中谈到了激活函数的作用,今天我们来具体分析一下都有哪些激活函数,他们各自的特点是什么,以及我在学习时的疑问与解答
(部分截图来源于网络,如有侵权,烦请告知)

一、 sigmoid函数

  • 特点:所有元素都被压缩在[0,1]范围内,当输入数字很大或很小时,图像都趋于平滑,在0附近趋于线性;其函数表达式和图像如下所示


    sigmoi函数是比较原始的激活函数,现在已经不太常用了,主要因为它有以下3个问题:
  1. sigmoid函数饱和会导致梯度消失
    当x是很小的负数或很大的正数时,它们都处于sigmoid函数的平滑区域,这些区域的梯度就会消失,从而无法得到梯度流的反馈。(关于其梯度的计算,可以参照下面的推导,也可以之间看图的斜率)
  2. sigmoid是一个非零中心的函数

    在讲到这儿的时候,大家可能都看到过这个图,这是我当时很困惑的点,这个图到底是什么意思,为什么可能更新的方向是这样
    在这里我首先要更正一下课程中的图,它实质是锯齿状,并不是完全在垂直方向或水平方向

    下面我通过一个例子让大家看得更清楚一点。由sigmoid函数特点可知,假设上一级神经元采用了sigmoid激活函数,那么它输出的就全是[0,1]之间的数,即输入到这一级神经元的数x均大于0,下图的推导给大家展示了整个过程,可以看出它在走Z 字形逼近最优解,收敛速度很慢;

    由此我们知道,如果使用sigmoid函数作为激活函数,所有W的梯度要么全正,要么全负,但如果换一个以0为中心的激活函数,W的梯度就可以同时有正有负,直接逼近最优解;所以我们一般不用sigmoid函数作为激活函数。
  3. 指数函数的计算代价有点高
    尽管这在这个复杂神经网络框架中不值一提,但仍然是我们需要注意的一小点

二、tanh函数


  • 它看起来和sigmoid函数非常相似,但不同之处在于,它将输出值变换到了[-1,1]的范围内,这就解决了sigmoid函数以非0为中心的问题,但它仍然有梯度消失的问题;

三、ReLU函数


  • 这就是我们上一章讲到的卷积神经网络中常用的激活函数,与前两个激活函数相比,ReLU函数不会在正的区域产生饱和现象,也就是在正的区域不会有梯度消失,这是一个很大的优势;它的计算成本也不高,且收敛速度大概是前两种的6倍;
  • 但是我们注意到,它也是以非0为中心的,所以tanh刚刚解决的问题现在又出现了
  • 此外,ReLU函数会产生Dead ReLU Problem(这就是我困惑的第二个点了,为什么会说梯度过大,或者学习率过大就会出现神经元死亡?)
    首先,我们来解释一下什么叫Dead ReLU Problem,它指的是某些神经元可能永远不会被激活,导致相应的参数永远不能被更新训练神经网络的时候;举个例子,一旦学习率没有设置好,第一次更新权重的时候,输入是负值,那么这个含有ReLU的神经节点就会死亡,再也不会被激活。因为:ReLU的导数在x>0的时候是1,在x<=0的时候是0。如果x<=0,那么ReLU的输出是0,那么反向传播中梯度也是0,权重就不会被更新,导致神经元不再学习。
    关于这个问题详细的解释大家可以移步知乎使用relu存在梯度过大导致神经元“死亡”,怎么理解?

总体来说,ReLU函数具有以下优点

1)采用sigmoid等函数,算激活函数时(指数运算),计算量大,反向传播求误差梯度时,求导涉及除法,计算量相对大,而采用Relu激活函数,整个过程的计算量节省很多。
2)对于深层网络,sigmoid函数反向传播时,很容易就会出现梯度消失的情况(在sigmoid接近饱和区时,变换太缓慢,导数趋于0,这种情况会造成信息丢失,从而无法完成深层网络的训练。
3)ReLU会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生

四、Leaky ReLU函数


  • 在上文中我们提到,ReLU将所有的负值设置为0,造成神经元节点死亡情况。因此Leaky ReLU对其做了一个改进,给所有负值赋予一个非零的斜率,这样,不管输入是正是负,都不会有饱和的现象。

五、PReLU

  • 这里的参数α既不需要指定,也不需要硬编码,而是把它当做一个可以反向传播和学习的参数

六、ELU函数


  • ELU可看作是介于ReLU和Leaky ReLU之间的一种折中函数,具有Leaky ReLU的形状、使输出均值更接近0,但在负值区域仍然会接近饱和

七、Maxout 函数

  • 这样不会出现饱和也不会出现死亡神经元,但是它会使每个神经元的参数翻倍

最后一个问题,我们之前说到,激活函数主要作用是用来加入非线性因素的,提高神经网络对模型的表达能力,解决线性模型所不能解决的问题。那么,ReLU函数到底是线性函数还是非线性函数?( 在此引用一位前辈的回答)链接

1、首先什么是线性的网络,如果把线性网络看成一个大的矩阵M。那么输入样本A和B,则会经过同样的线性变换MA,MB(这里A和B经历的线性变换矩阵M是一样的)。
2、的确对于单一的样本A,经过由relu激活函数所构成神经网络,其过程确实可以等价是经过了一个线性变换M1,但是对于样本B,在经过同样的网络时,由于每个神经元是否激活(0或者Wx+b)与样本A经过时情形不同了(不同样本),因此B所经历的线性变换M2并不等于M1。因此,relu构成的神经网络虽然对每个样本都是线性变换,但是不同样本之间经历的线性变换M并不一样,所以整个样本空间在经过relu构成的网络时其实是经历了非线性变换的。
3、还有一种解释就是,不同样本的同一个feature,在通过relu构成的神经网络时,流经的路径不一样(relu激活值为0,则堵塞;激活值为本身,则通过),因此最终的输出空间其实是输入空间的非线性变换得来的。
4、更极端的,不管是tanh还是sigmoid,你都可以把它们近似看成是分段线性的函数(很多段),但依然能够有非线性表达能力;relu虽然只有两段,但同样也是非线性激活函数,道理与之是一样的。

综上所示,ReLU的性能最好,后面介绍的Leaky ReLU、PReLU、ELU和Maxout 实质上都是ReLU的变形或者说改进,在选择激活函数时,我们一般的建议是

  1. 优先使用ReLU,但是要很谨慎地调整学习速率;
  2. 可以尝试Leaky ReLU、PReLU、ELU和Maxout等;
  3. 可以尝试使用tanh,但效果可能不会太好;
  4. 最好不要使用sigmoid;

常见的激活函数及其优缺点分析相关推荐

  1. 背景建模--Vibe 算法优缺点分析

    背景建模--Vibe 算法优缺点分析 一.Vibe 算法的优点 Vibe背景建模为运动目标检测研究邻域开拓了新思路,是一种新颖.快速及有效的运动目标检测算法.其优点有以下两点: 1.思想简单,易于实现 ...

  2. 深度学习中几种常见的激活函数理解与总结

    学习神经网络的时候我们总是听到激活函数这个词,而且很多资料都会提到常用的激活函数,比如Sigmoid函数.tanh函数.Relu函数.肯定很多人刚开始和我一样一头雾水,接下来就让我们详细了解一下激活函 ...

  3. [注塑]各种进胶方式优缺点分析

    [注塑]各种进胶方式优缺点分析 1.直接进胶 2.测胶口 3.搭接式浇口 4.扇形浇口 5.潜胶 6.弧线浇口 7.针形浇口 结构设计的时,分析浇口的进胶方式尤为重要,为了简便我们的设计,常常需要将一 ...

  4. phpstduy8 redisClient 2.0 点不了_重疾评测 | 网红重疾险百年康惠保2.0版怎么样?优缺点分析...

    重疾评测 | 网红重疾险百年康惠保2.0版怎么样?优缺点分析 百年人寿推出的康惠保作为重疾险中的网红,相信很多朋友都听说过,今天羊羊探险带大家了解其升级产品康惠保2.0版,看看这款单次赔付的重疾到底给 ...

  5. 【相机标定】标定板介绍以及优缺点分析

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 来源 | 机器视觉沙龙 导读 本文主要介绍各种常用标定板及其优缺点 ...

  6. python算法的缺陷和不足_最全最实用的机器学习算法优缺点分析

    原标题:最全最实用的机器学习算法优缺点分析 最全最实用的机器学习算法优缺点分析 2017-06-10 数据派THU 来源:AI100 本文长度为4600字,建议阅读6分钟 本文结合使用场景及实际经验, ...

  7. MQ消息队列详解、四大MQ的优缺点分析

    MQ消息队列详解.四大MQ的优缺点分析 前言 面试题切入 面试官心理分析 面试题剖析 ①为什么要使用MQ 系统解耦 异步调用 流量削峰 消息队列的优缺点 四大主流MQ(kafka.ActiveMQ.R ...

  8. 计算机故障的现象有哪些,八种常见CPU故障现象的分析与处理_计算机硬件与网络_IT /计算机_信息...

    八种常见CPU故障现象的分析和处理214 Mini Games http: 1.机箱噪声: 故障现象: 在使用CPU升级计算机之后,每次打开计算机时,噪声都会很大. 但是使用一段时间后,声音恢复正常. ...

  9. JWT 身份认证优缺点分析以及常见问题解决方案

    JWT 身份认证优缺点分析以及常见问题解决方案 参考文章: (1)JWT 身份认证优缺点分析以及常见问题解决方案 (2)https://www.cnblogs.com/idoljames/p/1169 ...

  10. python编程语言的缺点-常见的AI编程语言优缺点比较,程序员千万不要入错行!...

    原标题:常见的AI编程语言优缺点比较,程序员千万不要入错行! 人工智能编程是一种技术的提升,为不同公司的运营和人们的生活带来了极高的效率和最佳效益. 人工智能为不同的行业带来了另一种智能技术,其潜力的 ...

最新文章

  1. 变态最大值--nyoj题目811
  2. Key Components and Internals of Spring Boot Framework--转
  3. 简单存取款机的实现---控制输入变量的规则
  4. URLEncoder编码
  5. 3分钟入门python_3分钟带你了解世界第一语言Python 入门上手也这么简单!
  6. JS中数组和字符串具有的方法,以及substring,substr和slice的用法与区别
  7. 常说的「缓存穿透」和「击穿」是什么
  8. 9.2 配置rsync+inotify实时同步
  9. 天正安装autocad启动失败_安装天正后cad无法启动 - 卡饭网
  10. RDL和RDLC性能比较
  11. QGIS中WKT转为可视化涂层
  12. PHPCMS模块分析之广告模块详解----北冥神功破解法(二)
  13. Google DeepMind顾问预言:五年后AI将在《星际争霸》中战胜人类
  14. 2021 ICPC Gran Premio de Mexico 1ra Fecha
  15. 《编译原理》求短语,直接短语,句柄,素短语,最左素短语 - 例题解析
  16. 哈希表解决冲突的方式
  17. 全方位构建信创生态体系,焱融科技完成海光 CPU 生态兼容性认证
  18. 第六届 虚拟漫游 题目
  19. DG部署(主库rac)--rman 异机恢复方式
  20. pytest接口测试自动化框架

热门文章

  1. 【直流无刷马达的调速方法
  2. TC118AH单通道内置MOS单通道直流无刷马达驱动IC
  3. 思维导图工具之Freeplane(上篇)
  4. LeetCode-自除数
  5. 【老九学堂】【Java】Java环境之JDK配置
  6. 【安卓源码】简单分析smaps节点
  7. 学校计算机怎么连接自己的热点,笔记本电脑怎么连接手机热点(手机热点开启及连接方法)...
  8. 发那科机器人回原位置先上升_发那科机器人offset condition 指令什么意思
  9. vue 中使用 vue-amap(高德地图) 【'AMapUI' is not defined 】
  10. S5P4418 使用SD卡启动Android系统