什么是感知机?感知机的XOR问题及解决方法

感知机

什么是感知机?

感知机是最早提出的一种监督学习分类算法,是一种二分类的线性分类模型

感知机模型

  • 感知机由两层神经元构成,即输入层和输出层。在这个模型中,输入数据通过权重向量加权和偏置相加后,再通过激活函数产生输出。
    在这里插入图片描述
    这个过程中,激活函数的选择对于模型的表现至关重要。
    在单层感知机中,常用的激活函数是sign函数,它将输入映射到{0, 1}两个类别上。
  • 单层感知机的数学表达式: f ( x ) = s i g n ( ∑ i = 1 n w i x i + b ) = s i g n ( w T x ) f(x) = sign(\sum_{i=1}^nw_ix_i+b)=sign(\mathbf{w}^T\mathbf{x}) f(x)=sign(i=1nwixi+b)=sign(wTx)
    其中 s i g n ( x ) = { + 1 x > 0 + 0 x < 0 sign(x)=\begin{cases}+1&x>0\\+0&x<0&\end{cases} sign(x)={+1+0x>0x<0 W T = [ b   w 1   w 2   w 3   w 4   . . .   w n ] W^T=[b\ w_1\ w_2\ w_3\ w_4\ ...\ w_n] WT=[b w1 w2 w3 w4 ... wn] X = [ 1 x 1 x 2 x 3 x 4 . . . x n ] X=\begin{bmatrix}1\\x_1\\ x_2\\x_3\\x_4\\...\\x_n\end{bmatrix} X= 1x1x2x3x4...xn W T W^T WT是权重向量, X X X是输入特征向量, b b b是偏置,sign函数则负责将结果映射到两个类别上。

激活函数的选择

  • 在激活函数方面,逻辑回归通常使用sigmoid函数作为激活函数,而单层感知机则使用sign函数

损失函数的选择

  • 在损失函数方面,逻辑回归常用交叉熵损失函数,而单层感知机则基于误分类点到超平面的距离总和来构造损失函数。

超平面、线性可分和线性不可分

什么是超平面?

在n维空间中,超平面是一个将空间分成两部分的n-1维的平面。例如,在二维空间中,超平面是一条直线;在三维空间中,超平面是一个平面。

什么是线性可分和线性不可分?

如果一个数据集可以被一个超平面完全划分(完全正确地分类),则称该数据集是线性可分的数据集,否则称为线性不可分的数据集。

感知机的缺陷

参考b站视频

什么是“感知机”,它的缺陷为什么让“神经网络”陷入低潮

感知机处理的是线性可分问题,即可以通过一个超平面将不同类别的数据完全分开的情况。对于线性不可分的问题,感知机就无法有效地进行分类。(例如,异或(XOR)问题是线性不可分的典型例子

引例(XOR问题)
  • 与运算:当 x 1 , x 2 x_1,x_2 x1x2同时为1时才为1,其他情况为0。
  • 或运算:当 x 1 , x 2 x_1,x_2 x1x2同时为0时才为0,其他情况为1。
  • 非运算:若 x x x为1,则 ¬ x ¬x ¬x为0;若 x x x为0,则 ¬ x ¬x ¬x为1。
  • 异或运算:当 x 1 , x 2 x_1,x_2 x1x2取值不同时为1取值相同时为0

下面我们来看一个简单的二维的二分问题,而且每个维度只有0和1两种取值方式。它有以下四种形式:
在这里插入图片描述
我们可以看到,前面的三种情况(“与”,“非”,“或”)都可以通过一条直线把0和1给区分开。但是到了“异或”就没有办法了,必须要画一个圈才能将0和1给区分开(1在圆圈里面,0在圆圈外面),也就是说,“异或”没有办法被线性可分

解决方法

为了解决这个问题,我们可以采取一种策略,即通过叠加多个单层感知机来构建一个多层感知机(MLP),从而实现对非线性问题的分类。
异或运算可以通过 与、或、非 这三种基本运算组合而来。具体如下:
x 1 ⊕ x 2 ( ¬ x 1 ∧ x 2 ) ∨ ( x 1 ∧ ¬ x 2 ) \begin{gathered}\mathrm{x}_1\oplus\mathrm{x}_2\\(\neg\mathrm{x}_1\wedge\mathrm{x}_2)\vee(\mathrm{x}_1\wedge\neg\mathrm{x}_2)\end{gathered} x1x2(¬x1x2)(x1¬x2)
下面我们来直观地看这个过程。
在这里插入图片描述

从图中可以看到, x 1 , x 2 x_1,x_2 x1x2同时输入到第一个感知机(左侧绿色圆圈)上,在第一个感知机上做 ( ¬ x 1 ∧ x 2 ) {(\neg\mathrm{x}_1\wedge\mathrm{x}_2)} (¬x1x2)运算;与此同时, x 1 , x 2 x_1,x_2 x1x2同时输入到第二个感知机(右侧绿色圆圈)上,在第二个感知机上做 ( x 1 ∧ ¬ x 2 ) (\mathrm{x}_1\wedge\neg\mathrm{x}_2) (x1¬x2)运算;将两个感知机的运算结果作为输入到第三个感知机(蓝色圆圈)上,在第三个感知机上完成 ( ¬ x 1 ∧ x 2 ) ∨ ( x 1 ∧ ¬ x 2 ) (\neg\mathrm{x}_1\wedge\mathrm{x}_2)\vee(\mathrm{x}_1\wedge\neg\mathrm{x}_2) (¬x1x2)(x1¬x2)运算。这样就解决了异或运算。具体过程如下:

在这里插入图片描述

( ¬ x 1 ∧ x 2 ) {(\neg\mathrm{x}_1\wedge\mathrm{x}_2)} (¬x1x2)有四种情况:

  • (0,0)---- 0
  • (1,0)---- 0
  • (0,1)---- 1
  • (1,1)---- 0

( x 1 ∧ ¬ x 2 ) (\mathrm{x}_1\wedge\neg\mathrm{x}_2) (x1¬x2)有四种情况:

  • (0,0)---- 0
  • (1,0)---- 1
  • (0,1)---- 0
  • (1,1)---- 0

以上两个感知机的输出结果作为第三个感知机的输入,于是 ( ¬ x 1 ∧ x 2 ) ∨ ( x 1 ∧ ¬ x 2 ) (\neg\mathrm{x}_1\wedge\mathrm{x}_2)\vee(\mathrm{x}_1\wedge\neg\mathrm{x}_2) (¬x1x2)(x1¬x2)有四种情况:

  • 左下角接受输入(0,0)---- 输出为0
  • 右下角接受输入(0,1)---- 输出为1
  • 左上角接受输入(1,0)---- 输出为1
  • 右上角接受输入(0,0)---- 输出为0
    由于左上角和右上角的输入输出结果一致,把它们合并成一种情况,即下图所示:
    在这里插入图片描述
    从上图可以看出,合并后的样子显然就可以简单的进行线性分类了。
  • 28
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值