-
常见的激活函数及其优缺点分析
2020-07-13 20:39:55常见的激活函数及其优缺点分析 在上一章我们总体介绍了一下卷积神经网络的框架,...其函数表达式和图像如下所示 sigmoi函数是比较原始的激活函数,现在已经不太常用了,主要因为它有以下3个问题: sigmoid函数饱和常见的激活函数及其优缺点分析
在上一章我们总体介绍了一下卷积神经网络的框架,其中谈到了激活函数的作用,今天我们来具体分析一下都有哪些激活函数,他们各自的特点是什么,以及我在学习时的疑问与解答
(部分截图来源于网络,如有侵权,烦请告知)一、 sigmoid函数
- 特点:所有元素都被压缩在[0,1]范围内,当输入数字很大或很小时,图像都趋于平滑,在0附近趋于线性;其函数表达式和图像如下所示
sigmoi函数是比较原始的激活函数,现在已经不太常用了,主要因为它有以下3个问题:
- sigmoid函数饱和会导致梯度消失
当x是很小的负数或很大的正数时,它们都处于sigmoid函数的平滑区域,这些区域的梯度就会消失,从而无法得到梯度流的反馈。(关于其梯度的计算,可以参照下面的推导,也可以之间看图的斜率)
- sigmoid是一个非零中心的函数
在讲到这儿的时候,大家可能都看到过这个图,这是我当时很困惑的点,这个图到底是什么意思,为什么可能更新的方向是这样
在这里我首先要更正一下课程中的图,它实质是锯齿状,并不是完全在垂直方向或水平方向
下面我通过一个例子让大家看得更清楚一点。由sigmoid函数特点可知,假设上一级神经元采用了sigmoid激活函数,那么它输出的就全是[0,1]之间的数,即输入到这一级神经元的数x均大于0,下图的推导给大家展示了整个过程,可以看出它在走Z 字形逼近最优解,收敛速度很慢;
由此我们知道,如果使用sigmoid函数作为激活函数,所有W的梯度要么全正,要么全负,但如果换一个以0为中心的激活函数,W的梯度就可以同时有正有负,直接逼近最优解;所以我们一般不用sigmoid函数作为激活函数。
- 指数函数的计算代价有点高
尽管这在这个复杂神经网络框架中不值一提,但仍然是我们需要注意的一小点
二、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的变形或者说改进,在选择激活函数时,我们一般的建议是
- 优先使用ReLU,但是要很谨慎地调整学习速率;
- 可以尝试Leaky ReLU、PReLU、ELU和Maxout等;
- 可以尝试使用tanh,但效果可能不会太好;
- 最好不要使用sigmoid;
- 特点:所有元素都被压缩在[0,1]范围内,当输入数字很大或很小时,图像都趋于平滑,在0附近趋于线性;其函数表达式和图像如下所示
-
python实现插值算法及其图像
2018-05-22 21:54:47通过程序求出插值函数的表达式是比较麻烦的,常用的方法是描出插值曲线上尽量密集的有限个采样点,并用这有限个采样点的连线,即折线,近似插值曲线。取点越密集,所得折线就越逼近理论上的插值曲线。本实验中将所取... -
图形图像处理源程序-matlab6.5图形图像处理源程序.rar
2019-08-13 13:22:471.2.5 常用的数学函数 1.2.6 数组的运算 1.2.7 数组的扩展 1.2.8 数组的转换 1.2.9 MATLAB 控制语句 1.2.10 其它控制语句 1.2.11 文件操作 1.2.12 M 文件 第二章 MATLAB 图形绘制基础 2.1 二维... -
MATLAB图形图像处理
2011-01-03 12:20:111.2.5 常用的数学函数 1.2.6 数组的运算 1.2.7 数组的扩展 1.2.8 数组的转换 1.2.9 MATLAB 控制语句 1.2.10 其它控制语句 1.2.11 文件操作 1.2.12 M 文件 第二章 MATLAB 图形绘制基础 2.1 二维绘图 2.1.1 ... -
【MATLAB R2014a完全自学一本通】-第二部分(共两部分)真正的入门、进阶、实践
2016-04-24 14:04:0410.1.1 优化工具箱常用函数 10.1.2 最优化问题 10.2 线性规划 10.2.1 线性规划函数 10.2.2 线性规划问题的应用 10.3 约束非线性规划 10.3.1 基本数学原理介绍 10.3.2 约束非线性规划函数 10.3.3 ... -
【MATLAB R2014a完全自学一本通】-第一部分(共两部分)真正的入门、提高、实践
2016-04-24 13:24:3810.1.1 优化工具箱常用函数 10.1.2 最优化问题 10.2 线性规划 10.2.1 线性规划函数 10.2.2 线性规划问题的应用 10.3 约束非线性规划 10.3.1 基本数学原理介绍 10.3.2 约束非线性规划函数 10.3.3 ... -
matlab6.5图形图象处理源程序
2010-02-19 16:52:251.2.5 常用的数学函数 1.2.6 数组的运算 1.2.7 数组的扩展 1.2.8 数组的转换 1.2.9 MATLAB 控制语句 1.2.10 其它控制语句 1.2.11 文件操作 1.2.12 M 文件 第二章 MATLAB 图形绘制基础 2.1 二维绘图 2.1.1 ... -
PHP+MYSQL动态网站开发(完整免金币版)
2012-01-04 17:21:24第6章 PHP5常用函数介绍 6.1 PHP5内置函数概述 6.2 数组函数 6.3 字符串处理函数 6.4 时间日期函数 6.5 数学函数 6.6 图像处理函数 6.7 其他函数 第7章 PHP5文件与目录操作 7.1 文件操作 7.2 目录操作 7.3 ... -
精通matlab6.5
2010-04-07 10:27:342.6 执行数组运算的常用函数 2.7 数组运算的矩阵运算 2.8 多项式的表达方式及其操作 2.9 标准数组生成函数和数组操作函数 2.10 数组构作技法综合 2.11 高维数组 2.12 “非数”和“空”数组 2.13 关系操作和逻辑操作 ... -
Matlab2010经典教程-MATLAB2010教程教程.rar
2019-08-13 05:58:25第 4 节 数字信号处理常用Matlab函数简介 17 一、 典型离散信号表示方法 17 二、 滤波器分析与实现 18 三、 信号变换 19 第 5 节 方程求解 19 一、 求解单个变量的代数方程:利用 solve函数 19 二、 ... -
基础教材精通matlab70-《精通matlab7.0(北航 张志涌)》.rar
2019-08-12 19:28:282.6 执行数组运算的常用函数 2.7 数组运算的矩阵运算 2.8 多项式的表达方式及其操作 2.9 标准数组生成函数和数组操作函数 2.10 数组构作技法综合 2.11 高维数组 2.12 “非数”和“空”数组 2.13 关系操作和... -
MATLAB程序设计与典型应用(源程序)
2013-07-04 20:54:16绘制三维曲线的常用函数... 141 5.2.2 三维曲面图绘制... 142 5.2.3 其他三维图形绘制... 146 5.2.4 透明度作图... 147 5.2.5 立体可视化... 148 5.3 图形颜色映像的应用... 151 5.4 光照和材质处理... 153 5.4.1 ... -
《MATLAB优化算法 张岩 吴水根著》源码
2018-06-04 09:34:141.7.3常用函数 1.8复数 1.8.1复数和复矩阵的生成 1.8.2复数的运算 1.9数据类型间的转换 本章小结 第2章MATLAB编程 2.1MATLAB编程概述 2.2MATLAB编程原则 2.3分支结构 2.3.1if分支结构 ... -
MATLAB GUI设计学习手记(罗华飞)【电子书籍+配套程序】
2019-02-28 10:30:394.2.1 句柄式图形对象的常用函数总结 274 4.2.2 Figure对象的几个重要属性 275 4.2.3 Axes对象的几个重要属性 276 4.2.4 Line对象的几个重要属性 277 4.2.5 text对象的几个重要属性 278 4.2.6 uitable对象的几... -
Delphi7.完美经典
2011-09-25 11:44:526-7-4 函数的声明、定义及其实现 6-7-5 参数传递方式 6-7-6 声明修饰字 6-7-7 常用的内建函数 第7章 Object Pascal面向对象设计 7-1 类和对象 7-1-1 类(Class)与对象(Object)的基本概念 7-1-2 对象的构造与... -
你必须知道的495个C语言问题
2015-10-16 14:14:28可我找不到任何方法来声明这样的函数——感觉我需要一个返回指针的函数,返回的指针指向的又是返回指针的函数……,如此往复,以至无穷。 数组大小 1.23 能否声明和传入数组大小一致的局部数组,或者由其他参数指定... -
你必须知道的495个C语言问题(高清版)
2010-03-31 16:24:09可我找不到任何方法来声明这样的函数——感觉我需要一个返回指针的函数,返回的指针指向的又是返回指针的函数……,如此往复,以至无穷。 12 数组大小 13 1.23 能否声明和传入数组大小一致的局部数组,或者由... -
使用正则表达式 - re模块 / compile函数 / group和groups方法 / match方法 / search方法 / findall和finditer方法 / sub和subn方法 / split方法 应用案例 - 使用正则表达式验证输入的字符串 Day13 - 进程和线程 ...
-
《你必须知道的495个C语言问题》
2010-03-20 16:41:18可我找不到任何方法来声明这样的函数——感觉我需要一个返回指针的函数,返回的指针指向的又是返回指针的函数……,如此往复,以至无穷。 12 数组大小 13 1.23 能否声明和传入数组大小一致的局部数组,或者由... -
可视化程序设计(VB)课件_东北大学
2014-05-09 00:34:55掌握VB基本语言、数据类型、常量、变量、常用内部函数、运算符、表达式的概念;掌握基本语句(赋值、用户交互函数和过程,选择结构、循序结构);掌握数组(静态数组、动态数组)的概念、基本操作、应用,以及控件... -
Visual Basic开发实战1200例(第Ⅰ卷).(清华出版.孙秀梅.巩建华).part1
2016-06-14 11:19:422.3 常用的函数与语句 实例024 大小写转换 实例025 程序立即退出 实例026 数字与字符串的转换 实例027 文本字数统计 实例028 一封家书 2.4 条件语句 实例029 使用If语句判断成绩优良 实例030 大了小了猜想 ... -
汇编语言程序设计 第二版
2012-08-12 14:23:0213.4.4 绘画和图像的应用 13.4.5 命令行参数的处理 习题 第十四章 汇编语言编程环境和调试工具 14.1 汇编语言编程环境 14.1.1 MASM 6.1x 14.1.2 Turbo Assembler 14.1.3 MASM32 14.2 调试工具 14.2.1 Debug 14.2.2 ... -
Visual C++ 2008入门经典--详细书签版
2013-02-02 16:07:15◆ 创建和使用常用控件构建应用程序的图形用户界面 ◆ 使用mfc开发库 ◆ 访问数据源的不同控件、控件的工作方式以及定制控件的方法 本书读者对象 本书适用于想学习如何为windows操作系统编写c++程序的初学... -
C#编程经验技巧宝典
2008-06-01 08:59:33119 <br>6.1 网络验证应用技巧 120 <br>0197 如何使用正则表达式验证E-mail格式 120 <br>0198 如何使用正则表达式验证IP地址 120 <br>0199 如何使用正则表达式验证URL 120 <br>6.2 常用数字... -
JavaScript宝典 第6版.part4.ra
2012-04-04 22:13:31第21章 Form及其相关对象419 21.1 对象层次中的表单419 21.2 form对象419 21.2.1 语法420 21.2.2 关于该对象420 21.2.3 引用表单控件420 21.2.4 将表单和元素传递到函数421 21.2.5 用电子邮件传输表单423 21.2.6 ... -
Visual C++ 2008入门经典--源代码及课后练习答案
2013-02-02 16:13:25◆ 创建和使用常用控件构建应用程序的图形用户界面 ◆ 使用mfc开发库 ◆ 访问数据源的不同控件、控件的工作方式以及定制控件的方法 本书读者对象 本书适用于想学习如何为windows操作系统编写c++程序的初学... -
ASP.NET开发实战1200例(第1卷).part2
2016-06-11 20:12:37然后从常用Web服务器控件、ASP.NET安全验证控件、数据绑定控件、Web用户控件和ASP.NET导航控件全面介绍了几乎所有ASP.NET控件应用,接着以AJAX无刷新技术及页面模板设计对ASP.NET客户端进行了详细介绍,最后以高效... -
ASP.NET开发实战1200例(第1卷).part1
2016-06-11 20:07:19然后从常用Web服务器控件、ASP.NET安全验证控件、数据绑定控件、Web用户控件和ASP.NET导航控件全面介绍了几乎所有ASP.NET控件应用,接着以AJAX无刷新技术及页面模板设计对ASP.NET客户端进行了详细介绍,最后以高效... -
ASP.NET开发实战1200例(第1卷).part3
2016-06-11 20:19:00然后从常用Web服务器控件、ASP.NET安全验证控件、数据绑定控件、Web用户控件和ASP.NET导航控件全面介绍了几乎所有ASP.NET控件应用,接着以AJAX无刷新技术及页面模板设计对ASP.NET客户端进行了详细介绍,最后以高效...
-
抛砖引玉:一种改善微信云开发 , 开发者体验的思路
-
斜光轴数字强度相关计量的像模糊容限
-
cadence_allegro_查看dra文件所用pad_查看封装文件用的引脚列表
-
C52-源码
-
scrapy_pipelines.py
-
关于计算机学习的一些思考
-
06-NDK开发简介
-
智能停车场云平台(附vue+SpringBoot前后端项目源码)
-
榕树网络的互连矩阵与模拟研究
-
DevOps,不是一个传说!
-
mac 配置php-fpm
-
Qt调用libVLC实现播放器
-
紫外区全角度光子晶体反射镜
-
百瓦级全光纤线偏振激光振荡器
-
细节让网页设计与众不同
-
软考高级、高项、信息系统项目管理师科普篇
-
让IT与SOA解决方案中的卫生信息交换需求保持一致
-
MxsDoc运行环境(Windows)
-
access应用的3个开发实例
-
在 Linux 上构建企业级 DNS 域名解析服务