之前提到的激活函数是以阈值0(界限值)为界的,小于等于0,输出0,否则,输出1。类似于这样的切换输出函数被称之为“阶跃函数”。因此,可以说感知机的激活函数为阶跃函数。那么,如果感知机使用其他函数作为激活函数的话会怎么样呢?实际上,如果将激活函数从阶跃函数换成其他函数,就可以进入神经网络的世界了。

1、阶跃函数

下面我们就用图来表示上面定义的阶跃函数,为此需要使用 matplotlib 库。

# coding: utf-8
import numpy as np
import matplotlib.pylab as pltdef step_function(x):return np.array(x > 0, dtype=np.int)X = np.arange(-5.0, 5.0, 0.1)
Y = step_function(X)
plt.plot(X, Y)
plt.ylim(-0.1, 1.1)  # 指定图中绘制的y轴的范围
plt.show()

np.arange(-5.0, 5.0, 0.1) 在−5.0到5.0的范围内,以0.1为单位,生成NumPy数组( [-5.0, -4.9, ……, 4.9] )。 step_function() 以该NumPy数组为参数,对数组的各个元素执行阶跃函数运算,并以数组形式返回运算结果。对数组 x 、 y 进行绘图,结果如图所示。

上图中,阶跃函数以 0 为界,输出从 0 切换为 1(或从 1切换 0) 。其值呈阶梯式变化,所以称之为阶跃函数。

2、sigmoid函数

公式: 

# coding: utf-8
import numpy as np
import matplotlib.pylab as pltdef sigmoid(x):return 1 / (1 + np.exp(-x))    X = np.arange(-5.0, 5.0, 0.1)
Y = sigmoid(X)
plt.plot(X, Y)
plt.ylim(-0.1, 1.1)
plt.show()

3、阶跃函数和sigmoid函数的比较

# coding: utf-8
import numpy as np
import matplotlib.pylab as pltdef sigmoid(x):return 1 / (1 + np.exp(-x))    def step_function(x):return np.array(x > 0, dtype=np.int)x = np.arange(-5.0, 5.0, 0.1)
y1 = sigmoid(x)
y2 = step_function(x)plt.plot(x, y1)
plt.plot(x, y2, 'k--')
plt.ylim(-0.1, 1.1) #指定图中绘制的y轴的范围
plt.show()

现在我们来比较一下sigmoid 函数和阶跃函数,如下图所示。两者的不同点在哪里呢?又有哪些共同点呢?我们通过观察图来思考一下。观察下图,首先注意到的是“平滑性”的不同。sigmoid函数是一条平滑的曲线,输出随着输入发生连续性的变化。而阶跃函数以0为界,输出发生急剧性的变化。sigmoid函数的平滑性对神经网络的学习具有重要意义 。

阶跃函数与sigmoid函数(虚线是阶跃函数)

       另一个不同点是,相对于阶跃函数只能返回0或1,sigmoid函数可以返回0.731 . . . 、0.880 . . . 等实数(这一点和刚才的平滑性有关)。也就是说,感知机中神经元之间流动的是0或1的二元信号,而神经网络中流动的是连续的实数值信号。
      接着说一下阶跃函数和sigmoid函数的共同性质。阶跃函数和sigmoid函数虽然在平滑性上有差异,但是如果从宏观视角看上图,可以发现它们具有相似的形状。实际上,两者的结构均是“输入小时,输出接近0(为0);随着输入增大,输出向1靠近(变成1)”。也就是说,当输入信号为重要信息时,阶跃函数和sigmoid函数都会输出较大的值;当输入信号为不重要的信息时,两者都输出较小的值。还有一个共同点是,不管输入信号有多小,或者有多大,输出信号的值都在0到1之间。

4、ReLU函数

到目前为止,我们介绍了作为激活函数的阶跃函数和sigmoid函数。在神经网络发展的历史上,sigmoid函数很早就开始被使用了,而最近则主要使用ReLU(Rectified Linear Unit)函数。

公式:

# coding: utf-8
import numpy as np
import matplotlib.pylab as pltdef relu(x):return np.maximum(0, x)x = np.arange(-5.0, 5.0, 0.1)
y = relu(x)
plt.plot(x, y)
plt.ylim(-1.0, 5.5)
plt.show()

5、softmax函数

分类问题可以使用softmax函数,其公式表示为: 

上式中表示:假设输出层共有n个神经元,计算第k个神经元的输出  。softmax函数的分子是输入信号的指数函数,分母是所有输入信号的指数函数的和。


import numpy as np
import matplotlib.pyplot as pltdef softmax(x):c = np.max(x)exp_x = np.exp(x - c) # 解决溢出问题sum_exp_x = np.sum(exp_x)y = exp_x / sum_exp_xreturn yx = np.array([0.3, 2.9, 4.0])
y = softmax(x)
plt.plot(x, y)
plt.ylim(-0.1, 1.0)
plt.show()

注:上述代码中, c表示的是矩阵中最大值,这样操作是溢出对策。因为计算机处理“数”时,数值必须在4字节或8字节的有限数据宽度内。这意味着数存在有效位数,也就是说,可以表示的数值范围是有限的。因此,会出现超大值无法表示的问题。这个问题称为溢出,在进行计算机的运算时必须(常常)注意。

