共计 1537 个字符,预计需要花费 4 分钟才能阅读完成。
背景介绍
1957 年,弗兰克·罗森布拉特发明了感知机,这是第一个能够实现简单模式识别的神经网络模型。感知机的出现标志着人工神经网络研究的开端,为后续深度学习的发展奠定了基础。虽然感知机的结构非常简单,但它已经具备了现代神经网络的核心思想:通过调整权重来学习输入数据的模式。

数学原理
感知机的决策函数可以表示为:
f(x) = sign(w · x + b)
其中,w 是权重向量,x 是输入向量,b 是偏置项,sign 是符号函数(输出 + 1 或 -1)。
权重更新规则采用简单的误差修正方法:
w_new = w_old + η * (y_true - y_pred) * x
其中,η 是学习率,y_true 是真实标签,y_pred 是预测标签。
Python 实现
下面是一个完整的感知机分类器的 Python 实现,使用 numpy 库进行向量化计算:
import numpy as np
class Perceptron:
def __init__(self, learning_rate=0.01, n_iters=1000):
self.lr = learning_rate
self.n_iters = n_iters
self.weights = None
self.bias = None
def fit(self, X, y):
n_samples, n_features = X.shape
# 初始化权重和偏置
self.weights = np.zeros(n_features)
self.bias = 0
# 将标签转换为 + 1 或 -1
y_ = np.array([1 if i > 0 else -1 for i in y])
# 训练循环
for _ in range(self.n_iters):
for idx, x_i in enumerate(X):
linear_output = np.dot(x_i, self.weights) + self.bias
y_pred = np.sign(linear_output)
# 更新规则
update = self.lr * (y_[idx] - y_pred)
self.weights += update * x_i
self.bias += update
def predict(self, X):
linear_output = np.dot(X, self.weights) + self.bias
return np.sign(linear_output)
实战演示
让我们用这个感知机模型来解决 AND 逻辑运算问题:
# AND 逻辑运算数据
X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
y = np.array([-1, -1, -1, 1])
# 创建并训练感知机
p = Perceptron(learning_rate=0.1, n_iters=100)
p.fit(X, y)
# 测试
predictions = p.predict(X)
print(predictions) # 应该输出 [-1, -1, -1, 1]
局限性分析
虽然感知机在简单线性可分问题上表现良好,但它有一个重大缺陷:无法解决非线性可分问题,比如 XOR 逻辑运算。这就是著名的 ” 感知机局限性 ” 问题。1969 年,Minsky 和 Papert 在《Perceptrons》一书中严格证明了这一局限性,导致神经网络研究进入了第一个寒冬。
现代意义
尽管有这些局限性,感知机仍然是现代神经网络的基础。多层感知机(MLP)通过堆叠多个感知机层并引入非线性激活函数,可以解决 XOR 等复杂问题。今天,感知机的核心思想仍然存在于深度学习的各个架构中。
思考题
如何扩展这个基础感知机来解决更复杂的分类问题?可以考虑以下几个方面:
- 引入非线性激活函数(如 sigmoid、ReLU)
- 堆叠多个感知机层形成深度网络
- 使用更复杂的优化算法(如 SGD、Adam)
- 增加正则化项防止过拟合
通过这些扩展,简单的感知机就能进化为强大的现代神经网络。
正文完
发表至: 未分类
近一天内
