声明:此博客为个人笔记。参考书籍详见https://www.ituring.com.cn/book/1921
1、感知机是什么
感知机是神经网络(深度学习)的起源的算法。感知机接受多个输入信号,输出一个信号(输出是目的)
感知机图示如下:
感知机数学表达式如下:
其中x1、x2 是输入信号,y 是输出信号,w1、w2 是权重(w 是 weight 的首字母)。图中的○称为“神经元”或者“节点”。输入信号被送往神经元时,会被分别乘以固定的权重(w1x1、w2x2)。神经元会计算传送过来的信号的总和,只有当这个总和超过了某个界限值时,才会输出 1。这也称为“神经元被激活”。这里将这个界限值称为阈值,用符号 θ 表示。
2.1式的另外一种表达为:
式(2.1)和式(2.2)虽然有一个符号不同,但表达的内容是完全相同的。此处,b 称为偏置(即阈值 θ的相反数),w1 和 w2 称为权重。如式(2.2)所示,感知机会计算输入信号和权重的乘积,然后加上偏置,如果这个值大于 0 则输出 1,否则输出 0。
在机器学习中,就是将决定参数w的工作交由计算机自动进行。机器学习的本质就是确定合适参数的过程,而人要做的是思考感知机的构造(模型),并把训练数据交给计算机。
2、理解感知机
感知机就是接受多个信号并输出一个信号。我们从逻辑电路原理(两个输入一个输出)中进一步理解感知机。主要包括四个逻辑:与门、非与门、或门以及 异或门
2.1与门(AND gate)
当x1个x2均为1时,输出的y值为1。
与门代码实现如下:
import numpy as np
def AND(x1,x2):
x = np.array([x1,x2])
w = np.array([0.5,0.5])
b = -0.6
temp = np.sum(w*x)+b
if temp <=0:
return 0
else:
return 1
2.2与非门(NAND gate)
与非门就是颠倒了与门的输出
代码试下如下:
import numpy as np
def NAND(x1,x2):
x = np.array([x1,x2])
w = np.array([0.5,0.5])
b = -0.6
temp = np.sum(x*w) + b
if temp >0:
return 0
else:
return 1
2.3或门(OR gate)
只要有一个输入信号为1,输出结果就为1
def OR_gate(x1,x2):
x = np.array([x1,x2])
w = np.array([0.5,0.5])
b = -0.5
temp = np.sum(x*w) + b
if temp >= 0:
return 1
else:
return 0
2.4异或门(XOR gate)
异或门也被称为逻辑异或电路。使用感知机可以简单实现与门、与非门和或门,实际上,用单层感知机是无法实现异或门的。为什么呢?原因如下:
图1中:
在图1中有灰色和白色两个区域,分别代表两种不同的类别,可以找到一条直线把两个区域分开;但是要想把图2中的灰色区域和白色区域分开,直线是不可能的,只能用曲线,由图2这样的曲线分割二而成的空间称为非线性空间。
那么如何在线性空间中将两类别分类呢?答案是多层感知机
2.41多层感知机
异或门的制作方法有很多,其中之一就是组合我们前面做好的与门、与非门、或门进行配置。这里,与门、与非门、或门用图 2-9 中的符号表示。另外,图 2-9 中与非门前端的○表示反转输出的意思。
异或门可以通过图 2-11 所示的配置来实现。这里,x1 和 x2 表示输入信号,y 表示输出信号。x1 和 x2 是与非门和或门的输入,而与非门和或门的输出则是与门的输入。
由此,实现了异或门。
异或门的代码如下:
def XOR(x1,x2):
s1 = NAND(x1,x2)
s2 = OR_gate(x1,x2)
y = AND(s1,s2)
return y
总结
感知机就是建立多个输入值和一个输出值之间关系的一种映射,它是深度学习的基础,我们需要做的有两件事:构建与非门、调参,其余的交给计算机。
理论上说,2层感知机就能构建计算机(通过与非门的组合),毕竟计算机的二进制中只有0和1。