感知机
简单介绍一下感知机
1.1 感知机的概念
1.1.1 什么是感知机?
**感知机(Perceptron)**是Frank Rosenblatt在1957年提出的一种人工神经网络模型,是最简单的前馈神经网络,也是二元线性分类器的基础。它被视为单层神经网络的雏形,为后续更复杂的模型(如多层感知机、支持向量机等)奠定了基础。
1.1.2 特点
优点:
- 它能够接受多个信号,输出一个信号。
- 简单、计算高效。
- 可处理线性可分问题(如与门、非与门、或门)。
局限性:
- 无法解决非线性可分问题(如异或门),这一缺陷导致了神经网络的第一次低谷,直到多层感知机(MLP)和非线性激活函数的引入。
- 对噪声和异常值敏感。
1.1.3 基本原理
感知机模拟生物神经元的工作方式:
- 输入:接收多个特征信号((x_1, x_2, …, x_n))。
- 加权求和:对输入信号赋予权重((w_1, w_2, …, w_n)),计算加权和 (z = \sum_{i=1}^n w_i x_i + b)((b)为偏置项)。

节点计算传送过来的信号的总和,只有当这个总和超过某个阈值时才会输出1。
权重越大,对应该权重的信号的重要性越高。
公式:
[
y = f\left(\sum_{i=1}^n w_i x_i + b\right), \quad f(z) \text{为激活函数}.
]
几何解释:在特征空间中,感知机用一个超平面(如二维中的直线)将数据分为两类。
1.2 感知机的实现
1.2.1 简单实现
通过感知机,我们可以表示与门(AND)、与非门(NAND)、或门(OR)的逻辑电路。
1 | |
我们可以通过仿照上例,导入我们的权重和偏置
1 | |
最后整合一下
1 | |
1.2.2 局限性
异或门(XOR)的定义:异或门的输入输出关系如下((A) 和 (B) 为二进制输入,(Y) 为输出):
| (A) | (B) | (Y = A \oplus B) |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
异或门的输出要求:
- 当 (A) 和 (B) 相同时输出 (0);
- 当 (A) 和 (B) 不同时输出 (1)。
单层感知机(Single-Layer Perceptron)无法表示异或门(XOR),这是由其线性可分性的局限性决定的。
单层感知机是一个线性分类器,其决策边界是输入空间中的一个超平面(在二维情况下是一条直线)。
要能用一条直线正确分类异或门的输出,需要满足:
- 输出为 (1) 的点(((0,1)) 和 ((1,0)))在直线的一侧;
- 输出为 (0) 的点(((0,0)) 和 ((1,1)))在直线的另一侧。
但通过几何观察可以发现:
- 无论怎么画一条直线,都无法将 ((0,1)) 和 ((1,0)) 与 ((0,0)) 和 ((1,1)) 分开。

(图中红色×代表输出 (1),蓝色○代表输出 (0),无法用一条直线分开两类点。)
数学证明
假设存在权重 (w_1, w_2) 和偏置 (b),使得感知机能正确分类异或门,需满足以下不等式:
[
\begin{cases}
w_1 \cdot 0 + w_2 \cdot 0 + b \leq 0 \quad (Y=0), \
w_1 \cdot 0 + w_2 \cdot 1 + b > 0 \quad (Y=1), \
w_1 \cdot 1 + w_2 \cdot 0 + b > 0 \quad (Y=1), \
w_1 \cdot 1 + w_2 \cdot 1 + b \leq 0 \quad (Y=0).
\end{cases}
]
化简后得到:
[
\begin{cases}
b \leq 0, \
w_2 + b > 0, \
w_1 + b > 0, \
w_1 + w_2 + b \leq 0.
\end{cases}
]
将前两个不等式相加:
[
w_1 + w_2 + 2b > 0,
]
但根据第四个不等式:
[
w_1 + w_2 + b \leq 0,
]
结合 (b \leq 0),可得:
[
w_1 + w_2 + 2b \leq w_1 + w_2 + b \leq 0,
]
这与 (w_1 + w_2 + 2b > 0) 矛盾。因此不存在满足条件的 (w_1, w_2, b)。
1.2.3 根本原因:线性可分性
- 单层感知机只能解决线性可分问题(即存在一条直线/超平面能完美分开两类数据)。
- 异或门的输入输出关系是非线性可分的(需要曲线或更复杂的边界)。
1.2.4 如何解决?
要解决异或问题,必须引入非线性:
多层感知机(MLP):
- 增加一个隐藏层(如用两个隐藏神经元分别表示AND和NAND门),再通过组合它们的输出实现异或。
- 例如:
(
A \oplus B = (A \land \neg B) \lor (\neg A \land B).
)
1.2.5 代码实现
1 | |



