第一章感知机

张开发
2026/4/10 16:38:36 15 分钟阅读

分享文章

第一章感知机
目录感知机1.1 感知机的定义1.2 简单的逻辑电路1.2.1 与门1.2.2 与非门和或门1.3 感知机的实现1.3.1 简单实现1.3.2 导入权重和偏置1.3.3 使用权重和偏置实现感知机1.4 感知机的局限性1.5 多层感知机1.5.1已有门电路的组合1.5.2 异或门的实现1.6 从与非门到计算机总结感知机在学习深度学习神经网络之前 我们首先需要知道什么是感知机感知机是一种最简单的神经元他可以对输入的数据按照一定策略进行运算并对结果进行判断从而确定是否激活该神经元输出0或1同时通过叠加层可是实现更复杂的功能下面我们开始正式定义感知机。1.1 感知机的定义感知机是将输入乘各自的权值并将结果相加再判断是否超过激活阀值进行激活的机器这么说很难理解但是看公式就很好理解了y { 0 ( w 1 x 1 w 2 x 2 ≤ θ ) 1 ( w 1 x 1 w 2 x 2 θ ) y \left\{ \begin{array}{c} 0 (w_1x_1w_2x_2\le\theta) \\ 1 (w_1x_1w_2x_2\gt\theta) \\ \end{array} \right.y{01​(w1​x1​w2​x2​≤θ)(w1​x1​w2​x2​θ)​公式中θ \thetaθ表示阀值w ww表示权重x xx表示输入可以有多个输入1表示激活感知机0表示不激活感知机的输出只有一个1.2 简单的逻辑电路1.2.1 与门在了解了感知机的定义以后我们可以用感知机实现一些逻辑电路比如逻辑电路中的与门他的真值表如下输入x 1 x_1x1​输入x 2 x_2x2​输出y yy000010100111根据真值表我们可以设置感知机参数( w 1 , w 2 , θ ) ( 0.5 , 0.5 , 0.7 ) (w_1,w_2,\theta)(0.5,0.5,0.7)(w1​,w2​,θ)(0.5,0.5,0.7)来实现与门但这组数字并不唯一我们同样还可以设计参数( w 1 , w 2 , θ ) ( 0.3 , 0.3 , 0.4 ) (w_1,w_2,\theta)(0.3,0.3,0.4)(w1​,w2​,θ)(0.3,0.3,0.4)等来实现该功能其参数组不唯一。1.2.2 与非门和或门同与门类似根据与非门和或门的真值表输入x 1 x_1x1​输入x 2 x_2x2​输出y yy001011101110输入x 1 x_1x1​输入x 2 x_2x2​输出y yy000011101111我们可以分别选择感知机参数组( w 1 , w 2 , θ ) ( − 0.5 , − 0.5 , − 0.7 ) (w_1,w_2,\theta)(-0.5,-0.5,-0.7)(w1​,w2​,θ)(−0.5,−0.5,−0.7)和( w 1 , w 2 , θ ) ( 0.3 , 0.3 , 0.3 ) (w_1,w_2,\theta)(0.3,0.3,0.3)(w1​,w2​,θ)(0.3,0.3,0.3)来实现对应的与非门感知机和或门感知机且参数组不唯一。实际上与非门是对与门的取反运算所以与非门感知机参数组完全可以选用与门感知机参数组的相反数。以上提到的所有感知机参数都是我们人为想到的但是实际操作中并不需要我们自己去想这些参数而是通过机器学习将思考参数的工作交给计算机去完成人需要做的就是思考感知机的构造模型并把训练数据交给计算机即可。前面我们使用不同的参数构造了三种功能的感知机但是需要强调的是他们虽功能不同但是他们的构造是一样的他们是同一种感知机只需要通过调整适当的参数他们就可以实现不同的功能。1.3 感知机的实现1.3.1 简单实现这里我们用Python实现刚刚提到的与门defAND(x1,x2):w1,w2,theta0.5,0.5,0.7tmpx1*w1x2*w2iftmptheta:return0eliftmptheta:return1print(AND(0,0))#结果为0print(AND(0,1))#结果为0print(AND(1,0))#结果为0print(AND(1,1))#结果为11.3.2 导入权重和偏置我们把前面提到的阀值θ \thetaθ换成− b -b−b这样我们就得到了一个以零为界限判断是否激活感知机的新数学关系y { 0 ( b w 1 x 1 w 2 x 2 ≤ 0 ) 1 ( b w 1 x 1 w 2 x 2 0 ) y \left\{ \begin{array}{c} 0 (bw_1x_1w_2x_2\le0) \\ 1 (bw_1x_1w_2x_2\gt0) \\ \end{array} \right.y{01​(bw1​x1​w2​x2​≤0)(bw1​x1​w2​x2​0)​聪明的你可以发现这和最早提到的公式其实是一个内涵不过换了个形式这里的b称为偏置反映了激活感知机的难度他是阀值的相反数权重w是控制输入信号重要性的参数。1.3.3 使用权重和偏置实现感知机使用权重和偏执实现与门不过再实现之前需要导入NumpyimportnumpyasnpdefAND(x1,x2):xnp.array([x1,x2])#输入wnp.array([0.5,0.5])#权重b-0.7tmpnp.sum(w*x)b#大约是0.2由浮点小数运算造成误差iftmp0:return0eliftmp0:return1同理我们可以实现与非门和或门defNAND(x1,x2):xnp.array([x1,x2])#输入wnp.array([-0.5,-0.5])#权重b0.7tmpnp.sum(w*x)b#大约是0.2由浮点小数运算造成误差iftmp0:return0eliftmp0:return1defOR(x1,x2):xnp.array([x1,x2])#输入wnp.array([0.5,0.5])#权重b-0.2tmpnp.sum(w*x)b#大约是0.2由浮点小数运算造成误差iftmp0:return0eliftmp0:return11.4 感知机的局限性通过两输入的单层感知机我们可以实现与门与非门和或门但是请思考看看是否可以实现异或门下面给出异或门真值表输入x 1 x_1x1​输入x 2 x_2x2​输出y yy000011101110经过思考发现这是不可能的因为我们先拿或门使用参数组( b , w 1 , w 2 ) ( − 0.5 , 1 , 1 ) (b,w_1,w_2)(-0.5,1,1)(b,w1​,w2​)(−0.5,1,1)为例进行分析他的表达式和示意图如下y { 0 ( − 0.5 w 1 x 1 w 2 x 2 ≤ 0 ) 1 ( − 0.5 w 1 x 1 w 2 x 2 0 ) y \left\{ \begin{array}{c} 0 (-0.5w_1x_1w_2x_2\le0) \\ 1 (-0.5w_1x_1w_2x_2\gt0) \\ \end{array} \right.y{01​(−0.5w1​x1​w2​x2​≤0)(−0.5w1​x1​w2​x2​0)​图中三角表示激活或门圈表示不激活。可见我们是可以找到一条线型函数途中的点分成两部分的但是我们的异或门是这样的一个情况这这是一个不可用直线分割的非线性空间所以使用简单的感知机是无法实现异或功能的即单层感知机无法分离线性空间。1.5 多层感知机前面已经提到了单层感知机具有局限性它无法解决非线性空间中的问题这时我们可以使用叠加层的方法来解决这也是卷积神经网络的思想基础。1.5.1已有门电路的组合前面已经学习过三个门电路的感知机了可以通过一下两次的感知机实现异或门下面是该电路的真值表请查看是否与异或门的真值表相同通过叠加层在更高维度解决当前维度无法解决的问题这也是神经网络的工作原理。1.5.2 异或门的实现defXOR(x1,x2):s1NAND(x1,x2)s2OR(x1,x2)yAND(s1,s2)returnyprint(XOR(0,0))#输出0print(XOR(0,1))#输出1print(XOR(1,0))#输出1print(XOR(1,1))#输出0这种叠加了多层感知机的感知机结构就是多层感知机1.6 从与非门到计算机从上面的讲解可以看出通过感知机合多层感知机我们是可以构成多种门电路的我们的计算机就是由门电路构成的如果我们用多层感知机一个个的构成我们电脑的CPU内存和I/O电路实际上我们是可以用感知机构成一台虚拟电脑的。总结本节的学习到此就结束了本章学习的目的不是在于用感知机构成电路本章的重心在于通过感知机能够理解神经网络解决问题的一种思想和方式即通过叠加层或者说是提高维度来解决低纬度的问题这是本章学习的核心。

更多文章