从M-P神经元到感知机再到神经网络

系列文章见: 《回忆AI时代-从图灵机到人工智能》

关于神经网络的演进

1943年,神经生理学家 Warren McCulloch(沃伦·麦卡洛克)与数理逻辑学家 Walter Pitts(沃尔特·皮茨)提出了人类历史上首个人工神经元数学模型M-P神经元模型(McCulloch-Pitts Neuron)。它是一种模仿生物神经元工作方式的计算模型,奠定了人工神经网络的理论基础。

但它很快遇到了一个关键问题:没有学习能力。模型中的权重需要人工设定,只能完成简单的逻辑推理任务(AND、OR 等),无法根据数据自动调整自身参数。


1948年,图灵在《Intelligent Machinery》中提出了”无组织机器(Unorganized Machines)”模型,系统探讨了由大量简单计算单元组成并能够学习的网络结构,虽然当时这些想法尚未真正落地,但这篇论文对后来的神经网络、机器学习以及深度学习的发展产生了深远影响,被认为是人工智能早期的重要理论基础之一。


1958年,心理学家和计算机科学家Frank Rosenblatt提出了感知机(Perceptron)。他在M-P模型的基础上引入了权重自动调整机制,使模型能够根据训练数据学习规律,从而解决了“无法训练”的核心缺陷。

感知机成为历史上第一个真正具备学习能力的神经网络模型,开启了机器学习研究的新阶段。

1969年,人工智能先驱Marvin Minsky与Seymour Papert合著了《Perceptrons》一书系统指出了单层感知机的核心局限,如

  • 只能解决线性可分问题;
  • 无法处理 XOR(异或)等非线性问题;
  • 网络结构过于简单,仅包含单层神经元。

此后1974–1980年间进入了AI寒冬期。


1986年,David Rumelhart、Geoffrey Hinton和Ronald Williams等人系统推广了BP神经网络(Backpropagation Neural Network)。

BP神经网络通过反向传播(Backpropagation)算法训练多层神经网络,使网络能够自动学习隐藏层中的复杂特征,成功解决了单层感知机无法处理XOR等非线性问题的缺陷。然而,随着网络层数增加,新的挑战也逐渐显现:

  • 计算量巨大,而当时 CPU 性能有限;
  • 容易出现梯度消失或梯度爆炸问题;
  • 缺乏大规模训练数据;
  • 存储和计算资源不足。

因此,神经网络研究在随后再次进入低潮期。

M-P神经元模型

人们观察到生物神经元运作方式。

1
2
3
4
5
6
7
生物神经元

树突 → 接收信号

细胞体 → 处理信号

轴突 → 输出信号

因此引发了思考,并写出了抽象的数学公式。

1
2
3
4
5
6
7
8
9
10
11
输入
x1
x2
x3

加权求和
z = w1x1+w2x2+w3x3

激活

输出
M-P神经元模型

感知机

感知机本质不停调整一条“分界线”,把数据分成两类。它的数学公式y=step(w⋅x+b)

  • w:权重(重要程度)
  • b:偏置(平移分界线)
  • step:激活函数(>0 输出1,否则0)
感知机

案例:用感知机推导AND逻辑。

x1 x2 y
0 0 0
0 1 0
1 0 0
1 1 1

Python代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import numpy as np

# 训练数据
X = np.array([
[0, 0],
[0, 1],
[1, 0],
[1, 1]
])

y = np.array([0, 0, 0, 1])

# 初始化参数
w = np.random.randn(2)
b = 0.0
lr = 0.1

# 激活函数
def step(z):
return 1 if z > 0 else 0

# 训练感知机
for epoch in range(20):
for i in range(len(X)):
x = X[i]
target = y[i]

# 预测
z = np.dot(w, x) + b
pred = step(z)

# 误差
error = target - pred

# 更新规则(核心)
w += lr * error * x
b += lr * error

print(f"epoch {epoch}, w={w}, b={b}")

训练过程中:

  • 初期:乱猜
  • 中期:开始分开0和1
  • 后期:稳定收敛

最终会学到类似:

  • w ≈ [0.3, 0.3]
  • b ≈ -0.2

什么是神经网络

感知机只能解决线性问题,而神经网络(Neural Network)可以解决非线性问题。譬如我们来解决一个经典案例XOR(异或)的问题。

神经网络

XOR数据:

1
2
3
4
5
6
7
8
9
10
11
12
import numpy as np

# 输入
X = np.array([
[0, 0],
[0, 1],
[1, 0],
[1, 1]
])

# 输出(异或)
y = np.array([0, 1, 1, 0])

感知机,它解决不了XOR问题。

1
2
3
4
5
6
from sklearn.linear_model import Perceptron

model = Perceptron()
model.fit(X, y)

print("预测结果:", model.predict(X))

神经网络,可以解决。

1
2
3
4
5
6
7
8
9
10
11
from sklearn.neural_network import MLPClassifier

model = MLPClassifier(
hidden_layer_sizes=(4,), # 关键:隐藏层
max_iter=5000,
random_state=1
)

model.fit(X, y)

print("预测结果:", model.predict(X))