Skip to content

Latest commit

 

History

History
440 lines (273 loc) · 8.57 KB

File metadata and controls

440 lines (273 loc) · 8.57 KB

第 8 章:为什么一个神经元有时不能只用一个电压表示

对应实验:lessons/08_spatial_neuron.py

输出图片:outputs/08_spatial_neuron.png

这一章解决什么问题

前七章都假设一个神经元只有一个状态 v。

这叫点神经元近似:

整个细胞在任意时刻共享同一个膜电位。

它适合研究:

  • 大型网络活动。
  • 脉冲时序。
  • 简化突触整合。

但真实神经元有树突、胞体和轴突。远端树突上的输入传到胞体时会:

  • 衰减。
  • 延迟。
  • 与局部通道相互作用。

当空间位置本身是研究问题时,需要多区室模型。

1. 从点模型到电缆模型

把一段神经突想象成一根带漏电膜的电缆。

电流有两条路:

  1. 沿细胞内部向相邻位置传播。
  2. 穿过细胞膜泄漏到外部。

因此某一位置的电压变化不仅取决于本地膜电流,也取决于邻近位置电压差产生的轴向电流。

连续空间中的电缆方程本质上是偏微分方程,因为 v 同时依赖:

时间 t
空间位置 x

计算机通常把形态切成有限区室,每个区室有一个近似均匀的电压,再计算相邻区室间电流。

2. Cylinder 在描述什么

代码:

morphology = Cylinder(
    length=200 * um,
    diameter=2 * um,
    n=20,
)

这是一根:

  • 长度 200 μm。
  • 直径 2 μm。
  • 分成 20 个区室。

每个区室长度约:

200 μm / 20 = 10 μm

n 越大:

  • 空间分辨率越高。
  • 每个区室内“电压均匀”的近似越合理。
  • 计算量和内存增加。

与时间步一样,区室数量也应做收敛检查。

3. 形态不只是画图信息

区室的:

  • 长度。
  • 直径。
  • 表面积。
  • 横截面积。
  • 连接拓扑。

都会影响电学行为。

例如直径增大时:

  • 轴向电阻通常降低。
  • 电流更容易沿内部传播。
  • 膜面积也会改变。

因此“把直径改大”不是只让示意图变粗,而是在改变模型物理性质。

4. 漏电流方程的单位

代码:

gL = 1e-4 * siemens / cm**2
EL = -70 * mV

其中:

  • gL:单位面积漏电导。
  • EL:漏电反转电位。

膜电流密度:

Im = gL * (EL - v)

单位检查:

siemens/meter² * volt
= amp/meter²

所以方程声明:

Im : amp/meter**2

这里的 Im 是单位膜面积上的电流,不是整个区室的总电流。

5. EL-v 的符号怎样理解

如果:

v > EL

则:

EL-v < 0

漏电流方向会把 v 拉回 EL。

如果:

v < EL

则电流方向相反,同样把 v 拉向 EL。

因此 EL 是没有其他输入时的稳定电位。

本章初始化:

neuron.v = EL

如果不注入电流,所有区室都应保持在 -70 mV。

6. 为什么 SpatialNeuron 不需要手写轴向电流

代码:

neuron = SpatialNeuron(
    morphology=morphology,
    model=...,
    Cm=1 * ufarad / cm**2,
    Ri=150 * ohm * cm,
    method="exponential_euler",
)

你只提供:

  • 形态。
  • 膜电流模型 Im。
  • 比膜电容 Cm。
  • 细胞内电阻率 Ri。

Brian2 根据形态与 Ri 自动构造相邻区室之间的耦合。

Cm

比膜电容表示单位面积膜能储存多少电荷。

Cm 越大,同样电流引起电压变化越慢。

Ri

轴向电阻率描述细胞内部电流传播阻力。

Ri 越大,远距离传播更困难,空间衰减通常更强。

7. point current 为什么与 Im 不同

模型:

Im = gL*(EL-v) : amp/meter**2
I : amp (point current)

Im 是电流密度,作用于每个区室的膜面积。

I 是总电流,单位 amp,并标记:

(point current)

这告诉 SpatialNeuron:

I 是注入某个区室的总电流,请根据区室面积正确纳入膜方程。

如果把一个总电流错误声明为电流密度,改变区室划分后结果可能完全不一致。

这是多区室模型中最容易犯的单位错误之一。

8. 为什么只给 0 号区室注入电流

