从感知机到神经网络

神经网络的例子

用图来表示神经网络,如图所示。我们把最左边的一列称为输入层,最右边的一列称为输出层,中间的一列称为中间层。中间层有时也称为隐藏层。图中,第0层对应输入层,第1层对应中间层,第2层对应输出层。

只看上图的话,神经网络的形状类似于上一章的感知机。实际上,就神经元的连接方式而言,与上一章的感知机并没有任何差异。

复习感知机

图1-1

图1-1中的感知机接收x1和x2两个输入信号,输出y。如果用数学式来表示图中的感知机,则如式1所示。

式1

b是被称为偏置的参数,用于控制神经元被激活的容易程度;而w1和w2是表示各个信号的权重的参数,用于控制各个信号的重要性。
在图1-1的网络中,偏置b并没有被画出来。如果要明确地表示出b,可以在如图1-2中添加了权重为b的输入信号1。这个感知机将x1、x2、1三个信号作为神经元的输入,将其和各自的权重相乘后,传送至下一个神经元。在下一个神经元中,计算这些加权信号的总和。如果这个总和超过0,则输出1,否则输出0。

图1-2

我们用一个函数来表示这种分情况的动作(超过0则输出1,否则输出0)。引入新函数h(x),将式1改写成下面两个式子。

式2

式3

式2中,输入信号的总和会被函数h(x)转换,转换后的值就是输出y。
式3子所表示的函数h(x),在输入超过0时返回1,否则返回0。
式1和式2、式3做的是相同的事情。

激活函数登场

刚才登场的h(x)函数会将输入信号的总和转换为输出信号,这种函数一般称为激活函数
现在我们将式2分两个阶段进行处理

式4

式4计算加权输入信号和偏置的总和,记为a。

式5

式5用h()函数将a转换为输出y。

明确显示激活函数的计算过程

如图所示,表示神经元的○中明确显示了激活函数的计算过程,即
信号的加权总和为节点a,然后节点a被激活函数h()转换成节点y。

激活函数

sigmoid函数

神经网络中经常使用的一个激活函数就是式6表示的sigmoid函数

式6

神经网络中用sigmoid函数作为激活函数,进行信号的转换,转换后的信号被传送给下一个神经元。

阶跃函数的实现

阶跃函数如式3所示,当输入超过0时,输出1,否则输出0。

def step_function(x):if x > 0:return 1else:return 0

这个实现简单、易于理解,但是参数x只能接受实数(浮点数)。也就是说,允许形如step_function(3.0)的调用,但不允许参数取NumPy数组。

所以,我们将其修改一下:

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

阶跃函数的图形

现在我们就用图来表示上面定义的阶跃函数

import numpy as np
import matplotlib.pylab as plt
def step_function(x):return np.array(x > 0, dtype=np.int)
x = np.arange(-5.0, 5.0, 0.1) # 在−5.0到5.0的范围内,以0.1为单位,生成NumPy数组([-5.0, -4.9,..., 4.9])
y = step_function(x)
plt.plot(x, y) # 对数组x、y进行绘图
plt.ylim(-0.1, 1.1) # 指定y轴的范围
plt.show()

运行结果

如图所示,阶跃函数以0为界,输出从0切换为1(或者从1切换为0)。它的值呈阶梯式变化,所以称为阶跃函数。

sigmoid函数的实现

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

用图来表示sigmoid函数

import numpy as np
import matplotlib.pylab as plt
def sigmoid(x):return 1 / (1 + np.exp(-x))
x = np.arange(-5.0, 5.0, 0.1) # 在−5.0到5.0的范围内,以0.1为单位,生成NumPy数组([-5.0, -4.9,..., 4.9])
y = sigmoid(x)
plt.plot(x, y) # 对数组x、y进行绘图
plt.ylim(-0.1, 1.1) # 指定y轴的范围
plt.show()

sigmoid函数和阶跃函数的比较


不同点:
首先注意到的是“平滑性”的不同。sigmoid函数是一条平滑的曲线,输出随着输入发生连续性的变化。而阶跃函数以0为界,输出发生急剧性的变化。sigmoid函数的平滑性对神经网络的学习具有重要意义。
另一个不同点是,相对于阶跃函数只能返回0或1,sigmoid函数可以返
回0.731 …、0.880 …等实数(这一点和刚才的平滑性有关)。也就是说,感
知机中神经元之间流动的是0或1的二元信号,而神经网络中流动的是连续
的实数值信号。
共同点:
当输入信号为重要信息时,阶跃函数和sigmoid函数都会输出较大的值;
当输入信号为不重要的信息时,两者都输出较小的值。
两者不管输入信号有多小,或者有多大,输出信号的值都在0到1之间。

非线性函数

阶跃函数和sigmoid函数还有其他共同点,就是两者均为非线性函数
神经网络的激活函数必须使用非线性函数。使用线性函数时,无法发挥多层网络带来的优势。为了发挥叠加层所带来的优势,激活函数必须使用非线性函数。

