PS:以下图有标注错误,红色都是原函数,蓝色都是导函数

激活函数(activation functions)的目标是,将神经网络非线性化。激活函数是连续的(continuous),且可导的(differential)。

  • 连续的:当输入值发生较小的改变时,输出值也发生较小的改变;
  • 可导的:在定义域中,每一处都是存在导数;

sigmoid

sigmoid是平滑(smoothened)的阶梯函数(step function),可导(differentiable)。sigmoid可以将任何值转换为0~1概率,用于二分类。细节:Sigmoid 算法 - 简书

图(蓝色原函数,红色导函数):

当使用sigmoid作为激活函数时,随着神经网络隐含层(hidden layer)层数的增加,训练误差反而加大。表现为:

  1. 靠近输出层的隐含层梯度较大,参数更新速度快,很快就会收敛;
  2. 靠近输入层的隐含层梯度较小,参数更新速度慢,几乎和初始状态一样,随机分布;
  3. 在含有四个隐藏层的网络结构中,第一层比第四层慢了接近100倍!

这种现象就是梯度弥散(vanishing gradient)。而另一种情况,梯度爆炸(exploding gradient),则是前面层的梯度,通过训练变大,导致后面层的梯度,以指数级增大。

由于sigmoid的导数值小于1/4,x变化的速率要快于y变化的速率,随着层数的增加,连续不断执行sigmoid函数,就会导致,前面更新较大的幅度,后面更新较小的幅度,因此,网络在学习过程中,更倾向于,更新后面(靠近输出层)的参数,而不是前面的参数(靠近输入层)。

sigmoid缺点:

  • 激活函数的计算量较大,在反向传播中,当求误差梯度时,求导涉及除法;
  • 在反向传播中,容易就会出现梯度消失,无法完成深层网络的训练;
  • 函数的敏感区间较短,(-1,1)之间较为敏感,超过区间,则处于饱和状态,

梯度弥散与梯度爆炸:梯度弥散与梯度爆炸 - Peter-Young - 博客园

tanh

tanh,即双曲正切(hyperbolic tangent),类似于幅度增大sigmoid,将输入值转换为-1至1之间。tanh的导数取值范围在0至1之间,优于sigmoid的0至1/4,在一定程度上,减轻了梯度消失的问题。tanh的输出和输入能够保持非线性单调上升和下降关系,符合BP(back propagation)网络的梯度求解,容错性好,有界。

sigmoid和tanh:

  • sigmoid在输入处于[-1,1]之间时,函数值变化敏感,一旦接近或者超出区间就失去敏感性,处于饱和状态,影响神经网络预测的精度值;
  • tanh的变化敏感区间较宽,导数值渐进于0、1,符合人脑神经饱和的规律,比sigmoid函数延迟了饱和期;
  • tanh在原点附近与y=x函数形式相近,当激活值较低时,可以直接进行矩阵运算,训练相对容易;
  • tanh和sigmoid都是全部激活(fire),使得神经网络较重(heavy)。

在神经网络中,激活函数sigmoid和tanh除了阈值取值外有什么不同吗:在神经网络中,激活函数sigmoid和tanh除了阈值取值外有什么不同吗? - 知乎

relu

relu,即Rectified Linear Unit,整流线性单元,激活部分神经元,增加稀疏性,当x小于0时,输出值为0,当x大于0时,输出值为x.

relu对比于sigmoid:

  • sigmoid的导数,只有在0附近,具有较好的激活性,而在正负饱和区的梯度都接近于0,会造成梯度弥散;而relu的导数,在大于0时,梯度为常数,不会导致梯度弥散。
  • relu函数在负半区的导数为0 ,当神经元激活值进入负半区,梯度就会为0,也就是说,这个神经元不会被训练,即稀疏性;
  • relu函数的导数计算更快,程序实现就是一个if-else语句;而sigmoid函数要进行浮点四则运算,涉及到除法;

relu的缺点:

在训练的时候,ReLU单元比较脆弱并且可能“死掉”。举例来说,当一个很大的梯度,流过ReLU的神经元的时候,可能会导致梯度更新到一种特别的状态,在这种状态下神经元将无法被其他任何数据点再次激活。如果这种情况发生,那么从此流过这个神经元的梯度将都变成0。也就是说,这个ReLU单元在训练中将不可逆转的死亡,因为这导致了数据多样化的丢失。如果学习率设置得太高,可能会发现网络中40%的神经元都会死掉(在整个训练集中这些神经元都不会被激活)。通过合理设置学习率,这种情况的发生概率会降低。在神经网络中,隐含层的激活函数,最好选择ReLU。

RNN中为什么选择tanh,而不是relu:RNN 中为什么要采用 tanh,而不是 ReLU 作为激活函数? - 知乎

