最全最详细的常见激活函数总结(sigmoid、Tanh、ReLU等)及激活函数面试常见问题总结_什么激活函数得到单调减函数-程序员宅基地

技术标签: Tanh  面试  sigmoid  零碎知识记录  ReLu  激活函数  

为什么要使用激活函数?

激活函数用来怎加非线性因素的,提高模型拟合能力。如果不存在激活函数,神经网络的每一层的输入都是对前面输入的线性变化,就算把网络加到很深也无法去拟合任意函数的。

激活函数具有的特性

虽然我们常用激活函数不是很多,那是否只有这些函数能作为激活函数呢?我们从神经网络的工作过程中看,激活函数具有什么样的性质能够更好的帮助神经网络的训练。(借鉴Hengkai Guo添加链接描述

  1. 非线性:数,激活函数必须是非线性的。
  2. 计算简单:神经元都要经过激活运算的,在随着网络结构越来越庞大、参数量越来越多,激活函数如果计算量小就节约了大量的资源。
  3. f ( x ) ≈ x {\rm{f}}(x) \approx x f(x)x:在向前传播时,如果参数的初始化是随机量的最小值,神经网络的训练很高效。在训练的时候不会出现输出的幅度随着不断训练发生倍数的增长,是网络更加的稳定,同时也使得梯度更容易回传。
  4. 可微:因为神经网络要通过反向传播来跟新参数,如果激活函数不可微,就无法根据损失函数对权重求偏导,也就无法更新权重。传统的激活函数如sigmoid等满足处处可微。对于分段线性函数比如ReLU,只满足几乎处处可微(即仅在有限个点处不可微)。对于SGD算法来说,由于几乎不可能收敛到梯度接近零的位置,有限的不可微点对于优化结果不会有很大影响1
  5. 非饱和性:(饱和函数有Sigmoid、Tanh等,非饱和函数ReLU等)例如Sigmoid函数求导以后的值很小,两端的值接近为零在反向传播的时候,如果网络的层次过大便会发生梯度消失的问题,使得浅层的参数无法更新。(梯度消失后面会介绍)
  6. 单调性:当激活函数单调时,单层网络保证是凸函数。
  7. 输出值的范围: 当激活函数输出值是有限的时候,基于梯度的优化方法会更加稳定,因为特征的表示受有限权值的影响更显著;当激活函数的输出是无限的时候,模型的训练会更加高效,不过在这种情况小,一般需要更小的Learning Rate2

激活函数的类别

饱和激活函数

Sigmoid激活函数

1. 函数图像和公式
我们从图像和公式上结合上面分析的激活函数的特性来看看Sigmoid激活函数的优点和缺点。
f ( x ) = 1 1 + e − x {\rm{f}}(x) = \frac{1}{ {1 + {e^{ - x}}}} f(x)=1+ex1

Sigmoid
2. 函数性质

  • 非线性函数
  • 求导简单,函数求导后为 f ′ ( x ) = f ( x ) ( 1 − f ( x ) ) {f'}(x) = f(x)(1 - f(x)) f(x)=f(x)(1f(x))
  • 不满足 f ( x ) ≈ x {\rm{f}}(x) \approx x f(x)x
  • 在定义域内处处可导
  • 饱和激活函数
  • 函数为单调函数
  • 函数的输出区间在(0,1)之间,函数定义域为负无穷到正无穷
    3. 函数倒数图像和导数

Sigmoid导数图像和原图像
4. 优点和缺点

  • 优点:平滑、容易求导
  • 缺点:
    • 激活函数运算量大(包含幂的运算)
    • 函数输出不关于原点对称,使得权重更新效率变低,同时这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入,随着网络的加深,会改变数据的原始分布
    • 由图像知道导数的取值范围[0,0.25],非常的小。在进行反向传播计算的时候就会乘上一个很小的值,如果网络层次过深,就会发生“梯度消失”的现象了,无法更新浅层网络的参数了。

Tanh(双曲正切函数)激活函数

1. 函数图像和公式

函数图像:
Tanh
函数公式:
f ( x ) = ( e x − e − x ) ( e x + e − x ) f(x) = \frac{ {({e^x} - {e^{ - x}})}}{ {({e^x} + {e^{ - x}})}} f(x)=(ex+ex)(exex)

2. 函数倒数图像和导数

导数公式:
f ′ ( x ) = 1 − ( f ( x ) ) 2 {f'}(x) = 1 - {(f(x))^2} f(x)=1(f(x))2
倒数图像:
Tanh导数图像
3. 函数性质

我们从图像和公式上结合上面分析的激活函数的特性来看看Tanh激活函数的优点和缺点,Tanh函数类似于将Sigmoid函数拉伸和向下平移的结果。

  • 非线性函数(从图像上来看是一个分段线性函数,所有的负值为0,正值不变)
  • 求导简单, f ′ ( x ) = 1 − ( f ( x ) ) 2 {f'}(x) = 1 - {(f(x))^2} f(x)=1(f(x))2
  • 不满足 f ( x ) ≈ x {\rm{f}}(x) \approx x f(x)x
  • 饱和激活函数
  • 函数为单调函数
  • 函数的输出区间在(-1,1)之间,函数定义域为负无穷到正无穷

4. 优点和缺点

  • 优点:
    • 解决了Sigmoid的输出不关于零点对称的问题
    • 也具有Sigmoid的优点平滑,容易求导
  • 缺点:
    • 激活函数运算量大(包含幂的运算
    • Tanh的导数图像虽然最大之变大,使得梯度消失的问题得到一定的缓解,但是不能根本解决这个问题

Sigmoid、Tanh激活函数引发的常见问题解决

先针对自然语言处理领域常用的RNN和LSTM网络来说
1. RNN 中为什么要采用 tanh,而不是 ReLU 作为激活函数?
(引用何之源​的回答)添加链接描述
2. 为什么LSTM模型中既存在sigmoid又存在tanh两种激活函数?
(引用知乎问题添加链接描述

非饱和激活函数

ReLU激活函数

ReLU函数代表的的是“修正线性单元”,它是带有卷积图像的输入x的最大函数(x,o)。ReLU函数将矩阵x内所有负值都设为零,其余的值不变

  1. 函数图像和公式
    公式:
    ReLu: f ( x ) = max ⁡ ( 0 , x ) f(x) = \max (0,x) f(x)=max(0,x)
    函数图像
    ReLu
    2.激活函数的性质
  • 非线性函数(虽然单侧是线性函数)
  • 计算简单是真的简单(不管是在神经网络向前计算过程中还是反向传播的时候)
  • 右侧满足 f ( x ) ≈ x {\rm{f}}(x) \approx x f(x)x
  • 右侧为单调函数
  • 输出为(0,+无穷)
  1. 优点和缺点
  1. 对于ReLU神经元“死亡”解决方案
    • 对函数进行优化,也就有了后面介绍的函数Leaky ReLU等
    • 采用较小的学习速率
    • 采用 momentum based 优化算法,动态调整学习率
  2. ReLu使用中疑问

Leaky ReLU等变种激活函数

  1. 函数图像和公式

Leaky ReLu
公式: f ( x ) = max ⁡ ( α x , x ) f(x) = \max (\alpha x,x) f(x)=max(αx,x)
函数图像跟之前的ReLu图像很像,同样的PReLU和ELU激活函数也是在ReLu的基础上针对ReLU在训练时神经元容易死亡做出了优化,基本的思路就是让函数小于0的部分不直接为0,而是等于一个很小的数,使得负轴的信息不至于完全丢弃。

  • 在残差网络中激活函数relu的使用,为什么不使用leakyrelu、rrule等改进后的激活函数呢?详细见链接
  • 为什么在生成对抗网络(GAN)中,隐藏层中使用leaky relu比relu要好?详细见链接
  1. https://zhuanlan.zhihu.com/p/73214810
  2. https://zhuanlan.zhihu.com/p/71882757

  1. Goodfellow I, Bengio Y, Courville A. Deep learning[M]. MIT press, 2016.

  2. https://zhuanlan.zhihu.com/p/28109972

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/neo_lcx/article/details/100122938

智能推荐

HTML5 Web SQL 数据库_方式准则的定义-程序员宅基地

文章浏览阅读1k次。1、HTML5 Web SQL 数据库 Web SQL 数据库 API 并不是 HTML5 规范的一部分,但是它是一个独立的规范,引入了一组使用 SQL 操作客户端数据库的 APIs。如果你是一个 Web 后端程序员,应该很容易理解 SQL 的操作。Web SQL 数据库可以在最新版的 Safari, Chrome 和 Opera 浏览器中工作。2、核心方法 以下是规范中定义的三个_方式准则的定义

spring Boot 中使用线程池异步执行多个定时任务_springboot启动后自动开启多个线程程序-程序员宅基地

文章浏览阅读4.1k次,点赞2次,收藏6次。spring Boot 中使用线程池异步执行多个定时任务在启动类中添加注解@EnableScheduling配置自定义线程池在启动类中添加注解@EnableScheduling第一步添加注解,这样才会使定时任务启动配置自定义线程池@Configurationpublic class ScheduleConfiguration implements SchedulingConfigurer..._springboot启动后自动开启多个线程程序

Maven编译打包项目 mvn clean install报错ERROR_mvn clean install有errors-程序员宅基地

文章浏览阅读1.1k次。在项目的target文件夹下把之前"mvn clean package"生成的压缩包(我的是jar包)删掉重新执行"mvn clean package"再执行"mvn clean install"即可_mvn clean install有errors

navacate连接不上mysql_navicat连接mysql失败怎么办-程序员宅基地

文章浏览阅读974次。Navicat连接mysql数据库时,不断报1405错误,下面是针对这个的解决办法:MySQL服务器正在运行,停止它。如果是作为Windows服务运行的服务器,进入计算机管理--->服务和应用程序------>服务。如果服务器不是作为服务而运行的,可能需要使用任务管理器来强制停止它。创建1个文本文件(此处命名为mysql-init.txt),并将下述命令置于单一行中:SET PASSW..._nvarchar链接不上数据库

Python的requests参数及方法_python requests 参数-程序员宅基地

文章浏览阅读2.2k次。Python的requests模块是一个常用的HTTP库,用于发送HTTP请求和处理响应。_python requests 参数

近5年典型的的APT攻击事件_2010谷歌网络被极光黑客攻击-程序员宅基地

文章浏览阅读2.7w次,点赞7次,收藏50次。APT攻击APT攻击是近几年来出现的一种高级攻击,具有难检测、持续时间长和攻击目标明确等特征。本文中,整理了近年来比较典型的几个APT攻击,并其攻击过程做了分析(为了加深自己对APT攻击的理解和学习)Google极光攻击2010年的Google Aurora(极光)攻击是一个十分著名的APT攻击。Google的一名雇员点击即时消息中的一条恶意链接,引发了一系列事件导致这个搜_2010谷歌网络被极光黑客攻击

随便推点

微信小程序api视频课程-定时器-setTimeout的使用_微信小程序 settimeout 向上层传值-程序员宅基地

文章浏览阅读1.1k次。JS代码 /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { setTimeout( function(){ wx.showToast({ title: '黄菊华老师', }) },2000 ) },说明该代码只执行一次..._微信小程序 settimeout 向上层传值

uploadify2.1.4如何能使按钮显示中文-程序员宅基地

文章浏览阅读48次。uploadify2.1.4如何能使按钮显示中文博客分类:uploadify网上关于这段话的搜索恐怕是太多了。方法多也试过了不知怎么,反正不行。最终自己想办法给解决了。当然首先还是要有fla源码。直接去管网就可以下载。[url]http://www.uploadify.com/wp-content/uploads/uploadify-v2.1.4...

戴尔服务器安装VMware ESXI6.7.0教程(U盘安装)_vmware-vcsa-all-6.7.0-8169922.iso-程序员宅基地

文章浏览阅读9.6k次,点赞5次,收藏36次。戴尔服务器安装VMware ESXI6.7.0教程(U盘安装)一、前期准备1、下载镜像下载esxi6.7镜像:VMware-VMvisor-Installer-6.7.0-8169922.x86_64.iso这里推荐到戴尔官网下载,Baidu搜索“戴尔驱动下载”,选择进入官网,根据提示输入服务器型号搜索适用于该型号服务器的所有驱动下一步选择具体类型的驱动选择一项下载即可待下载完成后打开软碟通(UItraISO),在“文件”选项中打开刚才下载好的镜像文件然后选择启动_vmware-vcsa-all-6.7.0-8169922.iso

百度语音技术永久免费的语音自动转字幕介绍 -程序员宅基地

文章浏览阅读2k次。百度语音技术永久免费的语音自动转字幕介绍基于百度语音技术,识别率97%无时长限制,无文件大小限制永久免费,简单,易用,速度快支持中文,英文,粤语永久免费的语音转字幕网站: http://thinktothings.com视频介绍 https://www.bilibili.com/video/av42750807 ...

Dyninst学习笔记-程序员宅基地

文章浏览阅读7.6k次,点赞2次,收藏9次。Instrumentation是一种直接修改程序二进制文件的方法。其可以用于程序的调试,优化,安全等等。对这个词一般的翻译是“插桩”,但这更多使用于软件测试领域。【找一些相关的例子】Dyninst可以动态或静态的修改程序的二进制代码。动态修改是在目标进程运行时插入代码(dynamic binary instrumentation)。静态修改则是直接向二进制文件插入代码(static b_dyninst

在服务器上部署asp网站,部署asp网站到云服务器-程序员宅基地

文章浏览阅读2.9k次。部署asp网站到云服务器 内容精选换一换通常情况下,需要结合客户的实际业务环境和具体需求进行业务改造评估,建议您进行服务咨询。这里仅描述一些通用的策略供您参考,主要分如下几方面进行考虑:业务迁移不管您的业务是否已经上线华为云,业务迁移的策略是一致的。建议您将时延敏感型,有快速批量就近部署需求的业务迁移至IEC;保留数据量大,且需要长期稳定运行的业务在中心云上。迁移方法请参见如何计算隔离独享计算资源..._nas asp网站