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

sigmod函数:

Relu函数:

综合:

@作者:约翰曰不约

为什么通常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的位置会有更好的效果。大家有兴趣可以看下。



本文转自 stock0991 51CTO博客,原文链接:http://blog.51cto.com/qing0991/1940179

ReLU为什么比Sigmoid效果好相关推荐

  1. 神经网络激活函数sigmoid relu tanh 为什么sigmoid 容易梯度消失

    什么是激活函数 为什么要用 都有什么 sigmoid ,ReLU, softmax 的比较 如何选择 1. 什么是激活函数 如下图,在神经元中,输入的 inputs 通过加权,求和后,还被作用了一个函 ...

  2. relu激活函数对比sigmoid的优势

    1. 为什么要激活函数 原理上来说,神经网络模型的训练过程其实就是拟合一个数据分布(x)可以映射到输出(y)的数学函数,即 y= f(x).拟合效果的好坏取决于数据质量及模型的结构,像逻辑回归.感知机 ...

  3. 神经网络为什么要使用激活函数,为什么relu要比sigmoid要好

    第一个问题:为什么引入非线性激励函数? 如果不用激励函数(其实相当于激励函数是f(x) = x),在这种情况下你每一层输出都是上层输入的线性函数,很容易验证,无论你神经网络有多少层,输出都是输入的线性 ...

  4. ReLU函数 Vs Sigmoid 函数——XOR问题究竟用那个好

    文章目录 前言 先看问题 一.什么是激活函数(输出层中还叫激活函数吗)? 二.各个激活函数适合的情况 1.无激活函数(恒等激活函数) 2.S型曲线,例如 Sigmoid 3.线性整流函数(Rectif ...

  5. Relu激活函数、sigmoid

    ReLU函数把负值都变为0,正值不变. sigmoid函数是一个阀值函数,不管x取什么值,对应的sigmoid函数值总是∈(0,1)

  6. Relu函数,sigmoid函数,leaky Relu

    Relu函数: y=max(0,x) 蓝色为Relu函数,红色曲线为Relu函数的导数. 优点: 1.在正区间内不会发生梯度消失问题, 2. 函数比较简单,求导计算复杂度较低. 3. 梯度能维持在不错 ...

  7. 为什么引入ReLU激活函数

    https://blog.csdn.net/fredinators/article/details/79443386 ReLu是神经网络中的一个激活函数,其优于tanh和sigmoid函数. 1.为何 ...

  8. 大厂必考深度学习算法面试题

    一,滤波器与卷积核 二,卷积层和池化输出大小计算 2.1,CNN 中术语解释 2.2,卷积输出大小计算(简化型) 2.3,理解边界效应与填充 padding 参考资料 三,深度学习框架的张量形状格式 ...

  9. 大厂必考深度学习面试题及参考答案

    目录 一,滤波器与卷积核 二,卷积层和池化输出大小计算 2.1,CNN 中术语解释 2.2,卷积输出大小计算(简化型) 2.3,理解边界效应与填充 padding 参考资料 三,深度学习框架的张量形状 ...

最新文章

  1. 独家 | 人工神经网络中发现了人类大脑拥有的多模态神经元(附链接)
  2. 浏览器左上角的网站图标
  3. CommunityServer 2.0 RTM时间是:2006-02-17 --Scott Watermasysk今天中午
  4. salesforce 零基础学习(六十二)获取sObject中类型为Picklist的field values(含record type)...
  5. 使用Tornado实现Ajax请求
  6. php paypal订单号查询,php – 在交易后从PayPal获取信息
  7. java 设置pdf 编码格式_Java如何设置PDF文档背景色详解
  8. React组件实现越级传递属性
  9. 1064金明的预算方案
  10. .NET Framework3.0答疑
  11. Java基础学习总结(90)——Java单元测试技巧
  12. MATLAB实现PCA(主成分分析)
  13. Java hashCode() 和 equals()的若干问题解答
  14. 一个amp;quot;现象级amp;quot;大数据公司的蜕变
  15. linux虚拟机 dnw,在Linux下安装DNW
  16. Stream Collectors - reducing
  17. Linux—常用十大命令
  18. 最新域名防红系统源码+实战搭建视频教程
  19. Archlinux中pacman,yaourt的常用用法
  20. 浅聊一下Java中的char类型

热门文章

  1. PostgreSQL增强版命令行客户端(pgcli)
  2. navicat的安装
  3. 程序实践:命令行之连连看
  4. JVM:如何分析线程堆栈
  5. android 小工具:pc 上用 curl 命令打开手机浏览器,浏览指定网址
  6. 摩托罗拉周二将正式分拆为两经营实体
  7. How to: Display a Gradient Fill
  8. 段错误产生原因及简单的调试方法
  9. python后缀名切割_python批量将.xls转化为.xlsx,包括文件名和后缀分割
  10. 中兴f650 2.0.3 固件降级_手机资讯:如何升级iOS12.1.4正式版iOS12.1.4正式版升降级教程...