深度学习入门之感知机
程序员文章站
2022-05-09 10:55:44
...
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
深度学习入门——感知机
记录自己的学习过程。
一、感知机是什么?
这里所说的感知机具体指的是“人工神经元”。,接收多个输入信号,输出一个信号。信号可以理解为电流。感知机的信号只有0,1即不流与流。一个感知机接受的所有信号x乘以各自权重w的总和如果超过了阈值θ,则称为“神经元被**”。
二、用感知机实现简单的逻辑电路
1.与门
与门(AND gate)真值表如下:
x1 | x2 | y |
---|---|---|
0 | 0 | 0 |
1 | 0 | 0 |
0 | 1 | 0 |
1 | 1 | 1 |
为了用感知机来实现与门,我们要做的就是调整权重和阈值,比如(w1, w2, θ) = (0.5, 0.5, 0.7)可以满足,又比如(0.5, 0.5, 0.8)也可以满足。只要信号(x)的加权总和能超过阈值就能满足,所以参数的选择为无数个。
为了以后的理解,将b= -θ。下文的括号内都为b。
数学表达式为:
代码实现为:
def AND(x1, x2):
x = np.array([x1, x2])
w = np.array([0.5, 0.5])
b = -0.7
tmp = np.sum(x*w)+b
if tmp <= 0:
return 0
elif tmp > 0:
return 1
2.与非门和或门
与非门不必多说,反转与门输出即可,将权重和阈值设置为相反数。或门需要对权重和阈值进行设置,例如(w1, w2, b) = (0.5, 0.5, -0.2)
代码实现为:
def NAND(x1, x2):
x = np.array([x1, x2])
w = np.array([-0.5, -0.5])
b = 0.7
tmp = np.sum(x*w)+b
if tmp <= 0:
return 0
elif tmp > 0:
return 1
def OR(x1, x2):
x = np.array([x1, x2])
w = np.array([0.5, 0.5])
b = -0.2
tmp = np.sum(x*w+b)
if tmp <= 0:
return 0
elif tmp > 0:
return 1
3.异或门
我们先来看看异或的真值表:
x1 | x2 | y |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 0 |
来画个图
我们发现一条直线无法实现真值表中的状态,所以我们需要曲线,异或也就是非线性的。无法使用一层感知机实现。
有趣的是,我们能够使用与,与非,或三个门的组合实现异或
这就叫二层感知机,代码如下:
def XOR(x1, x2):
s1 = NAND(x1, x2)
s2 = OR(x1, x2)
tmp = AND(s1, s2)
return tmp
总结
感知机是神经网络的基础,单层感知机可以实现线性空间,多层感知机可以实现非线性空间,理论上可以实现计算机。
上一篇: python数据分析之逻辑回归实践
下一篇: 【HIVE】(四)数据导入/导出