深度学习入门之激活函数

参考书籍:深度学习入门——基于pyhthon的理论与实现


文章目录

  • 深度学习入门之激活函数
  • 前言
  • 一、sigmoid函数
    • 1.简介
    • 2.python实现
    • 3.函数用法
  • 二、阶跃函数
    • 1.简介
    • 2.python实现阶跃函数
    • 3.函数用法
    • 三、ReLU函数
    • 1.简介
    • 2.python实行ReLU函数
  • 总结

前言

将输入信号的总和转换为输出信号,这种函数一般称为激活函数(activation function)。激活函数作用在于决定如何来激活输入信号的总和。激活函数作为感知机和神经网络的桥梁。它的出现使得输出从单一变为数值化。激活函数以阈值为界,一旦输入超过阈值,就切换输出,这样的函数称为‘阶跃函数’。因此,可以说感知机中使用了阶跃函数作为激活函数。接下来,简单介绍一下激活函数的种类。


一、sigmoid函数

1.简介

神经网络中第一个激活函数就是S型生长曲线,也就是sigmoid函数(sigmoid function),它的数学表达式如下:

h(x)=11+exp(−x)h(x)=\frac {1} {1+exp(-x)} h(x)=1+exp(−x)1​
其中,exp(-x)表示的是e^(-x),e为纳皮尔常数2.7182…,尽管从函数表达式上来看激活函数,显得比较复杂,但是我们从另一个角度去解读,就可以认为:给定一个输入后,经过此函数运算可以得到某个输出的转换器。比如,向sigmoid函数输入1.0或者2.0后,就会有某个值被输出,类似:
h(0.1)=0.731⋯h(0.2)=0.880⋯h(0.1)=0.731\cdots \\ h(0.2)=0.880\cdots h(0.1)=0.731⋯h(0.2)=0.880⋯

2.python实现

下面,利用python来实行sigmoid函数,代码如下:

import numpy as np
def sigmoid(x):return 1 / (1 + np.exp(-x))

这里,注意的是参数x为numpy数组,结果也能被正确计算,实际运用中,sigmoid函数的输入参数实际就是一个numpy数组,实验结果如下:

>>> x = np.array([-1.0 , 1.0 , 2.0])
>>>sigmoid(x)
>array([0.2689142,0.73105858 0.88079708])

sigmoid函数的图形,关于x=0对称,值域在[0,1]之间,整个形状呈现’S’型,因此也称其为S型生长曲线,sigmoid函数的曲线图形如下:

3.函数用法

神经网络中,用sigmoid函数作为激活函数,进行信号的转换,转换后的信号被传送给下一个神经元。实际上,感知机和神经网络的最主要区别就在于这个激活函数,其他方面,比如神经网络的多层连接的构造、信号的传递方法等,基本上和感知机是一样的。

二、阶跃函数

1.简介

