1. 引言

通常情况下,激活函数往往返回0到1的数值。在神经元中,输入的input经过一系列加权求和后作用于另一个函数,这个函数就是这里的激活函数。激活函数通常由各种各样的种类,但是他们一般的特点在于倒数简单,方便计算可以节省求导和网络训练时间。

2. 常见的激活函数

这里推荐一个有意思的图,使用小人描绘了各种各样的激活函数,如下所示:

接下来,我们从中挑选重要的激活函数由浅入深地进行讲解。

3. 二元阶跃函数

二元阶跃函数是最简单的激活函数之一,它基于这样一个事实:如果求和的结果大于或等于0,则结果为1,如果小于0,则结果为0。

f(x) = 1, x >= 0= 0, x < 0

上述激活函数的图示如下:

4. 线性激活函数

线性激活函数是输出与输入成比例的函数。
该函数对输入的加权和不做任何处理,只返回给定的值。

5. Sigmoid 激活函数

Sigmoid函数将输入的值转换为(0,1),如果输入是非常小的负数,那么输出就是0;如果输入是非常大的正数,输出就是1。其计算公式如下:

f(x) = 1 / (1 - e^(-x))

该函数图例如下:

同时该激活函数的特点如下:

  • 收敛缓慢
  • 边界介于0和1之间
  • 梯度反向传递时可能会导致梯度消失

我们重点观察其导数图像,如下所示:

上述图像中,梯度值仅在-3到3范围内有效,而该曲线图在其他区域变得非常平坦。这意味着,对于大于3或小于-3的值,函数将具有非常小的梯度。当梯度值接近零时,网络将停止学习,此时将导致梯度消失问题。

6. Tanh 激活函数

双曲正切激活函数将输入的值转换为(-1,1),如果输入是非常小的负数,那么输出就是-1;如果输入是非常大的正数,输出就是1。其计算公式如下:

f(x) = (e^x - e^(-x)) / (e^x + e^(-x))

该函数图例如下:

同时该激活函数的特点如下:

  • 输出均值为0,其收敛速度相比sigmoid更快
  • 边界基于-1和1之间
  • 在循环神经网络中表现良好

我们重点观察其导数图像,如下所示:

观察上图,可以发现该函数依旧面临着类似于sigmoid激活函数梯度消失的问题。同时tanh函数的梯度相比sigmoid函数陡峭得多,梯度消失问题相比sigmoid函数有所缓解。

7. ReLU 激活函数

ReLU激活函数为改进后的线性激活函数,通过取消x<0 即只在输入保留正值来转换输入的值,其计算公式如下:

f(x) = max(0, x) = 0 for x < 0x for x >= 0

样例图像如下:

同时该激活函数的特点如下:

  • 稀疏激活,仅在x>0时进行激活
  • 没有上边界
  • 梯度值在x<0是为零。由于这个原因,在反向传播过程中,一些神经元的权重和偏差没有更新。该特性对图像表现良好。
  • 在卷积网络中表现良好。
  • 由于只有一定数量的神经元被激活,与sigmoid和tanh函数相比,ReLU函数的计算效率要高得多。

8. SoftMax 激活函数

Softmax函数将输出转换为概率形式的表示,使得输出的所有概率之和为1。

在多类分类的情况下,它最常用作神经网络最后一层的激活函数。

SoftMax激活函数的特点如下:

  • 当我们想要以概率的形式输出时,就使用它
  • 边界介于0和1之间
  • 它用于归一化多类类别预测输出值
  • 用于多分类最后一层性能良好

9. 如何选择激活函数

针对不同类型的网络来进行针对性的选择,常用的归纳如下所示:

针对需要解决问题本身来针对性的选择,归纳如下:

10. 总结

本文重点介绍了几种常见的激活函数,并给出了相应的计算公式和图例说明,同时最后针对不同的网络类型和任务类型进行了相应的归纳。

您学废了吗?


关注公众号《AI算法之道》,获取更多AI算法资讯。

