1.何为感知机
如下图所示,是一个有两个输入的感知机。
x1、x2
代表输入信号,y
代表输出信号,w1、w2
是权重,圆圈代表神经元,信号被送往神经元时,会被乘以权重然后求和,根据求和的结果来决定输出:
y
=
{
0
(
w
1
x
1
+
w
2
x
2
≤
θ
)
1
(
w
1
x
1
+
w
2
x
2
>
θ
)
y=\left\{ \begin{aligned} 0\ \ \ \ (w_1x_1+w_2x_2\le\theta)\\ 1\ \ \ \ (w_1x_1+w_2x_2>\theta)\\ \end{aligned} \right.
y={0 (w1x1+w2x2≤θ)1 (w1x1+w2x2>θ)
2实现与门
def AND(x1,x2):
w1, w2, theta = 0.5, 0.5, 0.7
y = w1*x1 + w2*x2
if y <= theta:
return 0
else:
return 1
这里参数有很多种取法,下面将
θ
\theta
θ移到等式左边,用b表示:
y
=
{
0
(
w
1
x
1
+
w
2
x
2
+
b
≤
0
)
1
(
w
1
x
1
+
w
2
x
2
+
b
>
0
)
y=\left\{ \begin{aligned} 0\ \ \ \ (w_1x_1+w_2x_2+b\le0)\\ 1\ \ \ \ (w_1x_1+w_2x_2+b>0)\\ \end{aligned} \right.
y={0 (w1x1+w2x2+b≤0)1 (w1x1+w2x2+b>0)
用这种方式实现的与门:
import numpy as np
def ADD(x1, x2):
x = np.array([x1, x2])
w = np.array([0.5, 0.5])
b = -0.7
y = np.sum(w*x) + b
if y <= 0:
return 0
else:
return 1
同理,只要改变权重和偏置,就能实现与非门和或门。
3.实现异或门
从下图易知,异或门无法通过单层感知机实现。
为此,考虑用已有逻辑门的组合:
简单推导一下,
y
=
x
1
x
2
‾
⋅
(
x
1
+
x
2
)
=
(
x
‾
1
+
x
‾
2
)
⋅
(
x
1
+
x
2
)
=
x
‾
1
x
2
+
x
1
x
‾
2
y= \overline {x_1x_2} \cdot(x_1+x_2)=(\overline x_1+\overline x_2) \cdot(x_1+x_2)=\overline x_1x_2+x_1\overline x_2
y=x1x2⋅(x1+x2)=(x1+x2)⋅(x1+x2)=x1x2+x1x2,即异或门的逻辑表达式。
实现如下
def XOR(x1, x2)
s1 = NAND(x1, x2)
s2 = OR(x1, x2)
y = AND(x1, x2)
return y