神经网络起源算法:感知机


注:以下内容参照 [日]斋藤康毅 所著《深度学习入门-基于Python的理论与实现》

感知机是什么

感知机(perceptron)是神经网络(深度学习)的起源算法。感知机接受多个信号,输出一个信号。
下图中 x 1 、 x 2 x_1、x_2 x1x2是输入信号, w 1 、 w 2 w_1、w_2 w1w2是权重,○表示“节点”或者“神经元”。
输入信号被送往神经元时,会被分别乘以固定的权重( w 1 x 1 、 w 2 x 2 w_1x_1、w_2x_2 w1x1w2x2),神经元会计算传送过来的信号的总和,只有当这个总和超出了某个界限,才会输出1,这也被称为“神经元被激活”。这个界限被称为阈值,用 θ \theta θ表示:
图1:单层感知机模型
在这里插入图片描述
用数学表达式表示为:
f ( x ) = { 0       ( w 1 x 1 + w 2 x 2 ≤ θ ) 1       ( w 1 x 1 + w 2 x 2 > θ ) 公 式 ( 1 ) f(x)=\left\{ \begin{aligned} 0 & \ \ \ \ \ (w_1x_1+w_2x_2≤ \theta ) \\ 1 & \ \ \ \ \ (w_1x_1+w_2x_2> \theta ) \\ \end{aligned} \right. 公式(1) f(x)={01     (w1x1+w2x2θ)     (w1x1+w2x2θ)(1)

感知机能做什么

以逻辑电路举例。逻辑电路中的与门(ANDD gate),是两个输入和一个输出的门电路,对应如下真值表,只有两个输入均为1时输出1:
表1:与门真值表

x 1 x_1 x1 x 2 x_2 x2 y y y
000
100
010
111

考虑用感知机表示这个与门,需要我们选取合适的 w 1 、 w 2 、 θ w_1、w_2、\theta w1w2θ,实际上,有无数种取法,例如:( w 1 , w 2 , θ w_1,w_2,\theta w1,w2,θ)=(0.5,0.5,0.7):
f ( x ) = { 0       ( 0.5 ∗ x 1 + 0.5 ∗ x 2 ≤ 0.7 ) 1       ( 0.5 ∗ x 1 + 0.5 ∗ x 2 > 0.7 ) ( 公 式 2 ) f(x)=\left\{ \begin{aligned} 0 & \ \ \ \ \ (0.5*x_1+0.5*x_2 ≤ 0.7 ) \\ 1 & \ \ \ \ \ (0.5*x_1+0.5*x_2 > 0.7 ) \\ \end{aligned} \right. (公式2) f(x)={01     (0.5x1+0.5x20.7)     (0.5x1+0.5x20.7)(2)

感知机python简单实现

简单实现
以下代码实现(公式2):

def AND(x1,x2):
    w1,w2,theta=0.5,0.5,0.7
    temp=x1*w1+x2*w2
    return 0 if temp<=theta else 1

print(AND(0,0)) # 输出0
print(AND(1,0)) # 输出0
print(AND(0,1)) # 输出0
print(AND(1,1)) # 输出1

引入权重和偏置
为方便理解和计算,我们将(公式1)转化为以下形式:
f ( x ) = { 0       ( b + w 1 x 1 + w 2 x 2 ≤ 0 ) 1       ( b + w 1 x 1 + w 2 x 2 > 0 ) 公 式 ( 3 ) f(x)=\left\{ \begin{aligned} 0 & \ \ \ \ \ (b+w_1x_1+w_2x_2≤ 0 ) \\ 1 & \ \ \ \ \ (b+w_1x_1+w_2x_2> 0 ) \\ \end{aligned} \right. 公式(3) f(x)={01     (b+w1x1+w2x20)     (b+w1x1+w2x20)(3)
以上公式中, b b b称为偏置, w 1 、 w 2 w_1、w_2 w1w2称为权重。
权重 w 1 、 w 2 w_1、w_2 w1w2控制参数的重要性,权重越大,参数越重要。
偏置 b b b控制神经元被激活的难易程度
引入偏置和权重概念,使用numpy计算的感知机python代码如下:

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
    return 0 if temp<=0 else 1

print(AND(0,0)) # 输出0
print(AND(1,0)) # 输出0
print(AND(0,1)) # 输出0
print(AND(1,1)) # 输出1

感知机的局限

尝试用感知机实现如下的“逻辑异或”(XOR)电路:
表2:异或门真值表

x 1 x_1 x1 x 2 x_2 x2 y y y
000
101
011
110

我们发现,用目前图1所表达的单层感知机模型,是无法表达表2的真值表的。那么为什么表1“与门”可以,表2异或门不可以呢?
对于表1对应的公式2,我们会生成如下图形:
图2:线性可分
在这里插入图片描述
一条直线 − 0.7 + 0.5 ∗ x 1 + 0.5 ∗ x 2 = 0 -0.7+0.5*x_1+0.5*x_2=0 0.7+0.5x1+0.5x2=0将0(图中●表示)和1(图中△)表示,分为两部分,而对于表2异或门,我们无论如何无法用一条直线将0和1其分开:
图2:线性不可分
在这里插入图片描述
能用直线分割而成的空间称为线性空间,如图2,反之称为非线性空间,如图3。因此单层感知机无法解决线性不可分问题。

多层感知机

感知机的绝妙之处在于,它是可以叠加的。例如异或门问题,可以用如下两层感知机解决:
图3:2层感知机实现异或门
NAND表示非门( x 1 和 x 2 x_1和x_2 x1x2只要有一个为0即输出1,否则为0)
OR表示或门( x 1 和 x 2 x_1和x_2 x1x2只要有一个为1即输出1,否则为0)
在这里插入图片描述
计算过程如下:
表3:2层感知机实现异或门的计算过程
在这里插入图片描述
异或门2层感知机,如图,第一列称为第0层:
在这里插入图片描述
叠加了多层的感知机,也被称为多层感知机,能进行非线性的表示。理论上将,2层感知机就能构建计算机的所有计算!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值