浅谈CNN中的激活函数相关推荐

  1. 激活函数设计vhdl_浅谈神经网络中激活函数的设计

    激活函数是神经网络中非线性的来源,因为如果去掉这些函数,那么整个网络就只剩下线性运算,线性运算的复合还是线性运算的,最终的效果只相当于单层的线性模型. 那么,常见的激活函数有哪些呢?或者说,激活函数的 ...

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

    浅谈caffe中train_val.prototxt和deploy.prototxt文件的区别 标签: caffe深度学习CaffeNet 2016-11-02 16:10 1203人阅读 评论(1) ...

  3. java 中的单元测试_浅谈Java 中的单元测试

    单元测试编写 Junit 单元测试框架 对于Java语言而言,其单元测试框架,有Junit和TestNG这两种, 下面是一个典型的JUnit测试类的结构 package com.example.dem ...

  4. mybatis与php,浅谈mybatis中的#和$的区别

    浅谈mybatis中的#和$的区别 发布于 2016-07-30 11:14:47 | 236 次阅读 | 评论: 0 | 来源: 网友投递 MyBatis 基于Java的持久层框架MyBatis 本 ...

  5. 浅谈CSS3中display属性的Flex布局,关于登陆页面属性框的设置

    声明:本文转发自三里屯柯南的浅谈CSS3中display属性的Flex布局http://www.cnblogs.com/xuyuntao/articles/6391728.html 基本概念 采用Fl ...

  6. python sys模块作用_浅谈Python中的模块

    模块 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式.在Python中,一个.py文件就称之为一个模块(Mod ...

  7. python生成器和迭代器作用_浅谈Python中的生成器和迭代器

    迭代器 迭代器协议 对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么返回一个异常来终止本次迭代.(只能往前走,不能往后退!) 迭代器对象 遵循了(实现了)迭代器协议的对象.(对象内 ...

  8. oracle hash join outer,CSS_浅谈Oracle中的三种Join方法,基本概念 Nested loop join: Outer - phpStudy...

    浅谈Oracle中的三种Join方法 基本概念 Nested loop join: Outer table中的每一行与inner table中的相应记录join,类似一个嵌套的循环. Sort mer ...

  9. python中 是什么类型_浅谈python中的变量默认是什么类型

    浅谈python中的变量默认是什么类型 1.type(变量名),输出的结果就是变量的类型: 例如 >>> type(6) 2.在Python里面变量在声明时,不需要指定变量的类型,变 ...

最新文章

  1. [Linux] PHP程序员玩转Linux系列-Linux和Windows安装nginx
  2. springboot:thymeleaf
  3. android fragment 菜单栏,android UI:底部菜单栏的学习与制作——Fragment碎片一
  4. 语言速算24点的小窍门_期末备考:小学数学期末常考题型汇总+速算解题思路分析...
  5. activemq网络桥接_ActiveMQ –经纪人网络解释–第2部分
  6. 25 个精美的后台管理界面模板和布局
  7. @async 没有异步_玩转javascript异步编程
  8. 仿百度手机助手标题栏透明度随ListView或ScrollView滚动改变的实现方法
  9. Oracle物化视图的简单使用
  10. 安装CLOVER引导器到硬盘EFI分区
  11. 服务器temp文件夹文件都能清理吗,Temp文件夹是什么?Windows中Temp文件夹下内容可以随意删除吗?...
  12. 使用Pyecharts进行全国水质TDS地图可视化全过程9:构建字典,批量生成所有省份地图
  13. 利用百度地图API进行车辆查询并用鼠标拾点获取经纬度
  14. Socket UDP、TCP 简介
  15. 护眼灯护眼有效果吗?一文了解护眼灯到底有没有用
  16. 第一台数字电子计算机占地面积为,中国的第一台计算机占地面积是多少?
  17. (模电笔记四 By Multisim)典型运算放大电路案例分析(同相反相差分)
  18. python while true循环卡住不动_python – While循环导致整个程序在Tkinter中崩溃
  19. 单机版五子棋java功能_JAVA单机版五子棋怎么写
  20. 计算机设计基础课程设计,设计课程总结范文

热门文章

  1. 分区助手迁移系统盘到固态,注册表调盘符后出现黑屏问题的解决方案
  2. 为什么搜狗浏览器打开新网页是后台显示,而不是直接显示新打开
  3. 利用Pano2VR +PS在全景图中补地以及添加图片
  4. sqli-lab 6
  5. ISO管理体系认证 的好处 及对企业的优势
  6. 干货 | 国际化探索之路-Trip.com如何走进阿拉伯市场
  7. error:failed to push some refs to ‘ssh://git.....‘
  8. 尚品汇VUE项目实战相关面试题总结
  9. 业余程序员余流 - 杂谈 之 《癌症》
  10. 基于c++实现RTSP/RTMP推流组件PushStream简介