https://blog.csdn.net/fredinators/article/details/79443386

ReLu是神经网络中的一个激活函数,其优于tanh和sigmoid函数。

1.为何引入非线性的激活函数?

如果不用激活函数,在这种情况下每一层输出都是上层输入的线性函数。容易验证,无论神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,这种情况就是最原始的感知机(Perceptron)了。因此引入非线性函数作为激活函数,这样深层神经网络就有意义了(不再是输入的线性组合,可以逼近任意函数)。最早的想法是sigmoid函数或者tanh函数,输出有界,很容易充当下一层输入。

2.引入ReLu的原因

第一,采用sigmoid等函数,算激活函数时(指数运算),计算量大,反向传播求误差梯度时,求导涉及除法,计算量相对大,而采用Relu激活函数,整个过程的计算量节省很多。

第二,对于深层网络,sigmoid函数反向传播时,很容易就会出现 梯度消失 的情况(在sigmoid接近饱和区时,变换太缓慢,导数趋于0,这种情况会造成信息丢失),从而无法完成深层网络的训练。

第三,ReLu会使一部分神经元的输出为0,这样就造成了 网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生。

ReLU为什么比Sigmoid效果好

https://www.baidu.com/link?url=_8nUvNbssgXjH17oTQTPtpyrRPu5dUtdEZlP5ExFmRohWRW7rCkredXkNkraVTo4UgVzNiAjRpC8MYoOsyxb2q&wd=&eqid=e7677ee500006f9e000000065b7b73a8

附:双曲函数类似于常见的(也叫圆函数的)三角函数。基本双曲函数是双曲正弦"sinh",双曲余弦"cosh",从它们导出双曲正切"tanh"

sigmod函数:

Relu函数:

ReLU函数不可导的情况:

参考:https://www.zhihu.com/question/297337220?utm_source=qq

综合:

@作者:约翰曰不约 

为什么通常Relu比sigmoid和tanh强,有什么不同?
主要是因为它们gradient特性不同。sigmoid和tanh的gradient在饱和区域非常平缓,接近于0,很容易造成vanishing gradient的问题,减缓收敛速度。vanishing gradient在网络层数多的时候尤其明显,是加深网络结构的主要障碍之一。相反,Relu的gradient大多数情况下是常数,有助于解决深层网络的收敛问题。Relu的另一个优势是在生物上的合理性,它是单边的,相比sigmoid和tanh,更符合生物神经元的特征。
而提出sigmoid和tanh,主要是因为它们全程可导。还有表达区间问题,sigmoid和tanh区间是0到1,或着-1到1,在表达上,尤其是输出层的表达上有优势。

@作者:crackhopper,

ReLU更容易学习优化。因为其分段线性性质,导致其前传,后传,求导都是分段线性。而传统的sigmoid函数,由于两端饱和,在传播过程中容易丢弃信息:

@作者:Begin Again

第一个问题:为什么引入非线性激励函数?
如果不用激励函数(其实相当于激励函数是f(x) = x),在这种情况下你每一层输出都是上层输入的线性函数,很容易验证,无论你神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,这种情况就是最原始的感知机(Perceptron)了。
正因为上面的原因,我们决定引入非线性函数作为激励函数,这样深层神经网络就有意义了(不再是输入的线性组合,可以逼近任意函数)。最早的想法是sigmoid函数或者tanh函数,输出有界,很容易充当下一层输入(以及一些人的生物解释balabala)。
第二个问题:为什么引入Relu呢?
第一,采用sigmoid等函数,算激活函数时(指数运算),计算量大,反向传播求误差梯度时,求导涉及除法,计算量相对大,而采用Relu激活函数,整个过程的计算量节省很多。
第二,对于深层网络,sigmoid函数反向传播时,很容易就会出现梯度消失的情况(在sigmoid接近饱和区时,变换太缓慢,导数趋于0,这种情况会造成信息丢失,参见 @Haofeng Li 答案的第三点),从而无法完成深层网络的训练。
第三,Relu会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生(以及一些人的生物解释balabala)。

当然现在也有一些对relu的改进,比如prelu,random relu等,在不同的数据集上会有一些训练速度上或者准确率上的改进,具体的大家可以找相关的paper看。
多加一句,现在主流的做法,会在做完relu之后,加一步batch normalization,尽可能保证每一层网络的输入具有相同的分布[1]。而最新的paper[2],他们在加入bypass connection之后,发现改变batch normalization的位置会有更好的效果。大家有兴趣可以看下。

