深度学习入门之感知机

深度学习入门之感知机

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



前言

本文将简单介绍感知机(perceptron)这一算法,感知机是由美国学者Frank Rosenblatt在1957年提出的,为什么要介绍感知机算法呢?主要是因为感知机是作为神经网络(深度学习)的起源的算法。


一、感知机是什么?

感知机接收多个输入信号,输出一个输出信号,但是感知机的信号只有0和1,0表示不传递信号,1表示传递信号。从另外一个角度来讲,感知机也称为‘人工神经元’或者‘朴素感知机’。

两输入感知机
由上图可知,一个接收两个输入信号的感知机,输入信号X1和X2,Y为输出信号,W1和W2是各个输入信号到输出信号的权重。图中的圆圈o称为‘神经元’或者‘节点’。输入信号送进神经元,经过和各自的权重相乘(X1W1、X2W2),得到的结果会被送入输出信号进行求和,只有当这个总和超过了某一个限定值,输出信号才会输出1,这个也称作神经元激活,这个设定值我们称为阈值,用 Q表示。
如果用数学公式表示,感知机的运作过程如下:

当 (X1W1+X2W2≤Q)时,Y输出0;
当(X1W1+X2W2>Q)时,Y输出1.

感知机的多个输入信号都有各自固有的权重参数,这些权重参数控制着各个输入信号的重要性,权重越大,输入信号的重要程度就越高。

二、简单逻辑电路

1.与门

从感知机原理上来说,与门相当于一个两输入一输出的门电路,真值表如下:

x1x2y
000
100
010
111

如果考虑使用感知机来表示这样一个与门电路的逻辑,只要我们将感知机的权重参数W和输出阈值Q进行一定的设定就可以完成与门逻辑。(W1,W2,Q)满足上述真值表的情况的设定,可能取(W1,W2,Q)=(0.5,0.5,0.7),使用计算公式可以发现:

x1w1x2w2Q符号y
00.500.50.70x0.5+0x0.5<0.70
10.500.50.71x0.5+0x0.5<0.70
00.510.50.70x0.5+1x0.5<0.70
10.510.50.71x0.5+1x0.5>0.71

通过计算可以很好的发现,感知机实现了与门逻辑。此外,满足这样计算的权重参数不唯一,还有(W1,W2,Q)=(0.5,0.5,0.8)以及(1.0,1.0,1.0)都满足与门逻辑的真值表。

2.与非门

从感知机原理上来说,与非门相当于一个两输入一输出的门电路,其就是相当于将与门的逻辑输出进行一个取反操作,真值表如下:

x1x2y
001
101
011
110

如果考虑使用感知机来表示这样一个与非门电路的逻辑,只要我们将感知机的权重参数W和输出阈值Q进行一定的设定就可以完成与非门逻辑。由于只是将输出取反,因此(W1,W2,Q)满足上述真值表的情况的设定,可能取(W1,W2,Q)=(-0.5,-0.5,-0.7),使用计算公式可以发现:

x1w1x2w2Q符号y
0-0.50-0.50.70x-0.5+0x-0.5>-0.71
1- 0.50-0.50.71x-0.5+0x-0.5>-0.71
0- 0.51-0.50.70x-0.5+1x-0.5>-0.71
1- 0.51-0.50.71x-0.5+1x-0.5<-0.70

通过计算可以很好的发现,感知机实现了与非门逻辑。此外,满足这样计算的权重参数也是不唯一,还有(W1,W2,Q)满足与非门逻辑的真值表。

3.或门

从感知机原理上来说,或门相当于一个两输入一输出的门电路,真值表如下:

x1x2y
000
101
011
111

如果考虑使用感知机来表示这样一个或门电路的逻辑,只要我们将感知机的权重参数W和输出阈值Q进行一定的设定就可以完成或门逻辑。(W1,W2,Q)满足上述真值表的情况的设定,可能取(W1,W2,Q)=(0.5,0.5,0.4),使用计算公式可以发现:

x1w1x2w2Q符号y
00.500.50.40x0.5+0x0.5<0.40
10.500.50.41x0.5+0x0.5>0.41
00.510.50.40x0.5+1x0.5>0.41
10.510.50.41x0.5+1x0.5>0.41

通过计算可以很好的发现,感知机实现了或门逻辑。此外,满足这样计算的权重参数也是不唯一,还有很多(W1,W2,Q)满足或门逻辑的真值表。

小结

以上过程,利用简单的感知机原理实现了对与、与非、或逻辑,只是权重参数W和阈值Q的变化就使得感知机可以实现不同的逻辑运算。
但是有人可能会发现以上运算,我们都是预先知道了结果,可以说是我们通过结果拼凑出的感知机参数,但是实际上在计算机上,它们并不会如此选择参数。所以学习合适的参数的过程,就是机器学习的学习过程,将训练数据交给计算机,计算机自动决定参数值。

三、感知机的实现

1.简单实现与门

代码如下(示例):

def and(x1,x2):
w1,w2,theta = 0.5,0.5,0.7
temp=x1*w1+x2*w2
if temp <= theta:
	return 0
elif temp > theta:
	return 1
else
	print('error!') 

在函数内初始化权重参数w1,w2,阈值参数theta,,当输入信号的加权总和超过阈值就返回1,否则为0.

输入函数输出结果
and(0,0)0
and(0,1)0
and(1,0)0
and(1,1)1

通过上述结果,发现输出结果和与门逻辑的真值表一致,就简单实现了与逻辑。按照相同的步骤,我们也可以实现与非门、或门逻辑,只是对应的权重参数以及阈值参数不同而已。

2.导入权重和偏置

上述简单的与门实现,比较直接简单,但是考虑到后续方便,我们将其形式改为另一种形式,即将偏置参数Q换为-b,感知机的行为如下:
当 (X1W1+X2W2+b≤0)时,Y输出0;
当(X1W1+X2W2+b>0时,Y输出1.
只是换了一种形式而已,结果完成一致,b称为偏置,W1和W2称为权重,整个运算过程:感知机计算输入信号的加权和,并再和偏置相加得到最后的结果,结果大于0则输出1,否则输出为0。这种结构,我们可以更好使用Numpy来实现。
代码如下(示例):

import numpy as np
def and(x1,x2):
	x=np.array([x1,x2])
	w=np.array([0.5,0.5])
	b=0.7
	temp=np.sum(w*x)+b
	if temp <= 0:
		return 0
	else
		return 1
		

权重参数W和偏置参数b控制作用不同,权重参数控制输入信号的重要性程度,偏置参数控制整个神经元被激活的容易程度,如b=-0.1,则只需要输入信号的加权和超过0.1,神经元就会被激活,但是如果b=-20,那么输入函数的加权和就必须达到20,神经元才会被激活。
因此,只要改变权重参数和偏置参数,就可以很简单的实现其他逻辑,例如与非门:

import numpy as np
def Nand(x1,x2):
	x=np.array([x1,x2])
	w=np.array([-0.5,-0.5])
	b=-0.7
	temp=np.sum(w*x)+b
	if temp <= 0:
		return 0
	else
		return 1
		

总结

简单对感知机进行介绍,也通过感知机原理实现了与逻辑、与非逻辑、或逻辑,但是现在描述的感知机还是处于较为简单的,属于单层感知机,功能还是比较单一,单层感知机只能够通过一根直线划分空间,只能进行线性空间划分,但是实际上,我们遇到的问题大都为非线性空间,即需要使用曲线进行划分,这个对单层感知机来说,还无法实现,这也是单层感知机的一个局限性。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值