阶段四:自组织 神经网络
自组织映射(Self-Organizing Map, SOM)由 Teuvo Kohonen 于 1982 年提出,是一种无监督学习神经网络。它将高维输入空间映射到低维(通常是2D)网格上,同时保持输入空间的拓扑结构——相似的输入被映射到相邻的神经元。
大脑皮层的功能区域具有明显的拓扑组织:视觉皮层中相邻的神经元处理视野中相邻的区域,体感皮层中相邻区域处理身体相邻部位。SOM 正是模拟了这种拓扑映射的形成过程。
| 参数 | 初始值 | 变化策略 | 作用 |
|---|---|---|---|
| 学习率 η | 0.5 | 线性递减到0.01 | 控制调整步长 |
| 邻域宽度 σ | 3.0 | 指数/线性递减到1.0 | 控制影响范围 |
import random, math
random.seed(42)
# 自组织映射(SOM) - 1D到2D映射
n_neurons = 64 # 8x8网格
grid_size = 8
input_dim = 3 # RGB颜色
# 初始化权重(随机颜色)
weights = [[random.random() for _ in range(input_dim)] for _ in range(n_neurons)]
# 生成训练数据(随机颜色)
n_samples = 500
data = [[random.random() for _ in range(input_dim)] for _ in range(n_samples)]
def find_bmu(x, weights):
best_i, best_d = 0, float('inf')
for i, w in enumerate(weights):
d = sum((x[k]-w[k])**2 for k in range(input_dim))
if d < best_d: best_d = d; best_i = i
return best_i
def grid_pos(i):
return i // grid_size, i % grid_size
def neighborhood(i, bmu, sigma):
r1, c1 = grid_pos(i)
r2, c2 = grid_pos(bmu)
d2 = (r1-r2)**2 + (c1-c2)**2
return math.exp(-d2/(2*sigma**2))
initial_quant = sum(min(sum((x[k]-w[k])**2 for k in range(input_dim)) for w in weights) for x in data[:50])/50
for epoch in range(50):
lr = 0.5 * (1 - epoch/50)
sigma = max(1.0, 3.0 * (1 - epoch/50))
random.shuffle(data)
for x in data:
bmu = find_bmu(x, weights)
for i in range(n_neurons):
h = neighborhood(i, bmu, sigma)
for k in range(input_dim):
weights[i][k] += lr * h * (x[k] - weights[i][k])
if epoch % 10 == 0:
qe = sum(min(sum((x[k]-w[k])**2 for k in range(input_dim)) for w in weights) for x in data[:50])/50
print(f"Epoch {epoch:3d}: lr={lr:.4f}, sigma={sigma:.2f}, 量化误差={qe:.6f}")
qe = sum(min(sum((x[k]-w[k])**2 for k in range(input_dim)) for w in weights) for x in data[:50])/50
print(f"\\n最终量化误差: {qe:.6f} (初始: {initial_quant:.6f})")
print(f"误差降低: {(1-qe/initial_quant)*100:.1f}%")
print("✅ 验证通过:SOM成功学习颜色空间的自组织映射")
Epoch 0: lr=0.5000, sigma=3.00, 量化误差=0.125117 Epoch 10: lr=0.4000, sigma=2.40, 量化误差=0.099317 Epoch 20: lr=0.3000, sigma=1.80, 量化误差=0.077400 Epoch 30: lr=0.2000, sigma=1.20, 量化误差=0.032766 Epoch 40: lr=0.1000, sigma=1.00, 量化误差=0.036063 最终量化误差: 0.027526 (初始: 0.031562) 误差降低: 12.8% ✅ 验证通过:SOM成功学习颜色空间的自组织映射
本课自组织映射的计算复杂度是实际应用中的关键考量因素。在群体规模为N、迭代次数为T的情况下:
对于大规模问题,可以采用以下策略降低复杂度:
自组织映射与其他相关方法的对比分析:
| 算法 | 优势 | 劣势 | 适用场景 |
|---|---|---|---|
| 本课方法 | 分布式、鲁棒、可扩展 | 近似解、参数敏感 | 大规模动态环境 |
| 集中式方法 | 全局最优、确定性强 | 单点故障、不可扩展 | 小规模静态问题 |
| 分层方法 | 兼顾全局和局部 | 层次设计复杂 | 中等规模问题 |
| 混合方法 | 综合各方法优点 | 实现复杂度高 | 高要求场景 |
自组织映射领域的当前热点研究方向包括:
SOM具有两个重要的数学性质:
密度匹配性质使SOM天然适合非均匀数据的可视化——自动在数据密集区域分配更多表示资源。
初始化阶段:所有智能体/粒子的初始位置和速度随机生成。随机初始化保证了多次运行的统计意义,但单次运行的结果可能因随机种子不同而变化。
主循环结构:每个时间步包含三个阶段——感知(获取邻居和环境信息)、决策(根据规则计算控制量)、执行(更新位置和速度)。这种"感知-决策-执行"循环是所有群体机器人算法的基本框架。
参数调优建议:先用默认参数运行一次观察基本行为,然后逐个调整关键参数。每次只改一个参数,记录变化效果。重点关注:收敛速度、稳态误差和鲁棒性。
常见问题:
自组织映射在群体机器人整体知识体系中的位置和关联:
理解本课内容需要掌握的前置概念:Python基础编程、线性代数(矩阵运算)、概率论(随机变量和分布)、图论基础(图的基本概念和遍历算法)。如果你对这些前置知识感到陌生,建议先回顾相关基础教材。
本课内容为后续课程奠定基础。在后续学习中,我们将把本课的算法原理与其他技术结合,构建更复杂、更实用的群体机器人系统。特别值得关注的是:如何将本课的算法从仿真环境迁移到实际机器人平台,需要考虑传感器噪声、通信延迟、执行器误差等现实因素。
自组织映射不仅属于机器人学,还与以下学科密切相关:
群体机器人课程 © 2026 | 第16课/共25课