终于研究生的事情告一段落,没想到研究生还能做自己喜欢的领域,导师人也很好。从今天开始再把基础完整的过一遍,沉下心来去学一门知识,做好一件事。
学习目的:感知机作为神经网络(深度学习)的起源算法,因此学习感知机的构造也就是学习通向神经网络和深度学习的一种重要思想。
感知机接收多个信号,输出一个信号。但是感知机的信号只有“流/不流”(1/0)两种。0对应“不传递信号”,1对“应传递信号”。
其中x1、x2作为两个输入信号,y为输出信号,w1,w2是权重(weight的首字母)。图中的○称为“神经元”或者“节点”。输入信号被送往神经元时,会分别乘以固定对应的权重(w1x1,w2x2).神经元会计算传送过来的信号总和w1x1+w2x2,只有当这个总和超过了某个界定的值时,才会输出1,也称为“神经元被激活”。这里称这个界定的值为“阈值”
感知机的多个输入信号都有自己的权重,这些权重发挥着控制各个信号的重要性的作用。权重越大,对应该权重的信号的重要程度就越大。
与门是有两个输入一个输出的门电路。与门仅在两个输入均为1时输出位1,其余都为0。
那么如何用感知机来表示这个与门?其实有无数种表示方法:(w1,w2,)=(0.5,0.5,0.7),(w1,w2,)=(0.5,0.5,0.8)或者(w1,w2,)=(1.0,1.0,1.0)
与非门就是颠倒了与门的输出结果 ,仅当x1,x2同时为1时,输出结果为0,其余都为1。
那么如何用感知机来表示这个与门?其实有无数种表示方法:只要实现把与门的参数值的符号取反就能实现与非门。
或门是“只要有一个输入信号是1,输出就为1”
tips:感知机是人工干预考虑了参数的值,而机器学习的课题就是将这个决定参数的工作让计算机自动进行。学习是确定合适的参数的过程,而人要做的是思考感知机的构造(模型),并把训练数据交给计算机。
与门感知机
def END(x1,x2):#定义一个感知机的函数
w1,w2,theta=0.5,0.5,0.7
tmp=x1*w1+x2*w2
if tmp<=theta:
return 0
elif tmp>theta:
return 1
虽然与上一个式子符号不同,但是表达的内容是完全一样的。其中b成为偏置(bias);w1,w2称为权重(weight)。感知机会计算输入信号和权重的乘积,然后再加上偏置,如果这个值大于0则输出1,如果小于0则输出0。
使用权重和偏置实现与门
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
==其中w1,w2是控制输入信号重要性的参数,而偏置是调整神经元被激活的难易程度的参数。==比如b=-0.1,则只要输入信号的加权和大于-0.1,神经元就会被激活;如果b=20,则输入信号的加权和大于20,神经元才能被激活。
使用权重和偏置实现与非门
def NEND(x1,x2):
x=np.array([x1,x2])
w=np.array([-0.5,-0.5])#仅权重和偏置与AND不同!
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 1
else:
return 0
与门、与非门、或门是具有相同构造的感知机,区别仅在于他们的权重和偏置参数不一样。因此仅通过设置不同的权重和参数的值就能实现不同的感知机。
异或门也被称为逻辑异或电路,仅当x1或x2中的一方为1时,才输出1,其余都为0。
其实用感知机是无法实现异或门的!
首先说一下或门,当(b,w1,w2)=(-0.5,1,1)时,满足或门的真值表。此时感知机可表示为
根据式子(2.3)可以得知,直线0.5+x1+x2=0把空间分为两个部分,其中一个输出为1,一个输出为0.
其中黄色部分为感知机输出为0的区域,图中三角形表示0,菱形表示1,要实现感知机,只需要把三角形和菱形分开就行。图中蓝色 的直线也将三角形和菱形分开了。
那么换成异或门来看看?
很显然,一条直线已经不能把三角形和菱形分开了!
上图中无法用一条直线将三角形和菱形分开,但如果把“直线”这条限制去掉就可以了。
感知机的局限性就在于他只能表示由一条直线分割的空间。弯曲的曲线就不能用感知机表示
如图,这样由曲线分割而成的空间称为非线性空间,由直线分割而成的空间称为线性空间。
单层感知机无法表示异或门,单层感知机无法分离线性空间。但是组合感知机(叠加层)可以实现异或门。
异或门的实现
def X1OR(x1,x2):
s1=NAND(x1,x2)
s2=OR(x1,x2)
y=AND(s1,s2)
return y
异或门是一种多层结构的神经网络,将最左边的一列称为第0层,中间的一列称为第1层。与门,或门是单层感知机,而异或门是2层感知机。叠加了多层的感知机称为多层感知机。
tips:上图所示的感知机由3层构成,但实质上拥有权重的层实质上只有2层(第0层和第1层,第1层和第2层之间),所以称之为2层感知机,不过有的文献认为其是三层构成的,称为“3层感知机”
单层感知机无法表示的东西,通过增加一层就可以解决,也就是说通过叠加层(加深层),感知机就能灵活的表示。
已有研究表明:2层感知机(严格的说是激活函数使用了非线性的sigmoid函数的感知机)可以表示任意函数
1.感知机是具有输入和输出的算法。给定一个输入之后,并输出一个既定的值
2.感知机将权重和偏置设定为参数
3.使用感知机可以表示与门和或门等逻辑电路
4.异或门无法通过单层感知机来表示
5.使用2层感知机可以实现异或门
6.单层感知机只能表示线性空间,而多层感知机可以表示非线性空间
7.多层感知机在理论上可以表示计算机