阶跃函数相当于sigmoid函数来说,较为简单,阶跃函数在x=0有一个突变过程,数学表达式如下:
h(x)={0(x<0)1(x⩾0)h(x) = \begin{cases} 0& (x<0)\\1&(x \geqslant 0) \end{cases} h(x)={01​(x<0)(x⩾0)​
阶跃函数从其数学表达式就可以看出:当输入信号超过0时,输出为1,否则输出为0。

2.python实现阶跃函数

python实现阶跃函数还是非常简单的,只需要一个判断即可。

代码如下(示例):

import numpy as np
def step_function(x):if x >0:return 1elsereturn 0

这个形式的实现确实比较简单,但是这个函数存在一定的不足,因为这个函数的输入参数x只能接收实数数据,即浮点数,例如step_function(3.0)的调用,不允许参数取numpy数组,例如step_function(np.array([1.0 ,2.0]))的调用,所以为了满足numpy数组的调用,所以需要对程序进行修改,为什么需要满足numpy数组呢?这是因为后面的数据不可能单一的出现,而是一个数据组的出现,就如图片数据。
将程序修改成为numpy数组支持的形式:

import numpy as np
def step_function(x):y = x > 0return y.astype(np.int)

该函数中,y的输出是一个bool值得numpy数组,判断x和0的大小,根据大小,输出bool值,x大于0时,y输出True,否则y输出False,y的dtype=bool。
但是,函数输出需要的是一个int型的数据,即需要0或者1的输出,所以,在数据返回时,利用astype()方法转换numpy数组的数据类型。astype通过指定的参数,达到转换为指定的数据类型,astype(np.int),就是将y中的bool数组转换为0、1的int数组,true会转换为1,false会转换为0。
阶跃函数的图形,比较像一个楼梯,在x=0处,发生突变,出现阶跃信号。图形如下所示:

3.函数用法

阶跃函数以0为界,输出从0切换为1,或者说从1切换为0,它的值呈现阶梯式变化。相对比与sigmoid函数,阶跃函数的输出发生更加急剧性变化,而sigmoid函数的变化更加平滑,sigmoid函数平滑性对神经网络的学习具有重要的意义,阶跃函数的输出急剧性,就像竹筒敲石头一般,输出变化只有两个状态就是敲与不敲,而sigmoid函数就像水车,根据流过来的水量做相应调整在输出。但是两者的作用是一致的,对重要信息会有较大输出,小信号会输出较小的值。

三、ReLU函数

1.简介

ReLU函数现在使用的比较多,该函数在大于0时,直接输出该值;在小于0时,输出直接为0.
ReLU函数的数学表述式如下所示:
h(x)={x(x>0)0(x≧0)h(x)= \begin{cases} x &(x>0) \\0 & (x\geqq0) \end{cases} h(x)={x0​(x>0)(x≧0)​
ReLU函数也是一个比较简单的函数。

2.python实行ReLU函数

根据ReLU函数的数学公式,可以将程序写为:

import numpy as np
def relu(x):return np.maximum(0,x)

这里使用了maximum函数对输入的信号和0进行比较,选择一个最大的输出,比如输入的x=12,relu函数则会输出12,如果输入x=-12,relu函数的输出就会变为0。

该例子只是简单实现,对于实际的神经网络运算比这个例子要更加复杂,但是不影响后面结论成立。
relu函数的图像,也可以通过它的数学表达可以直接表述出来,较好理解,图形如下所示:

总结

本文仅仅简单介绍了激活函数的种类,主要讲述了sidmoid函数、阶跃函数、ReLU函数的数学表达式,python简单实现以上的激活函数,简单介绍了使用技巧。

深度学习入门之激活函数相关推荐

  1. 深度学习入门,一文讲解神经网络的构成、训练和算法

    小白深度学习入门系列 神经网络的构成.训练和算法 什么是神经网络 人工神经网络(Artificial Neural Network,ANN),简称神经网络(Neural Network,NN),是一种 ...

  2. BP算法双向传_链式求导最缠绵(深度学习入门系列之八)

    摘要: 说到BP(Back Propagation)算法,人们通常强调的是反向传播,其实它是一个双向算法:正向传播输入信号,反向传播误差信息.接下来,你将看到的,可能是史上最为通俗易懂的BP图文讲解, ...

  3. 深度学习入门教程UFLDL学习实验笔记一:稀疏自编码器

     深度学习入门教程UFLDL学习实验笔记一:稀疏自编码器 UFLDL即(unsupervised feature learning & deep learning).这是斯坦福网站上的一篇 ...

  4. 深度学习入门之PyTorch学习笔记:卷积神经网络

    深度学习入门之PyTorch学习笔记 绪论 1 深度学习介绍 2 深度学习框架 3 多层全连接网络 4 卷积神经网络 4.1 主要任务及起源 4.2 卷积神经网络的原理和结构 4.2.1 卷积层 1. ...

  5. 深度学习入门之PyTorch学习笔记:深度学习介绍

    深度学习入门之PyTorch学习笔记:深度学习介绍 绪论 1 深度学习介绍 1.1 人工智能 1.2 数据挖掘.机器学习.深度学习 1.2.1 数据挖掘 1.2.2 机器学习 1.2.3 深度学习 第 ...

  6. 深度学习入门|第5章 误差反向传播法(二)

    误差反向传播法 前言 此为本人学习<深度学习入门>的学习笔记 四.简单层的实现 本节将用 Python 实现前面的购买苹果的例子.这里,我们把要实现的计算图的乘法节点称为"乘法层 ...

  7. Day9 深度学习入门

    参数的更新 神经网络学习的目的是找到使损失函数的值尽可能小的参数.常见的有以下四种: SGD(stochastic gradient descent).Momentum.AdaGrad.Adam. A ...

  8. 使用TensorFlow.js在浏览器中进行深度学习入门

    目录 设置TensorFlow.js 创建训练数据 检查点 定义神经网络模型 训练AI 测试结果 终点线 内存使用注意事项 下一步是什么?狗和披萨? 下载TensorFlowJS示例-6.1 MB T ...

  9. 深度学习入门笔记(六):误差反向传播算法

    专栏--深度学习入门笔记 推荐文章 深度学习入门笔记(一):机器学习基础 深度学习入门笔记(二):神经网络基础 深度学习入门笔记(三):感知机 深度学习入门笔记(四):神经网络 深度学习入门笔记(五) ...

最新文章

  1. 退信之550 5.7.1 Unable to relay for *@*.com
  2. PC软件/web网站/小程序/手机APP产品如何增加个人收款接口
  3. SASS type-of 函数
  4. 用python同时画多个分布图
  5. 基本数据类型之间的运算
  6. 前端JavaScripts基础知识点轮播图
  7. Kafka Broker常用配置详解
  8. 4.3 Siamese 网络
  9. Go语言并发模型:使用 context
  10. eclipse class 中无法打断点
  11. Elasticsearch中的嵌套查询介绍及实例
  12. Java中string,map,json之间的常用转换方法(json转map,map转json,json转string等)
  13. uni-app项目中使用scss语法
  14. linux zip 删除源文件,linux zip命令参数及用法详解--linux压缩zip文件命令
  15. 完美.PCK文件不完全详解
  16. /home/ljx/miniconda3/compiler_compat/ld: cannot find crtbeginS.o: 没有那个文件或目录
  17. RK3568-SARADC
  18. 何以雾霾多妩媚,只在此间总朦胧
  19. 位运算符+位运算的应用
  20. openssl加密base64编码

热门文章

  1. XLINX项目之基于ZYNQ7020的健康码识别系统
  2. 常用排序算法之选择排序
  3. C#如何实现Windows自带打印功能
  4. Linux 部署企业生产环境中最常用的 RAID10 磁盘阵列(虚拟机环境)
  5. 解决springcloud 中各服务之间调用外部依赖的clint api时,在调试时不方便的问题
  6. Kintex7XC7K325T板卡七仙女
  7. window快捷键操作
  8. DBLinq mysql辅助脚本
  9. 从 cs1.5的经典c4入手点亮创客技能树
  10. 计算机等级考试信息安全技术三级笔记(1)