激活函数-Sigmoid, Tanh及ReLU

什么是激活函数在神经网络中,我们会对所有的输入进行加权求和,之后我们会在对结果施加一个函数,这个函数就是我们所说的激活函数。如下图所示。为什么使用激活函数我们使用激活函数并不是真的激活什么,这只是一个抽象概念,使用激活函数时为了让中间输出多样化,能够处理更复杂的问题。如果不适用结果函数的话,每一层最后输出的都是上一层输入的线性函数,不管加多少层神经网络,我们最后的输出也只…

大家好,又见面了,我是你们的朋友全栈君。

什么是激活函数

 

在神经网络中,我们会对所有的输入进行加权求和,之后我们会在对结果施加一个函数,这个函数就是我们所说的激活函数。如下图所示。

激活函数-Sigmoid, Tanh及ReLU

为什么使用激活函数

我们使用激活函数并不是真的激活什么,这只是一个抽象概念,使用激活函数时为了让中间输出多样化,能够处理更复杂的问题。

如果不适用结果函数的话,每一层最后输出的都是上一层输入的线性函数,不管加多少层神经网络,我们最后的输出也只是最开始输入数据的线性组合而已。激活函数给神经元引入了非线性因素,当加入多层神经网络时,就可以让神经网络拟合任何线性函数及非线性函数,从而使得神经网络可以适用于更多的非线性问题,而不仅仅是线性问题。

有论文中把激活函数定义为一个几乎处处可微的函数f: R->R

有哪些激活函数

对于神经网络,一版我们会使用三种激活函数:Sigmoid函数、Tanh函数、ReLU函数。

基本概念:

饱和

当函数f(x)满足:

