模型集合¶
本文档介绍 CANNs 库中不同类别的模型及其扩展方法。
概述¶
模型模块(canns.models)实现了各种 CANN 架构及其变体。模型分为三个类别:
- 基础模型 (
canns.models.basic) 标准 CANN 实现和变体
- 类脑模型 (
canns.models.brain_inspired) 具有生物学习机制的模型
- 混合模型 (
canns.models.hybrid) CANN 与人工神经网络的组合
所有模型都基于 BrainPy 的动力学框架构建,该框架提供状态管理、时间步进和 JIT 编译功能。
基础模型¶
基础模型实现了核心的 Wu-Amari-Wong 连续吸引子神经网络(CANNs) 动力学 [5, 6, 7, 8],如理论神经科学文献所述。它们使用预定义的连接模式(通常是高斯核)和固定参数。
可用的基础模型¶
模型按 canns.models.basic 中的模块文件组织:
原始 CANN (cann.py)¶
核心连续吸引子神经网络实现。
层次化路径积分模型 (hierarchical_model.py)¶
层次化模型 [19] 结合多种细胞类型用于空间认知。
Theta扫描模型 (theta_sweep_model.py)¶
实现基础模型¶
每个基础模型都继承自 canns.models.basic.BasicModel 或 canns.models.basic.BasicModelGroup。
构造函数设置¶
使用总神经元数调用父构造函数:
super().__init__(math.prod(shape), **kwargs)
在 self.shape 和 self.varshape 中存储形状信息,以正确处理维度。
必需的方法¶
- 连接矩阵 (
make_conn()) 生成循环连接矩阵。典型实现使用高斯核:
计算神经元之间的成对距离
应用指定宽度的高斯函数
将结果存储在
self.conn_mat中
参见
src/canns/models/basic/cann.py的参考实现。- 刺激生成 (
get_stimulus_by_pos(pos)) 将特征空间位置转换为外部输入模式。由任务模块调用以生成神经输入:
以位置坐标作为输入
返回与网络大小匹配的刺激向量
使用高斯波包或类似的局部化模式
- 更新动力学 (
update(inputs)) 定义单步状态演化:
读取当前状态
基于 CANN 方程计算导数
应用时间步:
new_state = old_state + derivative * bm.get_dt()写入更新后的状态
- 诊断属性
提供用于分析的有用信息:
self.x: 特征空间坐标self.rho: 神经元密度用于波包追踪的峰值检测方法
类脑模型¶
类脑模型具有生物学上合理的学习机制。与具有固定权重的基础模型不同,这些网络通过局部的、活动依赖的可塑性修改其连接。
关键特征¶
- 局部学习规则
权重更新仅依赖于突触前和突触后活动
- 无误差反向传播
学习在没有显式误差信号的情况下发生
- 基于能量的动力学
网络状态演化以最小化能量函数
- 吸引子形成
存储的模式成为动力学的不动点
可用的类脑模型¶
实现类脑模型¶
继承自 canns.models.brain_inspired.BrainInspiredModel 或 canns.models.brain_inspired.BrainInspiredModelGroup。
状态和权重变量¶
定义状态变量和可训练权重:
self.s: 状态向量(bm.Variable)self.W: 连接权重(bm.Variable)
所有状态和权重变量在 BrainPy 中使用 bm.Variable。
权重属性¶
如果权重存储在不同名称下,覆盖 weight_attr 属性:
@property
def weight_attr(self):
return 'W' # 或自定义属性名称
更新动力学¶
在 update(...) 中定义当前权重下的状态演化。通常涉及矩阵-向量乘法和激活函数。
能量函数¶
返回当前状态的标量能量值。训练器使用它来监控收敛:
@property
def energy(self):
return -0.5 * state @ weights @ state
Hebbian 学习¶
在 apply_hebbian_learning(patterns) 中可选的权重更新自定义实现。如果未提供,训练器使用默认的外积规则:
W += learning_rate * patterns.T @ patterns
动态调整大小¶
可选支持在保留学习结构的同时更改网络大小:resize(num_neurons, preserve_submatrix)
参见 src/canns/models/brain_inspired/hopfield.py 的参考实现。
混合模型¶
Note
混合模型将 CANN 动力学与其他神经网络架构相结合(开发中)。愿景包括:
嵌入在更大人工神经网络中的 CANN 模块
用于端到端训练的可微分 CANN 层
吸引子动力学与前馈处理的集成
将生物学合理性与深度学习能力相结合
当前状态:在 canns.models.hybrid 中存在用于未来实现的占位符模块结构。
BrainPy 基础¶
所有模型利用 BrainPy 的 [18] 基础设施:
动力学抽象¶
bp.DynamicalSystem 提供:
自动状态跟踪
JIT 编译支持
可组合的子模块
状态容器¶
bm.Variable所有状态变量(可变、内部或可学习参数)的通用容器
这些容器支持透明的 JAX [17] 变换,同时保持直观的面向对象语法。
时间管理¶
brainpy.math 提供时间步管理:
bm.set_dt(0.1): 设置模拟时间步bm.get_dt(): 检索当前时间步
这确保了模型、任务和训练器之间的一致性。
编译仿真¶
bm.for_loop 实现高效仿真:
用于 GPU/TPU 加速的 JIT 编译
自动微分支持
进度跟踪集成
总结¶
CANNs 模型集合提供:
基础模型 - 可立即使用的标准 CANN 实现
类脑模型 - 具有局部学习能力的网络
混合模型 - 与深度学习的未来集成(开发中)
每个类别通过基类继承遵循一致的模式,使库既强大又可扩展。BrainPy 基础处理复杂性,允许用户专注于定义神经动力学而不是实现细节。