激活函数是什么

激活函数是人工神经网络的一个极其重要的特征;激活函数决定一个神经元是否应该被激活,激活代表神经元接收的信息与给定的信息有关;激活函数对输入信息进行非线性变换,然后将变换后的输出信息作为输入信息传给下一层神经元。

激活函数的作用

如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,最终的输出都是输入的线性组合。 激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数。

激活函数的种类

Identity

identity 适合于潜在行为是线性(与线性回归相似)的任务。但是无法提供非线性映射,当多层网络使用identity 激活函数时,整个网络就相当于一个单层模型。

函数的定义为 f(x)=xf(x)=xf(x)=x,导数为 f′(x)=1{ f }^{ ' }(x)=1f′(x)=1。

Step

激活函数 Step 更倾向于理论而不是实际,它模仿了生物神经元要么全有要么全无的属性。但是它无法应用于神经网络因为其导数是 0(除了零点导数无定义以外),这意味着基于梯度的优化方法并不可行。

函数的定义为 f(x)={0x<01x≥0{ f }(x)= \begin{cases} \begin{matrix} 0 & x<0 \end{matrix} \\ \begin{matrix} 1 & x\ge 0 \end{matrix} \end{cases}f(x)={0​x<0​1​x≥0​​,导数为 f′(x)={0x≠0?x=0{ f }^{ ' }(x)=\begin{cases} \begin{matrix} 0 & x\neq 0 \end{matrix} \\ \begin{matrix} ? & x=0 \end{matrix} \end{cases}f′(x)={0​x=0​?​x=0​​。

Sigmoid

sigmoid 函数的输出映射在 (0,1) 之间,单调连续,输出范围有限,优化稳定,可以用作输出层;而且求导容易。但由于其软饱和性,一旦落入饱和区梯度就会接近于0,根据反向传播的链式法则,容易产生梯度消失,导致训练出现问题;Sigmoid函数的输出恒大于0。非零中心化的输出会使得其后一层的神经元的输入发生偏置偏移(Bias Shift),并进一步使得梯度下降的收敛速度变慢;而且计算时,由于具有幂运算,计算复杂度较高,运算速度较慢。

函数的定义为 f(x)=σ(x)=11+e−x{ f }(x)=\sigma (x)=\displaystyle \frac { 1 }{ 1+{ e }^{ -x } }f(x)=σ(x)=1+e−x1​,导数为 f′(x)=e−x(1+e−x)2=f(x)(1−f(x)){ f }^{ ' }(x)=\displaystyle \frac {e^{-x}} {(1+e^{-x})^2}=f(x)(1-f(x))f′(x)=(1+e−x)2e−x​=f(x)(1−f(x))。

Tanh

tanh 比 sigmoid 函数收敛速度更快,相比 sigmoid 函数,tanh 是以 0 为中心的。但与 sigmoid 函数相同,由于饱和性容易产生的梯度消失,由于具有幂运算,计算复杂度较高,运算速度较慢。

函数的定义为 f(x)=tanh(x)=ex−e−xex+e−x{ f }(x)=tanh(x)=\displaystyle \frac { { e }^{ x }-{ e }^{ -x } }{ { e }^{ x }+{ e }^{ -x } }f(x)=tanh(x)=ex+e−xex−e−x​,导数为 f′(x)=1−tanh2(x)=1−f(x)2{ f }^{ ' }(x)=1-tanh^2(x)=1-f(x)^{ 2 }f′(x)=1−tanh2(x)=1−f(x)2。

ReLU

ReLU函数收敛速度快,相较于 sigmoid 和 tanh 中涉及了幂运算,导致计算复杂度高, ReLU​可以更加简单的实现;当输入 x>=0 时,ReLU​ 的导数为常数,这样可有效缓解梯度消失问题;当 x<0 时,ReLU​ 的梯度总是 0,提供了神经网络的稀疏表达能力。但 ReLU​ 的输出不是以 0 为中心的;而且神经元坏死现象,某些神经元可能永远不会被激活,导致相应参数永远不会被更新,不能避免梯度爆炸问题。

函数的定义为 f(x)={0x<0xx≥0f(x)=\begin{cases} \begin{matrix} 0 & x<0 \end{matrix} \\ \begin{matrix} x & x\ge 0 \end{matrix} \end{cases}f(x)={0​x<0​x​x≥0​​,导数为 f′(x)={0x<01x≥0{ { f '}(x) }=\begin{cases} \begin{matrix} 0 & x<0 \end{matrix} \\ \begin{matrix} 1 & x\ge 0 \end{matrix} \end{cases}f′(x)={0​x<0​1​x≥0​​

LReLU

LReLU激活函数可以避免梯度消失,由于导数总是不为零,因此可减少死神经元的出现;但是LReLU​ 表现并不一定比 ReLU​ 好,而且无法避免梯度爆炸问题。

函数的定义为 f(x)={αxx<0xx≥0f(x)=\begin{cases} \begin{matrix} \alpha x & x<0 \end{matrix} \\ \begin{matrix} x & x\ge 0 \end{matrix} \end{cases}f(x)={αx​x<0​x​x≥0​​,导数为 f(x)′={αx<01x≥0{ { f }(x) }^{ ' }=\begin{cases} \begin{matrix} \alpha & x<0 \end{matrix} \\ \begin{matrix} 1 & x\ge 0 \end{matrix} \end{cases}f(x)′={α​x<0​1​x≥0​​。

PReLU

PReLU​ 是 LReLU 的改进,可以自适应地从数据中学习参数,而且收敛速度快、错误率低,PReLU 可以用于反向传播的训练,可以与其他层同时优化。

函数的定义为 f(α,x)={αxx<0xx≥0f(\alpha ,x)=\begin{cases} \begin{matrix} \alpha x & x<0 \end{matrix} \\ \begin{matrix} x & x\ge 0 \end{matrix} \end{cases}f(α,x)={αx​x<0​x​x≥0​​,函数的导数为 f′(α,x)={αx<01x≥0{ { f' }(\alpha ,x) }=\begin{cases} \begin{matrix} \alpha & x<0 \end{matrix} \\ \begin{matrix} 1 & x\ge 0 \end{matrix} \end{cases}f′(α,x)={α​x<0​1​x≥0​​。

RReLU

RReLU 为负值输入添加了一个线性项,这个线性项的斜率在每一个节点上都是随机分配的(通常服从均匀分布)。

函数的定义为 f(α,x)={αxx<0xx≥0f(\alpha ,x)=\begin{cases} \begin{matrix} \alpha x & x<0 \end{matrix} \\ \begin{matrix} x & x\ge 0 \end{matrix} \end{cases}f(α,x)={αx​x<0​x​x≥0​​,导数为 f(α,x)′={αx<01x≥0{ { f }(\alpha ,x) }^{ ' }=\begin{cases} \begin{matrix} \alpha & x<0 \end{matrix} \\ \begin{matrix} 1 & x\ge 0 \end{matrix} \end{cases}f(α,x)′={α​x<0​1​x≥0​​。

ELU

ELU 导数收敛为零,从而提高学习效率。使用 ELU 能得到负值输出,这能帮助网络向正确的方向推动权重和偏置变化,而且还可以防止死神经元出现。但是由于计算量大,其表现并不一定比 ReLU 好,而且无法避免梯度爆炸问题。

函数的定义为 f(α,x)={α(ex−1)x<0xx≥0f(\alpha ,x)=\begin{cases} \begin{matrix} \alpha \left( { e }^{ x }-1 \right) & x<0 \end{matrix} \\ \begin{matrix} x & x\ge 0 \end{matrix} \end{cases}f(α,x)={α(ex−1)​x<0​x​x≥0​​,其导数为 f′(α,x)={f(α,x)+αx<01x≥0{ { f' }(\alpha ,x) }^{ }=\begin{cases} \begin{matrix} f(\alpha ,x)+\alpha & x<0 \end{matrix} \\ \begin{matrix} 1 & x\ge 0 \end{matrix} \end{cases}f′(α,x)={f(α,x)+α​x<0​1​x≥0​​。

SELU

SELU 是 ELU 的一个变种。经过该激活函数后使得样本分布自动归一化到 0 均值和单位方差,而且不会出现梯度消失或爆炸问题。

函数的定义为 f(α,x)=λ{α(ex−1)x<0xx≥0f(\alpha ,x)=\lambda \begin{cases} \begin{matrix} \alpha \left( { e }^{ x }-1 \right) & x<0 \end{matrix} \\ \begin{matrix} x & x\ge 0 \end{matrix} \end{cases}f(α,x)=λ{α(ex−1)​x<0​x​x≥0​​,导数为 f′(α,x)=λ{α(ex)x<01x≥0{ { f' }(\alpha ,x) }^{ }=\lambda \begin{cases} \begin{matrix} \alpha \left( { e }^{ x } \right) & x<0 \end{matrix} \\ \begin{matrix} 1 & x\ge 0 \end{matrix} \end{cases}f′(α,x)=λ{α(ex)​x<0​1​x≥0​​。其中 λλλ 和 ααα 是固定数值(分别为 1.0507 和 1.6726)。

Softsign

softsign 是 tanh 激活函数的另一个替代选择,softsign 是反对称、去中心、可微分,并返回 −1 和 1 之间的值,而且softsign 更平坦的曲线与更慢的下降导数表明它可以更高效地学习。但是导数的计算比tanh 更麻烦。

函数的定义为 f(x)=x∣x∣+1f(x)=\displaystyle \frac { x }{ \left| x \right| +1 }f(x)=∣x∣+1x​,导数为 f′(x)=1(1+∣x∣)2{ f }^{ ' }(x)=\displaystyle \frac { 1 }{ { (1+\left| x \right| ) }^{ 2 } }f′(x)=(1+∣x∣)21​。

Softplus

softplus 作为 relu 的一个不错的替代选择,能够返回任何大于 0 的值。与 relu 不同,softplus 的导数是连续的、非零的,无处不在,从而防止出现死神经元。但是导数常常小于 1 ,也可能出现梯度消失的问题。softplus 另一个不同于 relu 的地方在于其不对称性,不以零为中心,可能会妨碍学习。

函数的定义为 f(x)=ln⁡(1+ex)f(x)=\ln { (1+{ e }^{ x }) }f(x)=ln(1+ex),函数的导数为 f′(x)=11+e−x{ f }^{ ' }(x)=\displaystyle \frac { 1 }{ 1+{ e }^{ -x } }f′(x)=1+e−x1​。

Softmax

softmax 函数一般用于多分类问题中,它是对逻辑斯蒂(logistic)回归的一种推广,也被称为多项逻辑斯蒂回归模型(multi-nominal logistic mode)。假设要实现 kkk 个类别的分类任务,Softmax 函数将输入数据 xix_ixi​ 映射到第 iii 个类别的概率 yiy_iyi​ 如下计算:yi=softmax⁡(xi)=exi∑j=1kexjy_i=soft\max \left( x_i \right) =\frac{e^{x_i}}{\sum_{j=1}^k{e^{x_j}}}yi​=softmax(xi​)=∑j=1k​exj​exi​​显然,0<yi<10<y_i<10<yi​<1。

Swish

对于Swish函数而言,当 x>0 时,不存在梯度消失的情况;当 x<0 时,神经元也不会像 ReLU 一样出现死亡的情况。swish 处处可导,连续光滑,而且 swish 并非一个单调的函数。使用 swish 可以提升模型的性能,但是 swish 计算量大。

函数的定义为 f(x)=x⋅σ(x)f\left( x \right) =x\cdot \sigma \left( x \right)f(x)=x⋅σ(x),导数为f′(x)=f(x)+σ(x)(1−f(x))\begin{array}{c} f^{'}\left( x \right) =f\left( x \right) +\sigma \left( x \right) \left( 1-f\left( x \right) \right)\\ \end{array}f′(x)=f(x)+σ(x)(1−f(x))​。其中 σ(x)\sigma(x)σ(x) 为 sigmoid 函数。

HSwish

与 swish 相比 hard swish 减少了计算量,具有和 swish 同样的性质。但是与 relu 相比 hard swish 的计算量仍然较大。

函数的定义为 f(x)=xReLU6(x+3)6=x⋅{1,x≥3x6+12,−3<x<30,x≤−3f\left( x \right) =x\displaystyle \frac{\text{ReLU}6\left( x+3 \right)}{6}=x\cdot \begin{cases}1,&x \ge 3 \\ \frac x 6+\frac 1 2, &-3 \lt x \lt 3 \\ 0, &x \le -3 \end{cases}f(x)=x6ReLU6(x+3)​=x⋅⎩⎨⎧​1,6x​+21​,0,​x≥3−3<x<3x≤−3​,导数为 f′(x)={1,x≥3x3+12,−3<x<30,x≤−3f'(x)=\begin{cases} 1,&x \ge 3 \\ \frac x 3+\frac 1 2, &-3 \lt x \lt 3 \\ 0, &x \le -3 \end{cases}f′(x)=⎩⎨⎧​1,3x​+21​,0,​x≥3−3<x<3x≤−3​。

激活函数的选择

1、浅层网络在分类器时,sigmoid 函数及其组合通常效果更好。

2、由于梯度消失问题,有时要避免使用 sigmoid 和 tanh 函数。

3、relu 函数是一个通用的激活函数,目前在大多数情况下使用。

4、如果神经网络中出现死神经元,那么 prelu 函数就是最好的选择。

5、relu 函数只能在隐藏层中使用。

6、通常,可以从 relu 函数开始,如果 relu 函数没有提供最优结果,再尝试其他激活函数。

激活函数相关问题

1、为什么 relu 不是全程可微/可导也能用于基于梯度的学习?

从数学的角度看 relu 在 0 点不可导,因为它的左导数和右导数不相等;但在实现时通常会返回左导数或右导数的其中一个,而不是报告一个导数不存在的错误,从而避免了这个问题。

2、为什么 tanh 的收敛速度比 sigmoid 快?

tan⁡h′(x)=1−tan⁡h(x)2∈(0,1)\tan\text{h}^{'}\left( x \right) =1-\tan\text{h}\left( x \right) ^2\in \left( 0,1 \right)tanh′(x)=1−tanh(x)2∈(0,1)s′(x)=s(x)(1−s(x))∈(0,14]s^{'}\left( x \right) =s\left( x \right) \left( 1-s\left( x \right) \right) \in \left( 0,\frac{1}{4} \right]s′(x)=s(x)(1−s(x))∈(0,41​]由上面两个公式可知 tanh 引起的梯度消失问题没有 sigmoid 严重,所以 tanh 收敛速度比 sigmoid 快。

3、sigmoid 和 softmax 有什么区别?

  • 二分类问题时 sigmoid 和 softmax 是一样的,都是求 cross entropy loss ,而 softmax 可以用于多分类问题。

  • softmax 是 sigmoid 的扩展,因为,当类别数 k=2 时,softmax 回归退化为 logistic 回归。

  • softmax 建模使用的分布是多项式分布,而 logistic 则基于伯努利分布。

  • 多个 logistic 回归通过叠加也同样可以实现多分类的效果,但是 softmax 回归进行的多分类,类与类之间是互斥的,即一个输入只能被归为一类;多 logistic 回归进行多分类,输出的类别并不是互斥的,即”苹果”这个词语既属于”水果”类也属于”3C”类别。

激活函数(Activation)相关推荐

  1. 激活函数 activation function

    文章目录 激活函数 activation function Sigmoid Sigmoid 反向传播 Tanh ReLU Dead ReLU Problem 产生的原因 激活函数 activation ...

  2. DeepLearning: 归纳几种常用的激活函数(activation)

    Deep Learning中常用的激活函数(activation) 1. sigmoid 表达式: a=sigmoid(z)=11+e−za = sigmoid(z) = \frac {1} {1 + ...

  3. Pytorch——激活函数(Activation Function)

    文章目录 1.非线性方程 2.激活函数 3.常用选择 4.代码 1.非线性方程 我们为什么要使用激励函数? 用简单的语句来概括. 就是因为, 现实并没有我们想象的那么美好, 它是残酷多变的. 哈哈, ...

  4. 激活函数activation总结

    激活函数在深度学习中扮演着非常重要的角色,它给网络赋予了非线性,从而使得神经网络能够拟合任意复杂的函数. 非线性激活函数可以使神经网络随意逼近复杂函数.没有激活函数带来的非线性,多层神经网络和单层无异 ...

  5. python license activation_激活函数activation

    TensorFlow的中阶API主要包括: 数据管道(tf.data) 特征列(tf.feature_column) 激活函数(tf.nn) 模型层(tf.keras.layers) 损失函数(tf. ...

  6. [TensorFlow 学习笔记-06]激活函数(Activation Function)

    [版权说明] TensorFlow 学习笔记参考:  李嘉璇 著 TensorFlow技术解析与实战 黄文坚 唐源 著 TensorFlow实战郑泽宇  顾思宇 著 TensorFlow实战Googl ...

  7. Pytorch专题实战——激活函数(Activation Functions)

    文章目录 1.激活函数的两种用法 1.1.softmax激活函数 1.2.sigmoid激活函数 1.3.tanh激活函数 1.4.relu激活函数 1.5.leaky_relu激活函数 2.用激活函 ...

  8. 常用激活函数activation function(Softmax、Sigmoid、Tanh、ReLU和Leaky ReLU) 附激活函数图像绘制python代码

    激活函数是确定神经网络输出的数学方程式. 激活函数的作用:给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数. 1.附加到网络中的每个神经元,并根据每个神经元的输入来确定是否应激活. 2 ...

  9. 激活函数(activation function)

    激活函数activation function 激活函数的介绍 阶跃函数(Step Function)--- 最简单的二分类非线性激活函数开始 mish激活函数 激活函数的介绍 首先看一个普通的神经网 ...

  10. 【机器学习】神经网络-激活函数-面面观(Activation Function)

    神经网络之激活函数(Activation Function) 本博客仅为作者记录笔记之用,不免有很多细节不对之处. 还望各位看官能够见谅,欢迎批评指正. 更多相关博客请猛戳:http://blog.c ...

最新文章

  1. oracle恢复是怎么看进度,Oracle中查看慢查询进度的脚本分享
  2. R语言单向多元方差分析MANOVA(one-way MANOVA)实战:multivariate analysis of variance
  3. 嵌入式第一周学习总结
  4. 【地狱副本】数据结构之线段树Ⅲ——区间最值/赋值/修改/历史值操作(HDU5306,Tyvj 1518,【清华集训2015】V,HDU6315,HDU1828,POJ3162)
  5. 复制给节点的命令_深入理解redis主从复制原理
  6. OpenCV的基本模块介绍
  7. 这些智能合约漏洞,可能会影响你的账户安全!
  8. matlab 0x1表示什么意思,(x ^ 0x1)!= 0是什么意思?(What does (x ^ 0x1) != 0 mean?)
  9. spring初始化在ServletContextListener实现类中获取spring注入对象
  10. 数据挖掘与数据分析好书推荐
  11. 【机器学习】决策树的理论与实践
  12. C#开发的3D图表控件,适用于winform项目
  13. 动易html在线编辑器,动易系统解决IE8网站后台编辑器无效问题
  14. docx文档文字怎么加边框_Word技巧:怎么给文本加方框
  15. 日常笔记-snownlp情感分析计算情感得分
  16. 接口压力测试神器Jmeter
  17. VS2012 打开项目后无法编辑
  18. 八爪鱼-自定义模式采集数据_视频教程执行
  19. poi操作Excel给列设置下拉菜单(数据验证)
  20. 纯真IP数据库QQWry.dat格式详解

热门文章

  1. 手机测试属于硬件测试还是软件测试6,红米手机的硬件测试的2种基本操作
  2. 微型计算机的外辅储存器,微型计算机的外辅储存器是指
  3. 《看板实战》读书笔记 XMIND版本
  4. tomcat 严重: Could not contact localhost:80. Tomcat may not be running.
  5. 中国科学研成都计算机,中国科学院成都分院
  6. 前端优化-改善滑动流畅度的几类方法
  7. net start mysql启动mysql,提示发生系统错误5拒绝访问解决方法
  8. maya腿的蒙皮旋转枢轴_完美动力小课堂:怎么快速修改物体枢轴?这个方法值得收藏!...
  9. 【算法】旅行商A*算法
  10. 大学计算机实验教程实验报告2.2,大学计算机实验2实验报告.doc