深度学习入门之多层感知机

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



文章目录

  • 深度学习入门之多层感知机
  • 前言
  • 一、单层感知机局限性
  • 1.感知机?异或门
  • 2.小结
  • 二、多层感知机
  • 1.问题导入
  • 2.其他逻辑门组合
  • 3.多层感知机
  • 总结



前言

单层感知机由于存在局限性,只能划分线性空间,对于非线性空间的处理,对于单层感知机却无能为力,无法进行有效的划分,因此,需要学习多层感知机,用于处理非线性空间。


一、单层感知机局限性

感知机可以比较轻松实现与门、与非门、或门三种逻辑,如果不清楚可以查看上一篇文章,对感知机实现简单逻辑。

1.感知机?异或门

异或门也称异或逻辑,仅当下x1和x2中两者之间的值不同时,逻辑输出为1,两者的值相同时,逻辑输出为0;异或逻辑真值表如下:

x1

x2

y

0

0

0

1

0

1

0

1

1

1

1

0

我们可以发现,如果使用前一篇博客中的单层感知机是无法实现这个逻辑的,为什么呢?

首先,试着将或门逻辑划分的机制,简单分析,(w1,w2,theta)=(-0.5,1.0,1.0)时,感知机数学表示如下:

多层感知机 代码实现 多层感知机的作用_python

从数学公式的角度上,我们或许看不出空间上的规律,我们可以从另一个角度上来描述这个问题,即利用直线划分的空间:

多层感知机 代码实现 多层感知机的作用_感知机_02


黄线表示直线y=x-0.5,三角形表示输出为1的三个值得位置,圆形表示输出为0得位置,通过一条直线划分四个标志位置得方式来表示感知机实现或门逻辑的过程。

因此,对于单层感知机的过程就是通过一根直线去划分空间,使得空间分为两部分,直线下部分的区域输出为0;而直线上半部分输出为1,实现四个特征区域的划分,得到最终结果。


现在让我们回到异或门,那么异或门逻辑可以使用感知机实现吗?首先让我们看一下异或门的真值表:

x1

x2

y

0

0

0

1

0

1

0

1

1

1

1

0

但是从真值表中,我们还是比较难获取到有用的信息,所以,我们将异或门的四个特征值转移到空间中去,如下所示:

多层感知机 代码实现 多层感知机的作用_python_03


从空间去看异或门的四个特征值,我们发现不管使用怎么的直线去划分四个特征值,都会有一个特征值无法被正常划分,也就是说对于这个问题,单层感知机不能正常处理。

2.小结

单层感知机就是利用直线在空间里划分不同特征,所以单层感知机的局限性也就产生了,由于单层感知机只能只能使用直线划分空间,那也就意味着对于曲线划分特征的情况,单层感知机无能为力。
总结两个概念:
1、由直线分割而成的空间为线性空间
2、由曲线分割而成的空间为非线性空间。
也就是说对于单层感知机来说,它处理的问题只是停留在线性空间之中,对于非线性空间,它就无法适应。

二、多层感知机

1.问题导入

对于异或门逻辑上,它的四个特征值在空间的表示如下:

多层感知机 代码实现 多层感知机的作用_人工智能_04


单层感知机无法正常划分这四个特征值,因为单层感知机的局限性,它只能处理线性空间问题,而这个问题明显属于非线性问题,超出了单层感知机的处理范畴。

但是既然将上一篇博文中的感知机称为单层感知机,也就意味着感知机还存在多层的,所以针对这个异或门逻辑感知机的实现,展开分析。

2.其他逻辑门组合

多层感知机,正如其名,拥有多个单层感知机的一个新的感知机,它是多个单层感知机的叠加,正因为多层感知机可以进行叠加,也使得多层感知机可以处理非线性问题。

在前面,我们利用单层感知机实现了与门、与非门、或门逻辑的实现,那我们是不是可以利用这几个基本门逻辑来组合来实现异或门逻辑呢?

从门电路的处理中,发现这样的思路是可行的,实现的过程如下:

多层感知机 代码实现 多层感知机的作用_感知机_05


也就是说如果我们将三个单层感知机叠加在一起,理论上是可以对异或门的四个特征值进行划分。

根据组合逻辑可以将真值表表示:

x1

x2

s1

s2

y

0

0

1

0

0

1

0

1

1

1

0

1

1

1

1

1

1

0

1

0

通过门逻辑组合,由与非门单层感知机、与门单层感知机、或门单层感知机组合而成的二层感知机,就可以实现对异或门逻辑的特征划分。

接下来,就是利用上一篇博文中的简单单层感知机进行多层感知机的实现。

代码如下(示例):

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
		
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
		
def or(x1,x2):
	x=np.array([x1,x2])
	w=np.array([0.5,0.5])
	b=-0.2
	temp=np.sum(w*x)+b
	if temp <= 0:
		return 0
	else
		return 1
		
def xor(x1,x2):
	s1 = nand(x1,x2)
	s2 = or(x1,x2)
	y = and(s1,s2)
	return y

3.多层感知机

通过构建二层感知机实现异或门的过程,也实现了对多层感知机的构建,但是为什么说异或门是二层感知机呢?我们从异或门的网络上就可以看出:

多层感知机 代码实现 多层感知机的作用_多层感知机 代码实现_06


所以从网络结构上看,异或门可以认为是一种多层结构的神经网络,网络中虽然拥有三层网络,但是不能称为三层感知机,这是由于这些网络结构中,拥有权重的层级实际上只有两层,也就是第0层和第1层以及第1层和第2层,所以称为二层感知机。如果将其认为三层感知机,问题也不大,只是从不同角度对网络进行的一种解释。对于三层还是二层感知机,人各有所爱,但是我这里就根据权重层进行划分,将异或门称为二层感知机。


总结

以上就是对多层感知机的简单介绍。