感知机:

接收多个信号,输出一个信号。

感知机信号取值:流/不流(0/1)

w1、w2是权重,权重越大,对应的信号的重要性越高,通过的信号就越大。图中⚪称为神经元或者节点,输入信号被送往神经元时,会分别乘以固定的权重(w1x1,w2x2),神经元会计算传来的信号的总和,只有当这个总和超过某个界限值时,才会输出1.这也称为“神经元被激活”。这个界限值称为阈值,用符号θ表示

数学表示:

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

与门(AND gate):只有两个输入都为1时,才可以输出1,其余都是0

eg:(w1,w2,θ)=(0.5,0.5,0.7)时,且x1和x2同时为1,信号加权总和才会超过给定的阈值。

所以实现与门就需要将感知机设定特定的参数后,仅x1和x2同时为1时,信号加权才会超过给定阈值。

与非门(NAND gate):颠倒了与门的输出,仅当x1和x2同时为1时,输出0,其他时候输出1。

要表示与非门,实际上就是将与门的参数值取反:(w1,w2,θ)=(-0.5,-0.5,-0.7),就可以实现与非门。

或门:只要有一个输入信号是1,输出就是1。

eg:(w1,w2,θ)=(0.5,0.5,-0.4),实现或门,就需要所有权重均大于阈值

感知机的实现

与门的实现

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

与门实现比较直接,在实现与非门和或门时,首先把的 θ换成−b,于是就可以用下式来表示感知机的行为。

b为偏置,用来调节神经元被激活的容易程度(输出信号为1)。

def NAND(x1,x2):
    w1,w2,b=-0.5,-0.5,0.7
    tmp=w1*x1+w2*x2+b
    if tmp>0:
        return 1
    else:
        return 0
print(NAND(0,0))
print(NAND(0,1))
print(NAND(1,0))
print(NAND(1,1))

def OR(x1,x2):
    w1,w2,b=0.5,0.5,-0.4
    tmp=w1*x1+w2*x2+b
    if tmp>0:
        return 1
    else:
        return 0
print(OR(0,0))
print(OR(0,1))
print(OR(1,0))
print(OR(1,1))

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