ReLU函数

在神经网络发展的历史上,sigmoid函数很早就开始被使用了,而最近则主要使用ReLU函数。

ReLU函数可以表示为下面的式子

式7

实现代码

def relu(x):return np.maximum(0, x) # maximum函数会从输入的数值中选择较大的那个值进行输出

深度学习入门基于Python的理论与实现——神经网络(一)相关推荐

  1. 深度学习入门 基于Python的理论与实现

    作者:斋藤康毅 出版社:人民邮电出版社 品牌:iTuring 出版时间:2018-07-01 深度学习入门 基于Python的理论与实现

  2. 《深度学习入门——基于Python的理论与实现》笔记

    PS:写这篇博客主要是记录下自己认为重要的部分以及阅读中遇到的些问题,加深自己的印象. 附上电子书及源代码: 链接:https://pan.baidu.com/s/1f2VFcnXSSK-u3wuvg ...

  3. 深度学习入门-基于Python的理论入门与实现源代码加mnist数据集下载推荐

    深度学习入门-基于Python的理论入门与实现源代码加mnist数据集下载推荐 书籍封面 1-图灵网站下载 书里也说了,可以图灵网站下载https://www.ituring.com.cn/book/ ...

  4. 《深度学习入门-基于Python的理论与实现》学习笔记1

    <深度学习入门-基于Python的理论与实现>学习笔记1 第一章Python入门 Python是一个简单.易读.易记的编程语言,可以用类似于英语的语法进行编写程序,可读性高,且能写出高性能 ...

  5. 《深度学习入门--基于python的理论与实现》——斋藤康毅读书笔记

    <深度学习入门--基于python的理论与实现>读书笔记(第二章) 写在前面 第二章:感知机 2.1感知机是什么 2.2简单的逻辑电路 2.2.1与门(and gate) 2.2.2与非门 ...

  6. 深度学习入门基于Python的理论与实现_第一章_Python入门(原创笔记)

    前言 此书使用Python作为编程语言,尽可能地少使用外部库,从零开始实现深度学习的程序. 此书从简单的机器学习问题开始,最终实现一个能高精度地识别图像的系统. 此书以图像识别为主题,主要学习使用深度 ...

  7. python从入门到精通 邮电出版社_《人民邮电出版社Python深度学习入门:基于PYTHON的理论与实现》【价格 目录 书评 正版】_中国图书网...

    译者序 xiii 前言 xv 第 1 章 Python入门 1 1.1 Python是什么 1 1.2 Python的安装 2 1.2.1 Python版本 2 1.2.2 使用的外部库 2 1.2. ...

  8. 《深度学习入门——基于Python的理论与实现》斋藤康毅学习笔记(二)

    第二章 感知机 1逻辑门 错误:python 出现的异常 inconsistent use of tabs and spaces in indentation 意思是:在缩进中不一致地使用制表符和空格 ...

  9. 深度学习入门-基于Python的理论与实现-斋藤康毅(待续)

    神经网络的学习 损失函数 一般用均方误差和交叉熵误差函数 均方误差: 交叉熵误差函数: 基于im2col展开 因为老实做卷积,会有很多for循环,而且很慢 所以用im2col函数来避免使用for循环 ...

最新文章

  1. python map()函数
  2. h5py快速入门指南
  3. 做人应该知道的十个道理
  4. [YTU]_2917(Shape系列-3)
  5. MySQL审查工具_MySQL审计工具Audit插件使用
  6. android studio安装教程完整,Android Studio 安装配置方法完整教程【小白秒懂】
  7. 穷人变富的过程中,最大的阻碍是什么?
  8. python简单代码-python实现顺序表的简单代码
  9. 20个基本电路图讲解_12v太阳能充电电路图大全
  10. 试试H3C Comware Platform Software Version 5.20
  11. meethigher-与骗子之间的对招
  12. c语言c11标准侯捷,C++新标准 C++11/14课件 (侯捷) 完整PDF
  13. 苹果支付成功后,JAVA服务端二次验证
  14. AJAX处理返回的XML字符串
  15. 循环单链表及C语言实现
  16. 腾讯云TCA运维考试题
  17. HTML/XML转义字符对照表ASCII码对照表
  18. 同步时钟系统架构与原理
  19. 稀疏表征:稀疏字典构建
  20. lammps教程:均方位移MSD计算方法介绍

热门文章

  1. 博客-hexo-matery主题改造笔记
  2. 2021年安全员-B证及安全员-B证模拟试题
  3. XP退役,IE6再见
  4. 标准工业控制编程语言IEC61131-3简述
  5. 2019中国5G产业市场研究报告
  6. 3.3.14 电压-电流转换电路
  7. tinyos_TinyOS-过去的爆炸
  8. 京东屏蔽一淘 是“抗争”还是“遮丑”?
  9. 年报解读 | 中国农业银行开启零售转型,2018年信用卡发卡量突破一亿张
  10. 机器学习实战中的函数学习记录