激活函数 sigmoid、tanh、relu相关推荐

  1. 三种激活函数——Sigmoid,Tanh, ReLU以及卷积感受野的计算

    1. 三种激活函数--Sigmoid, Tanh, ReLU 1.1 Sigmoid 1.1.1 公式 S ( x ) = 1 1 + e − x S(x) = \frac{1}{1 + e^{-x} ...

  2. 激活函数--Sigmoid,tanh,RELU,RELU6,Mish,Leaky ReLU等

    激活函数 目前自己使用比较多的激活函数RELU, RELU6; LeakyReLU; SELU; Mish :激活函数看:计算量:准确率: 大多数激活函数pytorch里有已经包装好了: Non-li ...

  3. 【Pytorch神经网络理论篇】 07 激活函数+Sigmoid+tanh+ReLU+Swish+Mish+GELU

    ①激活函数:主要通过加入非线性因素,你不线性模型表达能力不足的缺陷,因为神经网络中的数学基础是处处可微分的函数,故要求激活函数也应该保证数据的输入与输出是可微分. ②激活函数可以分为饱和激活函数与不饱 ...

  4. DL之DNN优化技术:采用三种激活函数(sigmoid、relu、tanh)构建5层神经网络,权重初始值(He参数初始化和Xavier参数初始化)影响隐藏层的激活值分布的直方图可视化

    DL之DNN优化技术:采用三种激活函数(sigmoid.relu.tanh)构建5层神经网络,权重初始值(He参数初始化和Xavier参数初始化)影响隐藏层的激活值分布的直方图可视化 目录

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

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

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

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

  7. 常用的激活函数汇总-Sigmoid, tanh, relu, elu

    激活函数(又叫激励函数,后面就全部统称为激活函数)是模型整个结构中的非线性扭曲力,神经网络的每层都会有一个激活函数.那他到底是什么,有什么作用?都有哪些常见的激活函数呢? 深度学习的基本原理就是基于人 ...

  8. Matlab绘制激活函数sigmoid,Relu

    激活函数主要是神经网络中用到,它的公式为: 下面用matlab来绘制一下 clc clear all x = linspace(-10.0,10.0); % 设置x范围为-10到10 sigmoid ...

  9. 常用的激活函数sigmoid,relu,tanh

    1.什么是激活函数? 在神经网络中,我们经常可以看到对于某一个隐藏层的节点,该节点的激活值计算一般分为两部: (1)输入该节点的值为x1,x2时,在进入这个隐藏节点后,会先进行一个线性变换,计算出值z ...

  10. 常见激活函数持续更新)sigmoid Tanh Relu Leaky-ReLU RReLU

     激活函数是来向神经网络中引入非线性因素的,通过激活函数,神经网络就可以拟合各种曲线. sigmoid 公式: 函数图像:  Sigmoid函数也叫 Logistic 函数,用于隐层神经元输出,取值范 ...

最新文章

  1. linux下 为自己编写的程序 添加tab自动补全 功能
  2. 7-flutter Navigator 和Route
  3. 斯坦福CS231n项目实战(四):浅层神经网络
  4. Java内存泄露和内存溢出、JVM命令行工具、.JDK可视化工具、Java Class文件
  5. 关闭 启动_Steam如何关闭开机自动启动
  6. 关于MyAccount无法在standalone环境下运行的问题
  7. C/C++学习笔记:C语言实现任意进制转换,代码全解析!
  8. Windows内置系统账户Local system/Network service/Local Service
  9. 明知 | TypeScript 结合 egg.js 基本使用
  10. 持续集成和持续部署CI/CD简介
  11. php与硬件通过wifi对接,基于ESP8266的WiFi排插接入贝壳互联实现天猫精灵控制
  12. 生产者消费者模式-Java实现
  13. NSA机密文件泄密者如何暴露身份
  14. latex 首行不缩进,第二行开始缩进,悬挂缩进的LaTeX实现
  15. nc63文件服务器,nc命令传输文件
  16. selenium录屏python_Selenium实现录屏的一种方法
  17. S3C2440时钟体系 - SOC裸机
  18. 小学计算机教师集体备课计实,小学科学集体备课记录(年.doc
  19. 【读书笔记】《能力陷阱》——改变思想从行动开始
  20. 2014 android 新技术,向友商学习 Android 12新功能前瞻:似曾相识

热门文章

  1. [Linux-进程控制] 进程创建进程终止进程等待进程程序替换简易shell
  2. 逆水寒江湖无限服务器等级,逆水寒·如何看待:开设服务器技能等级上限
  3. 回顾CGU2016都干了些什么大事!
  4. MySQL表结构导出
  5. html 表格中的链接,html – 如何在表格单元格中自动换行链接,以便它不会破坏表格的流程?...
  6. AndroidTV开发13——实现TV端大图浏览
  7. 关于redis缓存总结
  8. 转:oracle-ora 各种sql异常描述以及ora返回值意思
  9. 蝙蝠算法的matlab程序,经典蝙蝠算法MATLAB实现
  10. 局域网 一个机器ping不通另一个机器的虚拟机的ip 怎么解决