共计 1906 个字符,预计需要花费 5 分钟才能阅读完成。
传统分类方法的局限性
在模式识别任务中,像鸢尾花数据集这样的非线性可分数据,传统方法如 SVM 或决策树往往需要复杂的特征工程。比如当花瓣长度与宽度存在交叉关联时,简单的线性分类边界会导致准确率骤降。神经网络通过多层非线性变换,能自动学习特征间的复杂关系——这正是我们选用 BP 和 Hopfield 网络的核心动机。

网络架构对比
| 维度 | BP 神经网络 | 离散 Hopfield 网络 |
|---|---|---|
| 结构类型 | 前馈结构(层间单向连接) | 反馈结构(节点互连形成环路) |
| 训练方式 | 有监督(需标签数据) | 无监督(基于能量函数) |
| 内存占用 | 较高(需存储权重矩阵和梯度) | 较低(只需存储连接权重) |
| 收敛速度 | 较慢(依赖学习率调整) | 较快(通常 1 - 3 次迭代) |
| 适用场景 | 分类 / 回归任务 | 联想记忆 / 模式恢复 |
BP 网络实现关键
-
反向传播推导 :
输出层误差项 $\delta^{(L)} = (y – \hat{y}) \odot f'(z^{(L)})$,隐含层误差通过链式法则反向传递:
$$\delta^{(l)} = ((W^{(l)})^T \delta^{(l+1)}) \odot f'(z^{(l)})$$ -
学习率衰减 :
采用指数衰减策略 $\eta_t = \eta_0 \times 0.95^{t/20}$,避免后期振荡 -
权重初始化 :
使用 Xavier 初始化:$W_{ij} \sim U(-\sqrt{6/n_{in}+n_{out}}, \sqrt{6/n_{in}+n_{out}})$
# BP 网络核心代码片段
class BPNetwork:
def backprop(self, x, y):
# 前向传播计算各层输出
z = [np.dot(x, self.weights[0]) + self.biases[0]]
a = [self.sigmoid(z[0])]
for i in range(1, len(self.sizes)-1):
z.append(np.dot(a[-1], self.weights[i]) + self.biases[i])
a.append(self.sigmoid(z[-1]))
# 反向传播计算梯度
delta = [(a[-1] - y) * self.sigmoid_prime(z[-1])]
for i in range(len(self.sizes)-2, 0, -1):
delta.append(np.dot(delta[-1], self.weights[i].T) * self.sigmoid_prime(z[i-1]))
delta.reverse()
# 更新权重
for i in range(len(self.weights)):
grad = np.dot(a[i].T, delta[i]) if i > 0 else np.dot(x.T, delta[i])
self.weights[i] -= self.eta * grad / len(x)
Hopfield 网络实现
-
能量函数 :
$$E = -\frac{1}{2}\sum_{i,j} w_{ij}v_iv_j + \sum_i \theta_i v_i$$
网络总是向能量减小的方向演化 -
联想记忆 :
存储模式时采用 Hebb 规则:
$$w_{ij} = \frac{1}{N}\sum_{\mu=1}^p x_i^\mu x_j^\mu$$
# Hopfield 网络记忆恢复示例
def recall(self, pattern, max_iter=10):
for _ in range(max_iter):
new_pattern = np.sign(np.dot(pattern, self.weights))
if np.array_equal(new_pattern, pattern):
break
pattern = new_pattern
return pattern
生产环境建议
- 数据划分 :Hopfield 网络对训练样本比例敏感,建议保留至少 30% 样本用于测试记忆容量
- 隐层节点 :BP 网络隐藏层节点数可按 $\sqrt{n_{input} \times n_{output}}$ 估算
- 噪声测试 :添加 5%-15% 随机翻转像素测试显示,Hopfield 在 20% 噪声下仍能保持 70% 恢复率
扩展方向
- 图像处理:将卷积层引入 BP 网络处理 MNIST 数据(参考论文《Gradient-Based Learning Applied to Document Recognition》)
- 优化算法:采用 Adam 优化器替代标准梯度下降
- 硬件加速:利用 GPU 并行计算大规模神经网络的矩阵运算
实践总结
通过本次实验,最深刻的体会是 BP 网络需要耐心调参——学习率设为 0.1 时我们的模型在 50 轮后准确率才突破 90%,而 Hopfield 网络虽然训练快,但对模式正交性要求较高。建议初学者先用小规模数据(如只取鸢尾花两个类别)验证网络基础功能,再扩展完整实验。