为什么引入ReLU激活函数相关推荐

  1. 【Pytorch基础教程35】引入非线性的激活函数

    文章目录 一.从最简单的logistic回归说起 二.为什么需要激活功能 三.常见激活函数特点: 3.1 ReLU激活函数 3.2 sigmoid激活函数 3.3 tanh激活函数 3.4 softm ...

  2. ReLU激活函数的特点

    ReLU(Rectified Linear Unit,修正线性单元)函数 1.公式: 可以看出这是个非常简单的函数,大于0部分不变,小于0的值全部压缩成0. 2.优点 ①作为激活函数,计算简单,更加高 ...

  3. 【调参12】ReLU激活函数使用指南

    文章目录 1. 线性整流单元(Rectified Linear Unit, ReLU)简介 1.1 Sigmoid和Tanh激活函数的局限性 1.2 ReLU激活函数 2. ReLU 激活函数的优点 ...

  4. tensorflow中Leaky Relu激活函数

    tensorflow中Leaky Relu激活函数 引用API:tensorflow.nn.leaky_relu(x) Leaky Relu激活函数 Leaky Relu激活函数引入一个固定斜率a,具 ...

  5. 使用opencv dnn 模块调用darknet模型时候出错,不支持relu激活函数

    问题: 使用opencv dnn 模块调用darknet模型时候出错,报错信息为 不支持relu激活函数 以下过程为笔者自己解决该问题的过程,供各位参考学些,因为中间又遇到新的坑,所以各位务必看完再决 ...

  6. 零基础学caffe源码 ReLU激活函数

    零基础学caffe源码 ReLU激活函数 原创 2016年08月03日 17:30:19 1.如何有效阅读caffe源码 1.caffe源码阅读路线最好是从src/cafffe/proto/caffe ...

  7. 【深度学习】ReLU激活函数的缺点

    关于ReLU的详细介绍可以参考: ReLU激活函数 - 知乎 训练的时候很"脆弱",很容易就"die"了,训练过程该函数不适应较大梯度输入,因为在参数更新以后, ...

  8. 【激活函数】ReLU激活函数的思考

    优点: a. 克服梯度消失的问题 b. 加快训练速度 缺点: a. 0 点连续不可导(直上直下),梯度下降过程中不那么流畅. b. ReLU 只有正值,没有负值,bp 时有 zigzag 现象, 容易 ...

  9. input自适应_一种Dynamic ReLU:自适应参数化ReLU激活函数(调参记录13)

    自适应参数化ReLU,本身就是一种动态的ReLU(Dynamic ReLU,Dy-ReLU).该论文在2019年5月的时候,投稿到IEEE Transactions on Industrial Ele ...

最新文章

  1. 调包侠福音!机器学习经典算法开源教程(附参数详解及代码实现)
  2. 正则 -12至+14 闭区间,小数位只能是(0.25,0.5,0.50,0.75,0.0,0.00) 前面的正负符号可选...
  3. C#7.0连接MySQL8.0数据库的小笔记
  4. Sublime Text 2.0.1 版本 Build 2217 汉化包
  5. MySQL数据库引擎详解
  6. index.html图片弹窗,原生javascript实现图片弹窗交互效果
  7. base 镜像 - 每天5分钟玩转容器技术(10)
  8. 已知两点坐标如何快速增加其他坐标_「测绘精选」坐标转换概述
  9. Socket编程实践(5) --TCP粘包问题与解决
  10. [日常] 算法-单链表的创建-尾插法
  11. 如何更改计算机安全策略设置,用批处理更改本地安全策略
  12. 计算广告学中的GFP、GSP和VCG对比
  13. 「ZigBee模块」基础实验(4)定时器T1的简单应用
  14. Cortex m0+笔记
  15. 振作起来,开始认真搞了
  16. 建立自己的封装库(一)
  17. Windows系统下安装配置 MinGW-w64 开发环境
  18. 基于Java+JSP+MySQL基于SSM的医院挂号就诊系统
  19. Linux 安装apr-util
  20. Win10 平板 关闭屏幕不休眠 平板电源键 锁屏 程序

热门文章

  1. Linux---Samba服务器配置
  2. 巧妙运用递归实现字符串的倒序输出
  3. KSQLException: A CallableStatement was executed with nothing returned.
  4. 【数学】两根距离公式
  5. Gorm之Tag标签用法详解
  6. oracle 12c sql图形化,Oracle 12c 查看CDBPDBs信息(SQL*PLUS)
  7. 如何构建内部开发者门户:企业参考指南
  8. ONLYOFFICE 文档云服务进入市场
  9. 你可曾拥有过存钱罐(迭代器模式)
  10. 开源项目 rails4scm 软件配置管理