欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

深度学习入门之感知机

程序员文章站 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

总结

感知机是神经网络的基础,单层感知机可以实现线性空间,多层感知机可以实现非线性空间,理论上可以实现计算机。