从零到一实现神经网络(一):感知机算法

本博客参考书籍:深度学习入门(斋藤康毅著)

感知机算法

1957年由美国学者Frank Rsenblatt提出,神经网络的起源算法。

概念

接收多个输入信号,输出一个信号(0或1)

下面举一个接受三个输入信号的感知机的例子
在这里插入图片描述

输入信号被神经元接收前,会被分别乘以各自的权重1,然后经过神经元的处理(此处的处理为对输入的神经元加权求和),得到一个神经元的拟输出值,当这个拟输出值大于一定的阈值时,神经元才会输出1,表明该神经元被激活了2

将上面的过程用数学表达式表示为:

在这里插入图片描述

从上面的数学表达式中,我们可以发现阈值实际上表示的是神经元被激活的容易程度,而且实际输出值final与输入是一个线性的关系,因此上面的数学表达式也可以写为
在这里插入图片描述

利用感知机实现简单的逻辑电路

感知机的理论我们大概清楚了,如何利用它来解决实际问题?

与门

特点:

输入全为1时输出1,否则输出0

真值表

与门是一个具有两个输入一个输出的门电路,输入信号与输出信号之间的关系参考下面的真值表

x1x2final
000
010
100
111
感知机实现
def AND(x1,x2):
	w1,w2,theta=0.5,0.5,0.7
	tmp=w1*x1+w2*x2
	if tmp<=theta:
		return 0
	else:
		return 1		

改进:
从上面算法中我们看到在计算拟输出tmp时,需要计算权重与输入值相乘表达式,当输入值很多时,这个表达式会十分冗长,为了解决这个问题,我们引入numpy数组运算

def AND(x1,x2):
	x=np.array([x1,x2])		# 引入numpy数组
	w=np.arry([0.5,0.5])	# 引入numpy数组
	b=-0.7	
	tmp=np.sum(w*x)+b
	if tmp<=0:
		return 0
	else:
		return 1

与非门

特点

输入都为1时输出0,否则输出1

真值表
x1x2final
001
011
101
110
感知机实现
def NAND(x1,x2):
	x=np.array([x1,x2])
	w=np.arry([-0.5,-0.5])
	b=0.7
	tmp=np.sum(w*x)+b
	if tmp<=0:
		return 0
	else:
		return 1	
		

或门

特点

只要有一个输出信号为1即输出1,否则输出0

真值表
x1x2final
000
011
101
111
感知机实现
def OR(x1,x2):
	x=np.array([x1,x2])
	w=np.arry([0.5,0.5])
	b=-0.2
	tmp=np.sum(w*x)+b
	if tmp<=0:
		return 0
	else:
		return 1

关于感知机的局限性

  1. 神经网络训练本质:仔细观察我们上面三种逻辑电路的实现过程,我们可以看到,只有权重参数和阈值不同,但却实现了不同的功能,实际上,神经网络的训练本质就是不断优化权重参数,在以后的学习过程中更要注意3
  1. 感知机局限性
    在这里插入图片描述

我们看到与门,与非门,或门都可以通过一个线性函数分割为两个空间,其中一个空间输出0,另外一个空间输出1.
但是异或门却无论如何都不能使用一个直线分割为两个空间,只能使用曲线分割为两个空间,像这样由直线分割而成的空间称为线性空间,由曲线分割而成的空间称为非线性空间

异或门

单个感知机不能表示出异或门,但是我们可以通过叠加多个感知机来实现

感知机实现

多层感知机实现异或门的方法有很多, 笔者在这里介绍一种:x1,x2输入作为与非门和或门的输入,与非门和或门的输出作为与门的输入

在这里插入图片描述

代码实现

def XOR(x1,x2):
	return AND(NAND(x1,x2),OR(x1,x2))

  1. 每个输入信号值都有各自的权重,这些权重表示输入信号的重要性。即权重值越高,对应的信号值对输出值的影响越大 ↩︎

  2. 实际上,在生物神经元的工作机理中,神经元并不会简单的对所有输入值生成输出值,而是当输入值达到一定的阈值后才会有所反应。笔者的理解:神经网络本就是一个仿生学知识,感知机这样的设定也是受到生物神经元的启发 ↩︎

  3. 笔者的感悟:所谓好的神经网络模型,就是被优化后的权重参数能够针对某一个问题达到优秀的拟合效果 ↩︎

  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夺笋123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值