深度学习(一):感知机

感知机是作为神经网络的起源算法,因此,学习感知机的构造也是很有帮助的。

一,感知机是什么

感知机接收多个输入信号,输出一个信号。信号只有0和1两种取值。 如下是一个接收两个输入信号的感知机

图中, <math xmlns="http://www.w3.org/1998/Math/MathML"> x 1 , x 2 x_1,x_2 </math>x1,x2是输入信号, <math xmlns="http://www.w3.org/1998/Math/MathML"> y y </math>y是输出信号, <math xmlns="http://www.w3.org/1998/Math/MathML"> w 1 , w 2 w_1,w_2 </math>w1,w2是权重,○称为神经元或节点。输入信号被送往神经元时,会被分别乘以固定的权重。神经元会计算传送过来的信号的总和,只有当这个总和超过了某个界限值时,才会输出1。用数学式来表示,如下所示:

可以看出来,权重越大,对输出的结果影响越大,也就是说对应该权重的信号的重要性越高

二,简单逻辑电路

考虑用感知器来解决逻辑电路,先介绍一下一些逻辑电路。

与门

首先是与门,与门的特点就是有0则0,全1才1

与非门和或门

与非门就是相同则1,不同则0

或门就是有1则1,无1则0

感知机模拟

对于上面三个门,要用 <math xmlns="http://www.w3.org/1998/Math/MathML"> w 1 x 1 + w 2 x 2 w_1x_1+w_2x_2 </math>w1x1+w2x2和 <math xmlns="http://www.w3.org/1998/Math/MathML"> θ θ </math>θ比较大小,大于则 <math xmlns="http://www.w3.org/1998/Math/MathML"> y = 1 y=1 </math>y=1,反之则 <math xmlns="http://www.w3.org/1998/Math/MathML"> y = 0 y=0 </math>y=0 可以发现很多值都可以使其实现,譬如: 对于与门而言,当 <math xmlns="http://www.w3.org/1998/Math/MathML"> ( w 1 , w 2 , θ ) (w_1,w_2,θ) </math>(w1,w2,θ)为 <math xmlns="http://www.w3.org/1998/Math/MathML"> ( 0.5 , 0.5 , 0.8 ) (0.5,0.5,0.8) </math>(0.5,0.5,0.8)时即可满足 对于与非门而言,当 <math xmlns="http://www.w3.org/1998/Math/MathML"> ( w 1 , w 2 , θ ) (w_1,w_2,θ) </math>(w1,w2,θ)为 <math xmlns="http://www.w3.org/1998/Math/MathML"> ( − 0.5 , − 0.5 , − 0.8 ) (-0.5,-0.5,-0.8) </math>(−0.5,−0.5,−0.8)时即可满足 对于或门而言,当 <math xmlns="http://www.w3.org/1998/Math/MathML"> ( w 1 , w 2 , θ ) (w_1,w_2,θ) </math>(w1,w2,θ)为 <math xmlns="http://www.w3.org/1998/Math/MathML"> ( 1 , 1 , 0.5 ) (1,1,0.5) </math>(1,1,0.5)时即可满足

在这个模拟过程中, <math xmlns="http://www.w3.org/1998/Math/MathML"> ( w 1 , w 2 , θ ) (w_1,w_2,θ) </math>(w1,w2,θ)取值都是由我们结合真值表人工考虑的。而机器学习的目的就是把这个考虑决定过程交给计算机

三,感知机的实现

1,简单实现

用Python来实现一下之前的与门

scss 复制代码
def AND(x1, x2):
  w1, w2, theta = 0.5, 0.5, 0.8
  tmp = x1*w1 + x2*w2
  if tmp <= theta:
    return 0
  elif tmp > theta:
    return 1

print(AND(0, 0))
print(AND(1, 0))
print(AND(0, 1))
print(AND(1, 1))

输出结果为

2,导入权重和偏置

将之前的式子改写一下, <math xmlns="http://www.w3.org/1998/Math/MathML"> θ θ </math>θ换成 <math xmlns="http://www.w3.org/1998/Math/MathML"> − b -b </math>−b,可以表示如下

