感知机是什么? 感知机接受多个输入信号,输出一个信号 感知机的信号只有“流/不流”两种取值,0对应“不传递信号”,1对应“传递信号”。 输入信号在被送往神经元时,会被分别乘以固定的权重。神经元会计算传送过来的信号的总和,只有当这个总和超过某个界限值时,才会输出1。这也称为“神经元被激活”。 上述内容用数学式来表示,就是: y=0(w1x1+w2x2<=θ) 1 (w1x1+w2x2>θ) 简单逻辑电路 与门 and gate:与门是具有两个输出和一个输入的门电路。 与门仅在两个输入均为1时输出1,其他时候输出0 与非门 NAND gate 或门
感知机的实现 与门的实现
def AND(x1,x2): w1,w2,theta = 0.5,0.5,0.7 tmp = w1*x1+w2*x2 if tmp <= theta: return 0 elif tmp > theta: return 1导入权重和偏置 y=0(b+w1x1+w2x2<=0) 1(b+w1x1+w2x2>0) 偏置的值决定了神经元被激活的容易程度
感知机的局限性 异或门,仅当x1和x2中的一方为1时,才会输出1. 一条直线无法分开 真值表中的4个点
曲线分割的空间称为非线性空间,直线分割的空间称为线性空间。
多层感知机
异或门的实现 AND函数。NAND函数。OR函数。叠加
def XOR(x1, x2): s1= NAND(x1,x2) s2= OR(x1,x2) y=AND(s1,s2) return y反向传播网络
#定义激活函数 import numpy as np def sigmoid(x, deriv=Flase) if deriv==True: return x*(1-x) return 1/(1+np.exp(-x)) #网络结构 w0 = np.random.random(( , )) w1 = np.random.random(( , )) #前向传播 l0 = x l1 = sigmoid(np.dot(l0, w0)) l2 = sigmoid(np.dot(l1,w1)) l2_error = l2 - y #反向传播 l2_delta = l2_error * sigmode(l2, deriv=True) l1_error = np.dot(l2_delta, w1.T) l1_delta = l1_error*sigmode(l1, deriv=True) #更新参数 w1-=l1.T .dot( l2_delta) w0-=l0.T .dot( l1_delta)