任务生成器¶
本文档解释了CANNs库中的任务生成哲学和可用范式。
概览¶
任务模块( canns.task )生成、保存、加载、导入和可视化CANN仿真的实验数据。它提供标准化的范式,抽象常见的实验场景,确保可重复性和便利性。
任务有两个主要目的:
- 生成输入序列
创建驱动网络动力学的时变外部输入
- 提供真值
提供用于分析和比较的轨迹信息
任务类别¶
任务根据它们建模的认知功能分为两大类。
跟踪任务¶
跟踪任务模拟网络跟随外部信号的场景。CANN中的活动凸起跟踪移动的刺激位置。
群体编码
网络在固定位置接收静态输入。测试基本的吸引子稳定性和群体表征准确性。
模板匹配
网络接收简短的、可能有噪声的输入。测试模式完成和识别能力。
平滑跟踪
最常见的范式。
网络接收连续移动的输入信号。测试动态跟踪能力,具有变化的速度和方向。
可用实现:
SmoothTracking1D:用于环网络的一维跟踪SmoothTracking2D:用于环面网络的二维跟踪(开发中)
导航任务¶
导航任务模拟空间运动场景,网络接收速度或方向信息而不是直接的位置输入。
闭环导航
网络根据自运动信号更新其内部表征。来自环境的反馈可以纠正误差。
开环导航
网络在没有外部反馈的情况下积分速度输入。测试路径积分能力和误差随时间的累积。
Note
导航任务不需要直接的模型耦合,因为它们提供更丰富的数据(速度、角度等),用户可以根据特定应用进行解释。
模型-任务耦合¶
为什么存在耦合¶
跟踪任务需要在构造期间传递CANN模型实例:
task = SmoothTracking1D(cann_instance=cann, ...)
Important
这种耦合之所以存在,是因为跟踪任务需要访问 cann.get_stimulus_by_pos() 。该方法将抽象位置坐标转换为与网络编码方案匹配的具体神经输入模式。
耦合提供了用户便利:
自动生成与网络拓扑匹配的刺激
任务和模型之间的一致编码
减少常见用例的样板代码
何时需要耦合¶
任务类型 |
需要 |
提供的数据 |
|---|---|---|
跟踪任务 |
✅ 是 |
神经空间中的输入模式 |
群体编码
模板匹配
平滑跟踪
|
✅ 是 |
内部使用 |
导航任务 |
❌ 否 |
速度、方向、位置数据 |
闭环导航
开环导航
|
❌ 否 |
用户决定如何转换为神经输入 |
Note
这种区别反映了这些范式的不同性质。跟踪涉及对网络的直接感觉输入,而导航涉及基于自运动的内部状态更新。
任务组件¶
任务配置
任务通过构造函数参数配置:
目标位置:刺激出现或移动到的位置
持续时间:每个段持续的时间
时间步长:时间分辨率(来自
bm.get_dt())额外参数:速度曲线、噪声水平、初始条件
数据生成
get_data() 方法返回:
输入序列:随时间变化的神经输入数组(用于跟踪任务)
轨迹信息:位置、速度、时间戳
元数据:用于文档的任务参数
数据持久化
任务支持保存和加载:
save(filename):存储任务数据以实现可重复性load(filename):重新加载先前生成的任务标准格式确保兼容性
轨迹导入
正在开发的功能。
库支持从实验记录导入外部轨迹。这使得能够:
重放真实动物运动路径
针对实验数据进行验证
将模型预测与神经记录进行比较
任务使用模式¶
标准工作流¶
Tip
典型使用步骤:
创建模型实例
配置任务,指定位置和持续时间
生成数据,使用
get_data()运行仿真,将任务输入馈送到模型
分析结果,比较模型输出与任务轨迹
多试验生成¶
任务支持生成多个试验,具有:
相同范式、不同随机种子
系统化参数变化
批量处理能力
参数扫描¶
将任务与分析流水线结合以:
测试模型在各种条件下的鲁棒性
找到最佳参数范围
表征吸引子属性
设计考虑因素¶
时间步长一致性
任务使用 bm.get_dt() 确保时间分辨率与仿真环境匹配。
始终在创建任务之前设置全局时间步长:
bm.set_dt(0.1)
task = SmoothTracking1D(...)
位置编码
任务在抽象特征空间(角度、坐标)中操作。到神经活动模式的转换由以下处理:
用于直接耦合的
model.get_stimulus_by_pos()用于解耦场景的用户定义编码
可扩展性
可以通过以下方式创建自定义任务:
继承自基础任务类
实现所需的数据生成方法
遵循输出格式的约定
总结¶
任务模块提供:
跟踪任务 - 直接刺激跟随(群体编码、模板匹配、平滑跟踪)
导航任务 - 自运动积分(闭环、开环导航)
模型耦合 - 跟踪任务的自动刺激生成
灵活性 - 导航任务允许用户定义的输入解释
任务将实验范式抽象为可重用组件,使能够在标准化条件下系统研究CANN动力学。耦合设计在常见情况下的便利性与专门应用的灵活性之间取得平衡。