将b称为偏置 , <math xmlns="http://www.w3.org/1998/Math/MathML"> w 1 和 w 2 w_1和w_2 </math>w1和w2称为权重。

所以通过此处的定义,感知机的理解就可以变为:感知机会计算输入信号和权重的乘积,然后加上偏置,如果这个值大于0则输出1,否则输出0。

需要注意的是,偏置和权重的作用是不同的, <math xmlns="http://www.w3.org/1998/Math/MathML"> w 1 和 w 2 w_1和w_2 </math>w1和w2是控制输入信号的重要性的参数,而偏置是调整神经元被激活的容易程度的参数

3,使用权重和偏置实现

因为常常处理的是多维数组,所以在这里用numpy来实现1中的与门

ini 复制代码
def AND(x1, x2):
  x =  np.array([x1, x2])
  w = np.array([0.5, 0.5])
  b = -0.8
  tmp = np.sum(w*x) + b #算的就是wx的和再加偏置
  if tmp <= 0:
    return 0
  else:
    return 1

四,感知机的局限性

还有一个逻辑电路叫或门和异或门,当权重参数 <math xmlns="http://www.w3.org/1998/Math/MathML"> ( b , w 1 , w 2 ) = ( − 0.5 , 1 , 1 ) (b, w_1, w_2)=(-0.5, 1, 1) </math>(b,w1,w2)=(−0.5,1,1)时,可满足或门,此时感知机可用如下所示:

在坐标轴里面可如下所示

画出了一条直线,直线上面的代表输出为1的空间,下面的代表输出为0的。将那四个真值表中的 <math xmlns="http://www.w3.org/1998/Math/MathML"> ( x 1 , x 2 ) (x_1, x_2) </math>(x1,x2)也画到图中也能发现是完美划分开

那么如果我们看一下异或门的的真值表

然后画到坐标轴中如下所示

此时,如果我们想画一条直线将○和△分开,那是不可能的。只能用弯曲的曲线来分开,如下所示

感知机的局限性就在于它只能表示由一条直线分割的空间。

五,多层感知机

在逻辑电路中,异或门的实现是可以通过其他门的组合来实现的,如下

如果我们用感知机的表示方法,来表示这个异或门,如下图所示

可以详细比较一下这个图和上一个图,这块是使用了两层,这种多层的也被称为多层感知机

在上图中,第0层的两个神经元接收 <math xmlns="http://www.w3.org/1998/Math/MathML"> ( x 1 , x 2 ) (x_1, x_2) </math>(x1,x2),并将信号发送给第1层的神经元;第1层的神经元再将信号发送给第2层的神经元,第2层的神经元输出y。这也就是说,通过叠加层,感知机可以表示出更加灵活复杂的东西

相关推荐
ybdesire1 小时前
nanoGPT用红楼梦数据从头训练babyGPT-12.32M实现任意问答
人工智能·深度学习·语言模型
geekrabbit2 小时前
机器学习和深度学习的区别
运维·人工智能·深度学习·机器学习·浪浪云
Python极客之家6 小时前
基于深度学习的眼部疾病检测识别系统
人工智能·python·深度学习·毕业设计·卷积神经网络
kay_5457 小时前
YOLOv8改进 | 模块缝合 | C2f 融合SCConv提升检测性能【CVPR2023】
人工智能·python·深度学习·yolo·目标检测·面试·yolov8改进
FL16238631298 小时前
[数据集][目标检测]无人机飞鸟检测数据集VOC+YOLO格式6647张2类别
深度学习·yolo·目标检测
开着奔驰种地8 小时前
PaddleNLP本文分类及docker部署流程
深度学习·docker·文本分类·paddle
徳一8 小时前
【pytorch学习笔记,利用Anaconda安装pytorch和paddle深度学习环境+pycharm安装---免额外安装CUDA和cudnn】
pytorch·深度学习·学习
#include<菜鸡>9 小时前
动手学深度学习(pytorch土堆)-05-1神经网络
pytorch·深度学习·神经网络
FHYAAAX10 小时前
【机器学习】任务五:葡萄酒和鸢尾花数据集分类任务
深度学习·机器学习