\lim_{x\rightarrow+\infty}f^{'}(x)=0

时,称为右饱和

当函数f(x)满足:

\lim_{x\rightarrow-\infty}f^{'}(x)=0

时,称为左饱和

当f(x)同时满足左饱和及右饱和时,称为饱和。

软包和与硬包和

在饱和定义的基础上,如果存在常数c1,当x>c1时候恒满足f^{'}(x)=0,称之为右硬饱和;同样的,如果存在c2,当x<c2时恒满足f^{'}(x)=0,称之为左硬饱和。如果同时满足了左饱和,又满足了右饱和,称之为硬包和。相对的,只有在x趋于极值时才能满足f(x)的倒数为0,则成为软饱和。

1. Sigmoid 函数

sigmoid 曾经风靡一时,但是由于sigmoid有自身的缺陷,现在用的比较少了。

函数公式如下:

f(x)=\frac{1}{1+e^{-x}},相应的f^{'}(x)=f(x)(1-f(x))

​​​​​​函数曲线如下:

激活函数-Sigmoid, Tanh及ReLU

优点:

<1> Sigmoid的取值范围在(0, 1),而且是单调递增,比较容易优化

<2> Sigmoid求导比较容易,可以直接推导得出。

缺点:

<1> Sigmoid函数收敛比较缓慢

<2> 由于Sigmoid是软饱和,容易产生梯度消失,对于深度网络训练不太适合(从图上sigmoid的导数可以看出当x趋于无穷大的时候,也会使导数趋于0)

<3> Sigmoid函数并不是以(0,0)为中心点

2. Tanh函数

tanh为双切正切曲线,过(0,0)点。相比Sigmoid函数,更倾向于用tanh函数

函数公式:

f(x)=\frac{sinh(x)}{cosh(x)}=\frac{1-e^{-2x}}{1+e^{-2x}}=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}=\frac{e^{2x}-1}{e^{2x}+1}=2sigmoid(2x)-1

相应的f^{'}(x)=tanh{'}(x)=sech^{2}(x)=1-tanh^{2}(x)

函数曲线如下:

激活函数-Sigmoid, Tanh及ReLU

优点:

<1> 函数输出以(0,0)为中学

<2> 收敛速度相对于Sigmoid更快

缺点:

<1> tanh并没有解决sigmoid梯度消失的问题

3. ReLU函数

最近这几年很常用的激活函数。

公式如下:

激活函数-Sigmoid, Tanh及ReLU

优点:

<1> 在SGD中收敛速度要比Sigmoid和tanh快很多

<2> 有效的缓解了梯度消失问题

<3> 对神经网络可以使用稀疏表达

<4> 对于无监督学习,也能获得很好的效果

缺点:

<1> 在训练过程中容易出现神经元失望,之后梯度永远为0的情况。比如一个特别大的梯度结果神经元之后,我们调整权重参数,就会造成这个ReLU神经元对后来来的输入永远都不会被激活,这个神经元的梯度永远都会是0,造成不可逆的死亡。

参考:http://www.cnblogs.com/rgvb178/p/6055213.html

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/124662.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月3日 下午8:35
下一篇 2022年4月3日 下午8:35


相关推荐

  • mysql实战34讲_有效教学十讲读书心得

    mysql实战34讲_有效教学十讲读书心得此文为极客时间:MySQL实战45讲的4、5、9、10、11、15、18节索引相关部分的总结一、Innodb索引模型1.主键/非主键索引的区别每个索引在Innodb中都是一颗B+树,其中根据索

    2022年8月16日
    7
  • 主板开启网络唤醒_WOL网络唤醒远程开机功能设置方法图文教程[通俗易懂]

    主板开启网络唤醒_WOL网络唤醒远程开机功能设置方法图文教程[通俗易懂]很多使用WOL远程唤醒软件的用户们都不知道怎么开启WOL网络唤醒远程开机功能,有这软件也用不了啊!今天小编就给大家介绍怎样才能设置电脑远程唤醒,不同牌子的主板、网卡、路由器在选项设置的名称和位置上都基本都不相同,但是思路都是差不多的,大家用户根据自己电脑的实际情况进行设置。1.设置主板BIOS首先,我们要在主板BIOS里面设置WOL唤醒功能的开关,大部分主板都会支持唤醒,但每个主板的…

    2022年6月2日
    327
  • python 网络字节序转换_网络字节序

    python 网络字节序转换_网络字节序一 字节序字节序是由于不同的主处理器和操作系统 对大于一个字节的变量在内存中的存放顺序不同而产生的 字节序通常有大端字节序列和小端字节序两种分类方法 由于主机的千差万别 主机的字节序不能做到统一 但是网络上传输的数值 它们有统一的规定 网络字节序 是指多字节变量在网络传输时的表示方法 网络字节序采用高端字节序的表示方法 高位在前 低位在后 这是针对一个变量所处的字节中来说的 比如一个变量占两个字节

    2026年3月19日
    1
  • CurrentHashMap的实现原理

    CurrentHashMap的实现原理hash表介绍哈希表就是一种以键-值(key-indexed)存储数据的结构,我们只要输入待查找的值即key,即可查找到其对应的值。哈希的思路很简单,如果所有的键都是整数,那么就可以使用一个简单的无序数组来实现:将键作为索引,值即为其对应的值,这样就可以快速访问任意键的值。这是对于简单的键的情况,我们将其扩展到可以处理更加复杂的类型的键。链式hash表链式哈希表从根本上说是由一组链表…

    2022年6月18日
    22
  • 网络学习 局域网分类 以太网 令牌网 FDDI光纤分布式数据接口网 异步传输模式网(ATM) 无线局域网

    网络学习 局域网分类 以太网 令牌网 FDDI光纤分布式数据接口网 异步传输模式网(ATM) 无线局域网局域网虽然目前我们所能看到的局域网主要是以双绞线为代表传输介质的以太网,那只不过是我们所看到都基本上是企、事业单位的局域网,在网络发展的早期或在其它各行各业中,因其行业特点所采用的局域网也不一定都是以太网,目前在局域网中常见的有:以太网(Ethernet)、令牌网(TokenRing)、FDDI网、异步传输模式网(ATM)等几类,下面分别作一些简要介绍。1以太网是这样通信的,每台电…

    2026年2月6日
    5
  • 学会阅读Java字节码

    学会阅读Java字节码1 Class 文件基础 1 文件格式 Class 文件的结构不像 XML 等描述语言那样松散自由 由于它没有任何分隔符号 所以 以上数据项无论是顺序还是数量都是被严格限定的 哪个字节代表什么含义 长度是多少 先后顺序如何 都不允许改变 2 数据类型仔细观察上面的 Class 文件格式 可以看出 Class 文件格式采用一种类似于 C 语言结

    2025年10月28日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号