neuron.I[0] = 0.1 * nA

所有其他区室的 I 默认是 0。

这相当于在电缆一端放置电极。

随后电压变化通过轴向电流传播到:

  • 5 号区室。
  • 10 号区室。
  • 19 号远端区室。

这样可以直接观察距离对响应的影响。

9. 运行前应该预测什么

注入端 0 号区室:

  • 直接接收电流。
  • 电压变化最快、幅度最大。

中间区室:

  • 通过相邻区室间接接收电流。
  • 响应更慢、幅度更小。

远端 19 号区室:

  • 距离最远。
  • 衰减和延迟最明显。

因此四条曲线应按空间距离形成有序梯度,而不是随机排列。

10. StateMonitor 的行号与区室编号

state = StateMonitor(
    neuron,
    "v",
    record=[0, 5, 10, 19],
)

记录结果的行:

StateMonitor 行 原区室编号
0 0
1 5
2 10
3 19

所以绘图使用:

for row, compartment in enumerate([0, 5, 10, 19]):
    plt.plot(state.t/ms, state.v[row]/mV, ...)

不能写 state.v[19],因为 Monitor 只记录了 4 行。

11. 为什么除以 mV

state.v[row] 是带单位的 Brian2 Quantity。

state.v[row] / mV

得到以毫伏为刻度的普通数值。

例如内部值 -0.07 volt

-0.07 volt / millivolt = -70

这不会改变数据,只改变绘图时使用的单位尺度。

轴标签必须与转换一致:

plt.ylabel("membrane potential (mV)")

12. 为什么本例可能产生很大的去极化

0.1 nA 看上去很小,但区室本身也非常小。

电流密度取决于:

总电流 / 区室膜面积

对细直径、短区室而言,同样的点电流可能对应很强的局部驱动。

所以不要只看 nA 的数字判断输入“强不强”。必须同时考虑:

  • 注入位置。
  • 区室面积。
  • 膜电导。
  • 膜电容。
  • 仿真时长。

13. 本章模型没有动作电位

SpatialNeuron 并不自动意味着“完整生物神经元”。

本章只定义了被动漏电流:

Im = gL*(EL-v)

没有:

  • 钠通道。
  • 钾通道。
  • 阈值与 reset。
  • 主动树突通道。

因此这是被动电缆响应实验,不是动作电位传播模型。

要模拟主动传导,需要在 Im 中加入电压门控离子通道动力学。

14. 区室数与数值收敛

尝试 n=10、20、40。

如果关键位置电压随 n 增大逐渐稳定,说明空间离散接近收敛。

比较时要注意:

  • 区室索引代表的位置会变化。
  • 应按实际距离选择记录点。
  • point current 会由 Brian2按区室面积处理。

不能只看脚本是否运行成功。空间模型必须检查离散精度。

15. 常见误区

误区一:一个区室就是一个独立神经元

这些区室属于同一个 SpatialNeuron,并通过轴向电流耦合。

误区二:I 和 Im 只是变量名不同

本例中 I 是总点电流,Im 是膜电流密度,单位和物理含义都不同。

误区三:区室越多永远越好

分辨率提高但计算更贵;超过收敛需求后继续增加没有必要。

误区四:远端响应小只由距离造成

几何、Ri、gL、Cm、边界条件和分支结构都会影响传播。

误区五:SpatialNeuron 自动加入生物通道

它负责空间电缆耦合;具体膜电流仍由你定义。

16. 动手实验

实验 A:改变 Ri

测试 50、150、300 ohm*cm,预测远端响应怎样变化。

实验 B:改变直径

测试 1、2、4 μm。讨论轴向传播和膜面积同时变化的影响。

实验 C:移动注入位置

把电流注入 10 号区室,记录两端响应,观察空间对称性和边界影响。

实验 D:改变区室数

用实际空间位置而不是固定索引比较 n=10、20、40 的结果。

实验 E:加入时间变化的点电流

让 I 只在某个时间窗开启,观察充电和放电过程。

本章小结

点神经元假设:

一个细胞 -> 一个 v

多区室模型假设:

一个细胞 -> 多个空间区室 -> 多个相互耦合的 v

SpatialNeuron 根据形态、Cm 和 Ri 处理轴向耦合,你负责定义膜电流和外部输入。

下一章回到方程表达能力,学习怎样组合 Equations、使用子表达式并定义不等同于 spike 的自定义事件。

官方参考