激活函数:阶跃函数、sigmoid函数、ReLU函数、softmax函数相关推荐

  1. 【深度学习】——神经网络中常用的激活函数:sigmoid、Relu、Tanh函数

    激活函数   实际中的很多事情并不能简单的用线性关系的组合来描述.在神经网络中,如果没有激活函数,那么就相当于很多线性分类器的组合,当我们要求解的关系中存在非线性关系时,无论多么复杂的网络都会产生欠拟 ...

  2. 激活函数:Sigmoid,Tanh,Softmax,Swish,Relu系列,GLU+GTU

    激活函数:Sigmoid,Tanh,Softmax,Swish,Relu系列,GLU+GTU 激活函数又称"非线性映射函数",是深度卷积神经网络中不可或缺的模块.可以说,深度网络模 ...

  3. Python画Sigmoid、Relu、Softmax、Tanh、Leaky relu等函数(1)

    看鱼书有感,记录一下: 批处理的好处及小批量概念(2) Python(Numpy)实现均方差.交叉熵损失函数等(3) 纯Python实现:函数求导切线图.求偏导.梯度下降法(4) 纯Python实现反 ...

  4. 【深度学习】激活函数:原理+常见激活函数(Sigmoid\Tanh\ReLU\Leaky ReLU\Softmax)

    首先需要知道为什么要引入激活函数:激活函数是用来加入非线性因素的,因为线性模型的表达能力不够.引入非线性激活函数,可使深层神经网络的表达能力更加强大. 在深度学习中,线性模型只需要简单的全连接层就能实 ...

  5. 常用的激活函数汇总-Sigmoid, tanh, relu, elu

    激活函数(又叫激励函数,后面就全部统称为激活函数)是模型整个结构中的非线性扭曲力,神经网络的每层都会有一个激活函数.那他到底是什么,有什么作用?都有哪些常见的激活函数呢? 深度学习的基本原理就是基于人 ...

  6. 激活函数总结sigmoid,tanh,relu,Leaky ReLU,RRelu,ELU,PRelu,SELU,swish

    本文总结深度学习的损失函数及其优缺点. 激活函数是深度学习模型的重要成分,目的是将线性输入转换为非线性.常见的激活函数有sigmoid,tanh,ReLU等 1.sigmoid Sigmoid 非线性 ...

  7. 功能性模块:(8)一文理解常用激活函数(Sigmoid,ReLU,ELU,GELU...)

    一文理解常用激活函数 1. Sigmoid 公式: Sigmoid(x)=11+exp⁡(−x)\text{Sigmoid}(x) = \frac{1}{1 + \exp(-x)}Sigmoid(x) ...

  8. 深度学习激活函数中的线性整流函数ReLU及其变种

    线性整流函数ReLU         线性整流函数(Rectified Linear Unit, ReLU),又称修正线性单元, 是一种人工神经网络中常用的激活函数(activation functi ...

  9. 激活函数的比较和优缺点,sigmoid,tanh,relu,softmax

    2018年03月02日 16:23:35 阅读数:1796 1.什么是激活函数 2.为什么要用 3.都有什么激活函数 4.sigmoid,Relu,softmax 1. 什么是激活函数 如下图,在神经 ...

  10. [Machine Learning] logistic函数和softmax函数

    简单总结一下机器学习最常见的两个函数,一个是logistic函数,另一个是softmax函数,若有不足之处,希望大家可以帮忙指正.本文首先分别介绍logistic函数和softmax函数的定义和应用, ...

最新文章

  1. select 下拉菜单Option对象使用add(elements,index)方法动态添加
  2. java常见集合及其用途
  3. 【蓝桥杯Java_C组·从零开始卷】第二节(附)、if与switch效率比较(千万次/一亿次)
  4. Oracle的分页实现
  5. 学以致用十-----centos7.2+python3.6+vim8.1+YouCompleteMe
  6. 从源代码编译安装 Mono 2.4 和 MonoDevelop 2.0
  7. SpringMVC拦截器Interceptor
  8. 杜甫在线演唱《奇迹再现》、兵马俑真人还原……用AI技术打破次元壁的大谷来参加腾讯全球数字生态大会啦!...
  9. 南洋oj 题目144小珂的苦恼
  10. Spring JdbcTemplate 模板剖析 之 常用 增删改查
  11. Python urllib HTTP头注入漏洞
  12. NVIDIA更新驱动之后,NVIDIA控制面板消失不见的解决办法
  13. 减法公式运算法则_加减法运算法则
  14. 运维部门工作总结_IT部门运维年终总结报告
  15. 什么是参数化设计,通过实操了解一下? | SOLIDWORKS 操作视频
  16. 65个最常见的面试问题与技巧性答复(面试技巧和注意事项),很不错,求职之前,多看看
  17. 默默学Sharding-Sphere(一)
  18. 地位不保?亚马逊接下来要努力争取市场份额!
  19. 正规蓝牙耳机一般多少钱?音质好又便宜的蓝牙耳机
  20. 201819102036张祺

热门文章

  1. 把数字翻译成英文声明.C语言,如何把数字翻译成英文
  2. 每天有8千人在逃离北上广!扎心不?
  3. 百度指数邀请序列号_微信指数如何收录关键词
  4. 百度关键词指数查询易语言代码
  5. 诗歌赏析 - 兰花草
  6. docker下编译mangoszero WOW60级服务端(一)
  7. 〈西游记〉中所有插曲、主题曲
  8. 南京公积金贷款一些规定要点。
  9. python夜曲编程_夜曲编程——我毕业了!!!
  10. 使用cmd查看电脑显卡的信息