1. 什么是激活函数?
  2. 激活函数的用途(为什么需要激活函数)?
  3. 有哪些激活函数,都有什么性质和特点?
  4. 应用中如何选择合适的激活函数?

什么是激活函数?

首先要了解神经网络的基本模型。
单一神经元模型如下图所示。

神经网络中的每个神经元节点接受上一层神经元的输出值作为本神经元的输入值,并将输出值传递给下一层,输入层神经元节点会将输入属性值直接传递给下一层(隐层或输出层)。在多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,这个函数称为激活函数(又称激励函数)。

代码演示:

import numpy as np
import tensorflow as tfa = np.random.randint(-5, 10, size=20)
print(a)
b = tf.nn.relu(a)
with tf.Session() as sess:print(sess.run(b))

代码结果:


也就是小于0数字给变为了 0。

激励函数作用:

在神经网络中,激励函数的作用是能够给神经网络加入一些非线性因素,使得神经网络能够更好的解决较为复杂的问题。
      在实际中,每一个神经元就是一个函数,都是线性的,加入激活函数可以让其变为非线性,在真实世界中基本上所有的事务都是非线性的,加入激活函数可以更好的模拟现实事务,可以逼近任何的函数。
      激活活函数是神经网络中非线性的来源,因为如果去掉这些函数,那么整个网络就只剩下线性运算,线性运算的复合还是线性运算的,最终的效果只相当于单层的线性模型.
      它有着画龙点睛的作用。其实实际生物学中的神经传输也是有类似的操作,并不是每一个响应神经元都会进行传递信息,只有当信号强到一定的程度,神经元才会释放神经递质,进行传递信息(高中生物偶!)。

有哪些激活函数,都有什么性质和特点?

1. Sigmoid函数

Sigmoid 是常用的非线性的激活函数,它的数学形式如下:


Sigmoid的几何图像如下:

特点:

它能够把输入的连续实值变换为0和1之间的输出,特别的,如果是非常大的负数,那么输出就是0;如果是非常大的正数,输出就是1.

缺点:

sigmoid函数曾经被使用的很多,不过近年来,用它的人越来越少了。主要是因为它固有的一些 缺点。
缺点1:在深度神经网络中梯度反向传递时导致梯度爆炸和梯度消失,其中梯度爆炸发生的概率非常小,而梯度消失发生的概率比较大。首先来看Sigmoid函数的导数,如下图所示:

如果我们初始化神经网络的权值为 [0,1] 之间的随机值,由反向传播算法的数学推导可知,梯度从后向前传播时,每传递一层梯度值都会减小为原来的0.25倍,如果神经网络隐层特别多,那么梯度在穿过多层后将变得非常小接近于0,即出现梯度消失现象;当网络权值初始化为 (1,+∞)区间内的值,则会出现梯度爆炸情况。

缺点2:Sigmoid 的 output 不是0均值(即zero-centered)。这是不可取的,因为这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。 产生的一个结果就是:如那么对w求局部梯度则都为正,这样在反向传播的过程中w要么都往正方向更新,要么都往负方向更新,导致有一种捆绑的效果,使得收敛缓慢。 当然了,如果按batch去训练,那么那个batch可能得到不同的信号,所以这个问题还是可以缓解一下的。因此,非0均值这个问题虽然会产生一些不好的影响,不过跟上面提到的梯度消失问题相比还是要好很多的。
缺点3:其解析式中含有幂运算,计算机求解时相对来讲比较耗时。对于规模比较大的深度网络,这会较大地增加训练时间。

2.tanh函数

tanh函数解析式:

tanh函数及其导数的几何图像如下图:

tanh读作Hyperbolic Tangent,它解决了Sigmoid函数的不是zero-centered输出问题,然而,梯度消失(gradient vanishing)的问题和幂运算的问题仍然存在。

3.Relu函数

Relu函数的解析式:

Relu函数及其导数的图像如下图所示:

ReLU函数其实就是一个取最大值函数,注意这并不是全区间可导的,但是我们可以取sub-gradient,如上图所示。ReLU虽然简单,但却是近几年的重要成果,有以下几大优点:
1) 解决了gradient vanishing问题 (在正区间)
2)计算速度非常快,只需要判断输入是否大于0
3)收敛速度远快于sigmoid和tanh

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

尽管存在这两个问题,ReLU目前仍是最常用的activation function,在搭建人工神经网络的时候推荐优先尝试!

应用中如何选择合适的激活函数?

这个问题目前没有确定的方法,凭一些经验吧。
1)深度学习往往需要大量时间来处理大量数据,模型的收敛速度是尤为重要的。所以,总体上来讲,训练深度学习网络尽量使用zero-centered数据 (可以经过数据预处理实现) 和zero-centered输出。所以要尽量选择输出具有zero-centered特点的激活函数以加快模型的收敛速度。
2)如果使用 ReLU,那么一定要小心设置 learning rate,而且要注意不要让网络出现很多 “dead” 神经元,如果这个问题不好解决,那么可以试试 Leaky ReLU、PReLU 或者 Maxout.
3)最好不要用 sigmoid,你可以试试 tanh,不过可以预期它的效果会比不上 ReLU 和 Maxout.

