不同激活函数的区别

sigmoid

  • 容易出现gradient vanishing
  • 函数输出并不是zero-centered
  • 幂运算相对来讲比较耗时

Gradient Vanishing

优化神经网络的方法是Back Propagation,即导数的后向传递:先计算输出层对应的loss,然后将loss以导数的形式不断向上一层网络传递,修正相应的参数,达到降低loss的目的。 Sigmoid函数在深度网络中常常会导致导数逐渐变为0,使得参数无法被更新,神经网络无法被优化。

原因在于两点:

  • 在上图中容易看出,当中较大或较小时,导数接近0,而后向传递的数学依据是微积分求导的链式法则,当前层的导数需要之前各层导数的乘积,几个小数的相乘,结果会很接近0
  • Sigmoid导数的最大值是0.25,这意味着导数在每一层至少会被压缩为原来的1/4,通过两层后被变为1/16,…,通过10层后为1/1048576。请注意这里是“至少”,导数达到最大值这种情况还是很少见的。

输出不是zero-centered

Sigmoid函数的输出值恒大于0,这会导致模型训练的收敛速度变慢。

举例来讲,对,如果所有均为正数或负数,那么其对的导数总是正数或负数,这会导致如下图红色箭头所示的阶梯式更新,这显然并非一个好的优化路径。深度学习往往需要大量时间来处理大量数据,模型的收敛速度是尤为重要的。所以,总体上来讲,训练深度学习网络尽量使用zero-centered数据 (可以经过数据预处理实现) 和zero-centered输出。

tanh

解决了sigmoid中的zero-centered的输出问题

Relu

有以下几大优点:

  • 解决了gradient vanishing问题 (在正区间)
  • 计算速度非常快,只需要判断输入是否大于0
  • 收敛速度远快于sigmoid和tanh

ReLU也有几个需要特别注意的问题:

  • ReLU的输出不是zero-centered
  • Dead ReLU Problem,指的是某些神经元可能永远不会被激活,导致相应的参数永远不能被更新。有两个主要原因可能导致这种情况产生: (1) 非常不幸的参数初始化,这种情况比较少见 (2) learning rate太高导致在训练过程中参数更新太大,不幸使网络进入这种状态。解决方法是可以采用Xavier初始化方法,以及避免将learning rate设置太大或使用adagrad等自动调节learning rate的算法。
时间: 2024-10-13 06:27:02

不同激活函数的区别的相关文章

机器学习必备手册

机器学习是计算机科学的一个子领域,在人工智能领域,机器学习逐渐发展成模式识别和计算科学理论的研究.从2016年起,机器学习到达了不合理的火热巅峰.但是,有效的机器学习是困难的,因为机器学习本身就是一个交叉学科,没有科学的方法及一定的积累很难入门. 如果你也想学习机器学习或者正在学习机器学习,本手册一定会帮助你走向你自己的"人生巅峰".手册包含如何入门机器学习,机器学习流行算法,机器学习实战等等. 一.机器学习入门篇: 1.让你少走弯路:这有一份开展机器学习的简短指南 摘要:本文分享了一

caffe中的Local Response Normalization (LRN)有什么用,和激活函数区别

http://stats.stackexchange.com/questions/145768/importance-of-local-response-normalization-in-cnn caffe 解释: The local response normalization layer performs a kind of “lateral inhibition” by normalizing over local input regions.双边抑制.看起来就像是激活函数 几种解释以上链

浅谈caffe中train_val.prototxt和deploy.prototxt文件的区别

本文以CaffeNet为例: 1. train_val.prototxt 首先,train_val.prototxt文件是网络配置文件.该文件是在训练的时候用的. 2.deploy.prototxt 该文件是在测试时使用的文件. 区别: 首先deploy.prototxt文件都是在train_val.prototxt文件的基础上删除了一些东西,所形成的. 由于两个文件的性质,train_val.prototxt文件里面训练的部分都会在deploy.prototxt文件中删除. 在train_va

神经网络中各种激活函数比较

ReLU 激活函数: ReLu使得网络可以自行引入稀疏性,在没做预训练情况下,以ReLu为激活的网络性能优于其它激活函数. 数学表达式: $y = max(0,x)$ Sigmoid 激活函数: sigmoid 激活函数在神经网络学习方面,可以将重点特征推向中央区,将非重点特征推向两侧区. 数学表达式: $y = (1 + exp(-x))^{-1}$ Tanh 激活函数: Tanh 激活函数使得输出与输入的关系能保持非线性单调上升和下降关系,比sigmoid 函数延迟了饱和期,对神经网路的容错

cnn 网络模型中train_val.prototxt与deploy.prototxt文件的区别与转换

本文以CaffeNet为例进行说明: 1. train_val.prototxt 首先,train_val.prototxt文件是网络配置文件.该文件是在训练的时候用的. 2.deploy.prototxt 该文件是在测试时使用的文件. 区别: 首先deploy.prototxt文件都是在train_val.prototxt文件的基础上删除了一些东西,所形成的. 由于两个文件的性质,train_val.prototxt文件里面训练的部分都会在deploy.prototxt文件中删除. (1)在t

TensorFlow基础(三)激活函数

(1)激活函数 激活函数(Activation function)并不是指这个函数去激活什么,而是指如何把"激活的神经元的特征"通过函数把特征保留映射出来.对输入信息进行非线性变换. 线性模型的最大特点是任意线性模型的组合仍然还是线性模型.只通过线性模型,任意层的全连接神经网络和单层神经网络模型的表达能力没有任何区别.线性模型最大的局限性是表达能力不够,解决的问题有限.线性模型就能解决线性可分问题. 常用激活函数 1)sigmoid函数(曲线很像"S"型) 公式:

常用激活函数比较

本文结构: 什么是激活函数 为什么要用 都有什么 sigmoid.ReLU.softmax的比较 如何选择 1. 什么是激活函数 如下图,在神经元中,输入的inputs通过加权,求和后,还被作用了一个函数,这个函数就是激活函数 Activation Function. 2. 为什么用 如果不用激励函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合. 如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众

尝试理解神经网络中的激活函数

激活函数引用:https://www.cnblogs.com/ms-uap/p/9962978.html 首先,单个神经元是长这样的: 也就是,当A=σ(Z)=Z时,不使用激活函数的话,那么,单个神经网络,输出只能是A = ΣWX + b 1. 从训练数据来理解.(参考:https://blog.csdn.net/weixin_38275649/article/details/80340538) 假如我们的神经网络,仅仅是一个单细胞的神经元 联想我们的样本,例如在做图片识别的时候,通常来说,训练

一文告诉你Adam、AdamW、Amsgrad区别和联系 重点

**序言:**Adam自2014年出现之后,一直是受人追捧的参数训练神器,但最近越来越多的文章指出:Adam存在很多问题,效果甚至没有简单的SGD + Momentum好.因此,出现了很多改进的版本,比如AdamW,以及最近的ICLR-2018年最佳论文提出的Adam改进版Amsgrad.那么,Adam究竟是否有效?改进版AdamW.Amsgrad与Adam之间存在什么联系与区别?改进版是否真的比Adam更好呢?相信这篇文章将会给你一个清晰的答案. (内容翻译整理自网络) Adam Roller