教程 4: CANN 参数效应¶
Note
阅读时间: 30-35分钟
难度: 中级
先决条件: 教程 1-3
本教程系统地探索不同 CANN1D 参数如何影响模型动力学。
1. 参数概览¶
CANN1D 具有以下主要参数:
参数 |
默认值 |
物理意义 |
|---|---|---|
|
256 |
神经元数量(网络分辨率) |
|
1.0 |
时间常数(动力学速度) |
|
8.1 |
全局抑制强度 |
|
0.5 |
连接宽度(局部兴奋范围) |
|
10 |
外部输入振幅 |
|
4.0 |
突触连接强度 |
|
50.0 |
我们将使用 SmoothTracking1D 任务和 energy_landscape_1d_animation 可视化来观察每个参数的影响。
2. 实验设置¶
2.1 基础代码框架¶
[1]:
import brainpy.math as bm # :cite:p:`wang2023brainpy`
from canns.models.basic import CANN1D, CANN1D_SFA
from canns.task.tracking import SmoothTracking1D
from canns.analyzer.visualization import (
PlotConfigs,
energy_landscape_1d_animation
)
# Setup environment
bm.set_dt(0.1)
def run_experiment(model, title="", save_path=None):
"""Run standard experiment and visualize results"""
# Create smooth tracking task
task = SmoothTracking1D(
cann_instance=model,
Iext=[0.0, 3.0, 2.0, 3.0],
duration=[20.0, 20.0, 10.0],
time_step=0.1,
)
# Get task data
task.get_data()
def run_step(t, inp):
model.update(inp)
return model.u.value, model.r.value, model.inp.value
u_history, r_history, input_history = bm.for_loop(run_step, operands=(task.run_steps, task.data), progress_bar=10)
# Configure and create visualization
config = PlotConfigs.energy_landscape_1d_animation(
time_steps_per_second=100,
fps=20,
title=title,
xlabel='Position',
ylabel='Firing Rate',
repeat=True,
show=True,
save_path=save_path
)
energy_landscape_1d_animation(
data_sets={'u': (model.x, u_history), 'stimulus': (model.x, input_history)},
config=config
)
return r_history
2.2 默认参数基线¶
首先,使用默认参数建立基线:
[2]:
# Default parameters
model_default = CANN1D(
num=256, tau=1.0, k=8.1, a=0.5, A=10, J0=4.0
)
r_default = run_experiment(
model_default,
title="Default Parameters",
save_path=None # Set to 'default.gif' to save
)
<SmoothTracking1D> Generating Task data: 500it [00:00, 997.94it/s]
观察要点: 波包应平稳地从左到右跟踪刺激,形状稳定且清晰。
3. 参数探索¶
对于每个参数,我们将通过多个实验创建并排比较。这种方法允许您直接比较不同的参数取值。
3.1 神经元数量 num¶
num 控制网络分辨率。神经元数量越多,特征表示越精细,但计算成本越高。
[3]:
# Test different neuron counts
for num_val in [64, 256, 512]:
model = CANN1D(num=num_val, tau=1.0, k=8.1, a=0.5, A=10, J0=4.0)
run_experiment(
model,
title=f"Number of Neurons: {num_val}",
save_path=None
)
<SmoothTracking1D> Generating Task data: 500it [00:00, 1007.50it/s]
<SmoothTracking1D> Generating Task data: 500it [00:00, 7830.98it/s]
<SmoothTracking1D> Generating Task data: 500it [00:00, 1487.74it/s]
观察结果:
- num=64: 分辨率较低,波包表示较粗糙
- num=256: 分辨率平衡,标准选择
- num=512: 分辨率更高,波包更平滑,但计算量增加
关键洞察: 分辨率影响波包的平滑度,但不影响基本动力学特性。当需要精确的空间表征时,应使用更高的 num。
3.2 时间常数 tau¶
tau 控制动力学的时间尺度。较大的 tau 意味着对输入的响应更缓慢。
[4]:
# Test different time constants
for tau_val in [0.5, 1.0, 2.0]:
model = CANN1D(num=256, tau=tau_val, k=8.1, a=0.5, A=10, J0=4.0)
run_experiment(
model,
title=f"Time Constant: tau={tau_val}",
save_path=None
)
<SmoothTracking1D> Generating Task data: 500it [00:00, 6681.74it/s]
<SmoothTracking1D> Generating Task data: 500it [00:00, 7698.46it/s]
<SmoothTracking1D> Generating Task data: 500it [00:00, 1703.66it/s]
观察结果:
- tau=0.5: 响应迅速,波包紧密跟随刺激,延迟极小
- tau=1.0: 标准响应,跟踪速度平衡
- tau=2.0: 响应缓慢,波包滞后于移动的刺激
关键洞察: tau 控制网络的时间滤波特性。较小的 tau 使网络对变化输入的适应更快——较大的 tau 则产生更平滑、更缓慢的动力学。
3.3 全局抑制 k¶
k 控制全局抑制强度——对维持单波包吸引子状态至关重要。
[5]:
# Test different inhibition strengths
for k_val in [4.0, 8.1, 16.0]:
model = CANN1D(num=256, tau=1.0, k=k_val, a=0.5, A=10, J0=4.0)
run_experiment(
model,
title=f"Global Inhibition: k={k_val}",
save_path=None
)
<SmoothTracking1D> Generating Task data: 500it [00:00, 7221.90it/s]
<SmoothTracking1D> Generating Task data: 500it [00:00, 4806.87it/s]
<SmoothTracking1D> Generating Task data: 500it [00:00, 5538.20it/s]
观察结果:
- k=4.0: 抑制较弱,波包可能不稳定、过宽或分裂为多个波包
- k=8.1: 抑制平衡,形成稳定的单波包
- k=16.0: 抑制较强,波包更尖锐、更窄
关键洞察: k 平衡兴奋与抑制。过弱会导致不稳定或多重波包——过强则可能导致波包无法形成或过于狭窄。
3.4 连接宽度 a¶
a 控制局部兴奋连接的空间范围——直接影响波包的宽度。
[6]:
# Test different connection widths
for a_val in [0.3, 0.5, 0.8]:
model = CANN1D(num=256, tau=1.0, k=8.1, a=a_val, A=10, J0=4.0)
run_experiment(
model,
title=f"Connection Width: a={a_val}",
save_path=None
)
<SmoothTracking1D> Generating Task data: 500it [00:00, 4087.94it/s]
<SmoothTracking1D> Generating Task data: 500it [00:00, 2955.45it/s]
<SmoothTracking1D> Generating Task data: 500it [00:00, 7412.03it/s]
观察结果:
- a=0.3:连接范围窄,产生较窄的波包,峰值更尖锐
- a=0.5:标准宽度,波包形状平衡
- a=0.8:连接范围宽,产生更宽、分布更广的波包
关键洞察:a 直接决定空间感受野的大小。应根据应用所需的空间精度调整 a。
3.5 外部输入振幅 A¶
A 控制外部刺激输入的振幅。
[7]:
# Test different input amplitudes
for A_val in [5, 10, 20]:
model = CANN1D(num=256, tau=1.0, k=8.1, a=0.5, A=A_val, J0=4.0)
run_experiment(
model,
title=f"Input Amplitude: A={A_val}",
save_path=None
)
<SmoothTracking1D> Generating Task data: 500it [00:00, 3244.44it/s]
<SmoothTracking1D> Generating Task data: 500it [00:00, 4569.55it/s]
<SmoothTracking1D> Generating Task data: 500it [00:00, 634.16it/s]
观察结果:
- A=5:输入较弱,波包的峰值放电率较低
- A=10:标准振幅,响应平衡
- A=20:输入较强,波包的峰值放电率更高,且可能扩散范围更广
关键洞察:A 决定外部输入驱动网络的强度。较高的 A 使波包对外部刺激的响应强于内部循环动力学。
3.6 突触连接强度 J0¶
J0 控制循环突触连接的最大强度。
[8]:
# Test different connection strengths
for J0_val in [2.0, 4.0, 8.0]:
model = CANN1D(num=256, tau=1.0, k=8.1, a=0.5, A=10, J0=J0_val)
run_experiment(
model,
title=f"Synaptic Strength: J0={J0_val}",
save_path=None
)
<SmoothTracking1D> Generating Task data: 500it [00:00, 4871.12it/s]
<SmoothTracking1D> Generating Task data: 500it [00:00, 5754.28it/s]
<SmoothTracking1D> Generating Task data: 500it [00:00, 590.77it/s]
观察结果:
- J0=2.0:循环连接较弱,波包在无输入时难以维持稳定
- J0=4.0:标准连接,波包稳定维持
- J0=8.0:循环连接较强,波包极为稳定,但可能过于僵化
关键洞察:J0 决定吸引子的强度。更高的 J0 意味着更强的自持动力学和更好的记忆保持能力,但可能降低对输入变化的响应灵敏度。
3.7 SFA 时间常数 tau_v¶
对于 CANN1D_SFA,tau_v 控制尖峰频率适应(SFA)的时间尺度。SFA 会产生一种适应电流,即使在无外部速度输入的情况下,也可能导致波包漂移。
[9]:
# Test different SFA time constants
for tau_v_val in [20.0, 50.0, 100.0]:
model = CANN1D_SFA(
num=256,
tau=1.0,
tau_v=tau_v_val,
k=8.1,
a=0.3,
A=0.2,
J0=1.0,
m=0.3
)
run_experiment(
model,
title=f"SFA Time Constant: tau_v={tau_v_val}",
save_path=None
)
<SmoothTracking1D> Generating Task data: 500it [00:00, 987.72it/s]
<SmoothTracking1D> Generating Task data: 500it [00:00, 7448.12it/s]
<SmoothTracking1D> Generating Task data: 500it [00:00, 1604.13it/s]
观察结果:
- tau_v=20.0:适应迅速,波包漂移更快,甚至可能领先于刺激
- tau_v=50.0:标准适应,漂移行为适中
- tau_v=100.0:适应缓慢,漂移效应较弱
关键洞察:SFA [9, 10] 引入了预测性动力学。适应电流造成的不对称性可使波包“预测”运动方向,这对路径积分模型 [4, 28] 非常有用。
4. 后续步骤¶
恭喜您完成所有基础教程!您现已理解:
所有主要 CANN 参数及其物理意义
每个参数对波包动力学的影响
如何开展系统的参数扫描实验
参数选择中涉及的权衡
参数选择指南¶
在为您的应用配置 CANN 模型时:
从默认参数开始——默认参数提供稳定且行为良好的动力学
将分辨率与需求匹配——高
num用于精确空间编码,低num用于提升效率调整时间动力学——根据所需响应速度调整
tau平衡稳定性与灵活性——
J0和k控制吸引子强度匹配空间尺度——根据所需波包宽度设置
a
继续学习¶
从此处选择高级应用教程:
教程 5:网格细胞速度模型——学习基于速度的网格细胞路径积分
教程 6:分层路径积分网络——学习具有多个空间尺度的分层路径积分
教程 7:Theta 扫描系统模型——学习结合头方向细胞与网格细胞的 Theta 扫描系统 [11, 14]
教程 8:Theta 扫描位置细胞网络——学习位置细胞网络与空间记忆
或探索其他场景:
场景 2: 数据分析——使用 CANN 分析实验神经数据
场景 3: 脑启发学习——CANN 的脑启发训练方法
场景 4: 端到端流程——从数据到发表的完整研究工作流
关键要点¶
参数相互关联——修改一个参数可能需要调整其他参数以维持系统稳定
可视化以理解——探索参数时,始终使用能量景观可视化
从简单开始——在转向 SFA 或 2D 变体前,先从基础 CANN1D 入手
记录您的选择——记录参数取值的选取理由,以确保可复现性