激活函数(激励函数)理解总结相关推荐

  1. YOLOv5 网络组件与激活函数 代码理解笔记

    前言 最近在看YOLOv5 第6个版本的代码,记录了一下笔记,分享一下.首先看了网络结构.网络组件,对应代码models\common.py.然后看了激活函数,对应代码utils\activation ...

  2. pytorch中的激励函数(详细版)

    初学神经网络和pytorch,这里参考大佬资料来总结一下有哪些激活函数和损失函数(pytorch表示) 首先pytorch初始化:   import torch import torch.nn.fun ...

  3. 卷积神经网络CNNs 为什么要用relu作为激活函数?

    relu激活函数的优势: (1)反向传播时,可以避免梯度消失. (2)Relu会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生(以及一些人的生 ...

  4. 什么是深度学习?45分钟理解深度神经网络和深度学习 刘利刚教授

    什么是深度学习? - 45分钟理解深度神经网络和深度学习 刘利刚 中国科学技术大学图形与几何计算实验室 http://staff.ustc.edu.cn/~lgliu [绪言] 近年来,人工智能(Ar ...

  5. pytorch_lesson13.4 Dead ReLU Problem成因分析+通过调整学习率来缓解+Relu特性理解+nn.Sequential建模方式以及参数自定义方法

    提示:仅仅是学习记录笔记,搬运了学习课程的ppt内容,本意不是抄袭!望大家不要误解!纯属学习记录笔记!!!!!! 文章目录 前言 一.Dead ReLU Problem成因分析 1.Dead ReLU ...

  6. 高效“炼丹”必备技能:一文实现深度学习数学原理入门,还有吴恩达老师亲授课程...

    贾浩楠 发自 凹非寺 量子位 报道 | 公众号 QbitAI 哪个程序员不想高效"炼丹"? 尤其是深度学习算法开发人员,追求模型结构优化和提高编程效率是永远的目标. 但是,如果只做 ...

  7. 机器学习面试题总结!!!!

    需要内推三七互娱的盆友萌,(9月5号截止)可以参考另一篇文章,或者内推QQ群:175423207 BAT机器学习面试系列 1.请简要介绍下SVM. SVM,全称是support vector mach ...

  8. 机器学习面试题总结(转)

    原文链接: https://blog.csdn.net/sinat_35512245/article/details/78796328 1.请简要介绍下SVM. SVM,全称是support vect ...

  9. BAT机器学习面试1000道

    本文转载自: https://blog.csdn.net/sinat_35512245/article/details/78796328 1.请简要介绍下SVM. SVM,全称是support vec ...

  10. tensorflow 学习笔记使用CNN做英文文本分类任务

    使用CNN做英文文本分类任务 本文同时也是学习唐宇迪老师深度学习课程的一些理解与记录. 文中代码是实现在TensorFlow下使用卷积神经网络(CNN)做英文文本的分类任务(本次是垃圾邮件的二分类任务 ...

最新文章

  1. IAS的工作原理(一)作为 RADIUS 服务器的 IAS
  2. android studio 如何提示方法的用法
  3. 【原创】Kakfa metrics包源代码分析
  4. android表格自动刷新,Android SwipeRefreshLayout 自动刷新
  5. [置顶]       编写自己的JQUERY插件
  6. Spark Streaming 和 Flink 的对比以及详细描述,图文对比、代码
  7. python findall函数_Python正则表达式
  8. shiro框架 4种授权方式 说明
  9. 5.10 图上的傅里叶变换和逆变换
  10. Identity Mappings in Deep Residual Networks2016【论文理解】
  11. 【字符知识】SGML 类语言(Eg.HTML)字符转义
  12. 免疫算法在物流配送中心选址中的应用
  13. Ubuntu18.04安装WPS
  14. 漫游流量 android,人在国外 怎么设置小米手机国际漫游指定app使用流量?
  15. java的第十一章总结(枚举,泛型)
  16. python3中的@abstractmethod的用法
  17. Decorate 装饰器应用
  18. SSE学习-一个小栗子
  19. CocosCreator中游戏摇杆的实现
  20. 一串JS代码Hack简单考眼力小游戏

热门文章

  1. 嵌入式linux ucgui,四、嵌入式之图形界面 (3) uCGui
  2. ip pim spare 源树 和 共享树_如何实现IP组播,减少摄像头和网络的负载?
  3. mysql请假表_[源码和文档分享]基于JSP和MYSQL数据库实现的请假管理系统
  4. 头歌(educoder)实训作业题目及答案分享 ——1-1 Java入门 - Java入门基础
  5. 维修电工电气控制技能实训考核装置
  6. 数字图像处理知识(3)
  7. idea 主题设计+网站
  8. 小学计算机学什么,小学信息技术课学什么
  9. 盘点电机重要应用的七大领域
  10. matlab建模与仿真应用pdf,MATLAB建模与仿真应用教程 第2版