跳转到内容

感觉系统/计算机模型/神经模拟

来自Wikibooks,开放世界中的开放书籍

视觉系统模拟

模拟动作电位

[编辑 | 编辑源代码]

动作电位

[编辑 | 编辑源代码]

“动作电位”是在神经系统中传播信号所使用的典型电压变化。

动作电位 – 时间依赖性

使用下面描述的机制,传入刺激(任何类型的刺激)都可能导致神经细胞的电压电位发生变化。在达到某个阈值之前,这就是全部内容(图 4 中的“失败启动”)。但是,当电压门控离子通道的阈值达到时,就会发生反馈反应,几乎立即完全打开Na+离子通道(下面的“去极化”):这使得Na+的通透性(在静息状态下约为K+通透性的1%)比K+的通透性大20倍。总的来说,电压从大约-60mV上升到大约+50mV。在这一点上,内部反应开始关闭(并阻断)Na+通道,并打开K+通道以恢复平衡状态。在此“不应期”期间(约1毫秒),任何去极化都不能引发动作电位。只有当静息状态恢复时,才能触发新的动作电位。

要模拟动作电位,我们首先必须定义细胞膜的不同组成部分,以及如何用分析方法描述它们。

细胞膜

[编辑 | 编辑源代码]

细胞膜由一层拒水的、几乎不可渗透的蛋白质双层组成,即细胞膜。信号处理的真正能力并非来自细胞膜,而是来自嵌入该膜中的离子通道。离子通道是嵌入细胞膜中的蛋白质,可以选择性地为某些类型的离子打开。(这种选择性是由构成离子通道的氨基酸的几何排列实现的。)除了上面提到的Na+和K+离子外,神经系统中通常存在的离子还有阳离子Ca2+、Mg2+和阴离子Cl-。

离子通道的状态

[编辑 | 编辑源代码]

离子通道可以处于三种状态之一

  • 开放(例如,开放的Na通道允许Na+离子通过,但阻止所有其他类型的离子)。
  • 关闭,但可以打开。
  • 关闭,且无法打开。

静息状态

[编辑 | 编辑源代码]

典型默认情况——当没有任何事情发生时——的特点是K+通道是打开的,而其他通道是关闭的。在这种情况下,两种力决定了细胞电压

  • K+细胞内和细胞外浓度之间的(化学)浓度差,这是由上述离子泵的持续活动产生的。
  • 细胞内外之间的(电)电压差。

平衡由能斯特方程定义

R ... 气体常数,T ... 温度,z ... 离子化合价,F ... 法拉第常数,[X]o/i … 离子在细胞外/内的浓度。在 25°C 时,RT/F 为 25 mV,这导致静息电位为

对于神经元内部和外部典型的 K+ 浓度,这将产生 。如果同时考虑 K+、Na+ 和 Cl- 的离子通道,则平衡状态由戈德曼方程描述

其中 Pi 表示离子“i”的通透性,I 表示浓度。使用典型的离子浓度,细胞在其静息状态下具有约 -60 mV 的负极性。

离子通道的激活

[编辑 | 编辑源代码]

离子通道的一个显著特征是它们的通透性可以通过以下方式改变:

  • 机械刺激(机械激活离子通道)
  • 化学刺激(配体门控离子通道)
  • 或外部电压(电压门控离子通道)
  • 有时离子通道直接连接两个细胞,在这种情况下,它们被称为间隙连接通道。

重要

  • 感觉系统基本上是基于离子通道的,这些离子通道被机械刺激(压力、声音、运动)、化学刺激(味觉、嗅觉)或电磁刺激(光)激活,并产生“神经信号”,即神经细胞中的电压变化。
  • 动作电位利用电压门控离子通道快速可靠地改变神经元的“状态”。
  • 神经细胞之间的通信主要利用由神经递质激活的离子通道,即前一个神经元在突触处释放的化学物质。这为神经信号的处理提供了最大的灵活性。

电压依赖性离子通道的建模

[编辑 | 编辑源代码]

欧姆定律将电阻器的电阻 R 与其通过的电流 I 和电阻器两端的电压降 V 联系起来

其中 是电阻的电导。如果现在假设电导与通道处于开放构象的概率成正比,则该方程变为

其中是通道的最大电导,而是通道处于开放构象的概率。

示例:钾离子通道

电压门控钾离子通道 (Kv) 只能处于开放或关闭状态。设 α 为通道从关闭到开放的速率,β 为通道从开放到关闭的速率。

由于 n 是通道处于开放状态的概率,因此通道处于关闭状态的概率必须为 (1-n),因为所有通道都处于开放或关闭状态。因此,通道构象的变化可以用以下公式描述:

注意,α 和 β 与电压有关!霍奇金和赫胥黎在 1952 年使用一种称为“电压钳位”的技术确定了这些速率,他们得出了类似以下的结果:

如果您只想模拟电压依赖性钾离子通道,这些将是开始使用的方程。(对于电压门控钠离子通道,方程稍微复杂一些,因为这些通道具有三种可能的构象:开放、关闭和失活。)

霍奇金-赫胥黎方程

[编辑 | 编辑源代码]

上面提到的电压门控离子通道的反馈回路使得确定它们的精确行为变得困难。在第一近似中,动作电位的形状可以通过分析神经元单个轴突隔室的电路来解释,该电路由以下组件组成:1)钠离子通道,2)钾离子通道,3)氯离子通道,4)泄漏电流,5)膜电容,

Circuit diagram of neuronal membrane based on Hodgkin and Huxley model.

原始霍奇金-赫胥黎模型中的最终方程,其中氯离子和其它泄漏电流的电流被组合在一起,如下所示:

霍奇金-赫胥黎模型的脉冲行为。

其中 是时间和电压相关的函数,描述了膜的渗透性。例如,对于钾离子通道,n 服从上述方程,这些方程是通过电压钳位实验确定的。这些方程能够高精度地描述动作电位的形状和传播!该模型可以使用开源工具轻松求解,例如 Python 动态系统工具箱 PyDSTools。一个简单的求解文件可在 [1] 中找到,输出结果如下所示。

[编辑 | 编辑源代码]

动作电位产生的建模:菲茨休-南摩模型

[编辑 | 编辑源代码]
菲茨休-南摩模型的相平面图,其中 (a=0.7, b=0.8, c=3.0, I=-0.4)。显示了四个不同初始条件下的解。虚线表示零斜率线,“o”表示模型的固定点。I=-0.2 将是低于阈值的刺激,导致稳定状态。而 I=-1.6 将使神经元超极化,也导致一个不同的稳定状态。

霍奇金-赫胥黎模型有四个动力学变量:电压,钾离子通道打开的概率 ,钠离子通道在之前处于关闭状态下打开的概率 ,以及钠离子通道在之前处于失活状态下打开的概率 。神经元动作电位产生的简化模型是菲茨休-南摩 (FN) 模型。与霍奇金-赫胥黎模型不同,FN 模型只有两个动态变量,通过将变量 组合成单个变量 ,并将变量 组合成单个变量

下面的两个例子取自 I 是注入神经元的外部电流。由于 FN 模型只有两个动态变量,因此可以使用相平面方法探索其完整动力学(此处提供 Python 中的示例解决方案 [2])。

模拟具有正反馈的单个神经元

[编辑 | 编辑源代码]

以下两个例子取自[3]。这本书提供了对简单神经系统建模的精彩介绍,并对底层信息处理有了很好的理解。

Simple neural system with feedback.

让我们首先看一下单个神经元的响应,其输入为,并对其自身进行反馈。输入的权重为,反馈的权重为。神经元的响应由下式给出

这表明即使是非常简单的模拟也可以捕捉到真实神经元的信号处理特性。

系统对输入脉冲的输出:一个“泄漏积分器”
""" Simulation of the effect of feedback on a single neuron """

import numpy as np
import matplotlib.pylab as plt

# System configuration
is_impulse = True   # 'True' for impulse, 'False' for step
t_start = 11        # set a start time for the input     
n_steps = 100       
v = 1               # input weight
w = 0.95            # feedback weight

# Stimulus
x = np.zeros(n_steps)
if is_impulse:     
    x[t_start] = 1  # then set the input at only one time point
else:               
    x[t_start:] = 1 # step input
    
# Response
y = np.zeros(n_steps)           # allocate output vector 
for t in range(1, n_steps):     # at every time step (skipping first) 
    y[t] = w*y[t-1] + v*x[t-1]  # compute the output 

# Plot the results
time = np.arange(n_steps)
fig, axs = plt.subplots(2, 1, sharex=True)

axs[0].plot(time, x)
axs[0].set_ylabel('Input')
axs[0].margins(x=0)

axs[1].plot(time, y)
axs[1].set_xlabel('Time Step')
axs[1].set_ylabel('Output')

plt.show()

模拟一个简单的神经系统

[编辑 | 编辑源代码]

即使是非常简单的神经系统,也可以表现出一套令人惊讶的多样化的行为。一个例子是威尔逊的蝗虫飞行中央模式发生器模型。这里系统由下式描述:

W 是描述神经元递归连接的连接矩阵,并描述了系统的输入。

输入 x 以权重 vi 连接到单元 yi (i=1,2,3,4),单元 y_l (l = 1,2,3,4) 以权重 w_kl 连接到单元 y_k (k = 1,2,3,4)。为了清晰起见,未显示 y2 和 y3 的自连接,并且未标记各个前馈和递归权重。基于 Tom Anastasio 优秀的著作“神经系统建模教程”。
在威尔逊的蝗虫飞行中央模式发生器 (CPG) 模型的线性版本中,代表运动神经元的单元的响应:一个简单的输入脉冲会在神经元 2 和 3 中引发持续的拮抗振荡。
""" 'Recurrent' feedback in simple network:
linear version of Wilson's locust flight central pattern generator (CPG) """

import numpy as np
import matplotlib.pylab as plt

# System configuration
v = np.zeros(4)                     # input weight matrix (vector)
v[1] = 1

w1 = [  0.9,  0.2,    0,     0]     # feedback weights to unit one
w2 = [-0.95,  0.4, -0.5,     0]     # ... to unit two
w3 = [    0, -0.5,  0.4, -0.95]     # ... to unit three
w4 = [    0,    0,  0.2,  0.9 ]     # ... to unit four
W = np.vstack( [w1, w2, w3, w4] )   

n_steps = 100              

# Initial kick, to start the system
x = np.zeros(n_steps)               # zero input vector
t_kick = 11                
x[t_kick] = 1              

# Simulation
y = np.zeros( (4,n_steps) )         # zero output vector
for t in range(1,n_steps):          # for each time step
    y[:,t] = W @ y[:,t-1] + v * x[t-1]  # compute output

# Show the result
time = np.arange(n_steps)     
plt.plot(time, x, '-', label='Input')
plt.plot(time, y[1,:], ls='dashed', label = 'Left Motorneuron')
plt.plot(time, y[2,:], ls='dotted', label='Right Motorneuron')

# Format the plot
plt.xlabel('Time Step')
plt.ylabel('Input and Unit Responses')
plt.gca().margins(x=0)
plt.tight_layout()
plt.legend()
plt.show()

神经形态电路的开发和理论

[编辑 | 编辑源代码]

神经形态工程使用超大规模集成 (VLSI) 系统来构建模拟和数字电路,模拟神经生物学架构和行为。大多数现代电路主要利用数字电路组件,因为它们速度快、精度高且不受噪声影响。与更符合生物学相关的模拟电路不同,数字电路需要更高的电源,并且无法进行并行计算。生物神经元的行为,例如膜泄漏和阈值约束,是材料基底参数的函数,需要模拟系统来建模和微调,而不仅仅是数字 0/1。本文将简要总结此类神经形态电路及其模拟电路组件背后的理论。

神经形态工程的现状

[编辑 | 编辑源代码]

在过去的 10 年中,神经形态工程领域经历了快速发展,并受到媒体和科学界的广泛关注。

在这一话题引起欧盟委员会关注后,人类大脑计划于 2013 年启动,并在十年内获得 6 亿欧元的资助。该项目的目标是从分子和神经元水平到神经回路模拟人脑。它计划于 2023 年 9 月结束,虽然主要目标尚未实现,但它正在提供至少 200 个大脑区域的详细 3D 地图和超级计算机,以模拟记忆和意识等功能,等等[4]。另一个主要成果是于 2019 年推出的EBRAINS虚拟平台。它提供了一套工具和图像数据,全球科学家可以使用这些工具和数据进行模拟和数字实验。

同样在 2013 年,美国国立卫生研究院宣布为旨在重建大量神经元活动的大脑计划提供资金。该项目正在进行中,并已拨款 6.8 亿美元用于 2023 年之前的研究。

近年来取得的其他主要成就列在下面

1. TrueNorth 芯片 (IBM, 2014):拥有总共 2.68 亿个可编程突触

2. Loihi 芯片 (英特尔, 2017):基于异步神经脉冲网络 (SNN) 进行自适应事件驱动并行计算。它在 2021 年被 Loihi2 取代。

3. 原型芯片 (IMEC, 2017):第一个基于 OxRAM 技术的自学习神经形态芯片

4. Akida AI 处理器开发套件 (Brainchip, 2021):第一个商用神经形态处理器

晶体管结构与物理

[编辑 | 编辑源代码]

金属氧化物半导体场效应晶体管 (MOSFET) 是现代集成电路的常用组件。MOSFET 被归类为单极性器件,因为每个晶体管仅使用一种载流子类型;负型 MOFET (nFET) 以电子作为载流子,正型 MOSFET (pFET) 以空穴作为载流子。

n 型 MOSFET 的横截面。显示栅极 (G)、体 (B)、源极 (S) 和漏极 (D) 的晶体管。正电流从 n+ 漏极阱流向 n+ 源极阱。来源:维基百科

一般的 MOSFET 具有金属栅极 (G) 和两个称为源极 (S) 和漏极 (D) 的 pn 结二极管,如图 \ref{fig: transistor} 所示。有一个绝缘氧化层将栅极与硅体 (B) 隔开。承载电荷的沟道直接位于该氧化层下方。电流是栅极尺寸的函数。

源极和漏极是对称的,唯一的区别在于施加在其上的偏置电压。在nFET器件中,形成源极和漏极的阱是n型,并位于p型衬底中。衬底通过体p型阱接触进行偏置。正电流在栅极下方的沟道中从漏极流向源极。源极之所以被称为源极,是因为它是电子的来源。相反,在pFET器件中,p型源极和漏极位于p型衬底中的体n阱中;电流从源极流向漏极。

当载流子由于浓度梯度而移动时,这称为扩散。如果载流子由于电场而被扫过,则称为漂移。按照惯例,nFET的漏极偏置电压高于源极,而pFET的源极偏置电压更高。

在nFET中,当在栅极上施加正电压时,正电荷会在金属触点上积累。这会将电子从体硅吸引到硅氧化物界面,在源极和漏极之间形成一个带负电的沟道。栅极电压越大,沟道越厚,从而降低内部电阻,并因此对数地增加电流。对于小的栅极电压,通常低于阈值电压,,沟道尚未完全导通,并且从漏极到源极的电流增加在对数尺度上呈线性增加。当时,此状态称为亚阈值区。超过此阈值电压,,沟道在源极和漏极之间完全导通,电流处于超阈值区。

晶体管电流作为的函数,对于的固定值。

为了使电流从漏极流向源极,最初必须存在一个电场来将载流子扫过沟道。该电场的强度是源极和漏极之间施加的电位差()的函数,因此控制漏极-源极电流。对于的小值,电流作为的函数呈线性增加,对于恒定的值。随着增加超过,电流开始饱和。

pFET的行为与nFET类似,只是载流子是空穴,并且接触偏置被反转。

在数字应用中,晶体管要么在其饱和区(导通)工作,要么处于截止状态。导通和截止模式之间电位差的这种大范围是数字电路功耗如此高的原因。相反,模拟电路利用晶体管的线性区域来产生连续信号,并降低功耗。但是,由于栅极或漏极-源极电压的微小变化会导致电流发生较大变化,因此模拟系统容易受到噪声的影响。

神经形态工程领域利用模拟电路的噪声特性来复制随机神经元行为[5] [6]。与时钟驱动的数字电路不同,模拟电路能够产生具有与生物时间尺度(约)相似的时域动态的动作电位。通过泄漏偏置和可变电阻晶体管延长时间常数来减慢电位并控制放电率。已经创建了能够模拟具有不同时域动态的生物动作电位的模拟电路,从而允许硅电路模拟神经元的基于脉冲的学习行为[7]。而数字电路只能包含二进制突触权重[0,1],模拟电路能够在连续的值范围内保持突触权重,这使得模拟电路在神经形态电路中特别有利。

基本静态电路

[编辑 | 编辑源代码]

在理解了晶体管的工作原理和偏置方式后,可以通过这些知识来理解基本的静态模拟电路。之后,这些基本的静态电路将被组合起来创建神经形态电路。在以下电路示例中,源极、漏极和栅极电压是固定的,电流是输出。在实践中,偏置栅极电压被固定到亚阈值(),漏极保持在饱和状态(),源极和体极接地()。所有非理想特性都被忽略。

基本的静态电路。(A) 二极管连接的晶体管。(B) 电流镜。(C) 源极跟随器。(D) 反相器。(E) 电流传送器。(F) 差分对。

二极管连接的晶体管

[编辑 | 编辑源代码]

一个二极管连接的nFET将其栅极连接到漏极。由于浮动漏极控制着栅极电压,漏极-栅极电压将自动调节,因此器件将始终吸收输入电流,。超过几个微伏,晶体管将运行在饱和状态。类似地,一个二极管连接的pFET将其栅极连接到源极。尽管这个简单的器件似乎仅仅起到了短路的作用,但它通常用于模拟电路中复制和调节电流。特别是在神经形态电路中,它们被用来减缓电流吸收,以将电路时间常数增加到生物学上合理的时间范围。

电流镜

[编辑 | 编辑源代码]

电流镜利用了二极管连接的晶体管吸收电流的能力。当输入电流被迫通过二极管连接的晶体管,,浮动漏极和栅极被调节到合适的电压,允许输入电流通过。由于这两个晶体管共享一个公共栅极节点,也将吸收相同的电流。这迫使输出晶体管复制输入电流。只要


  1. .

输出晶体管将镜像输入电流。可以通过调整这两个参数来控制电流镜的增益。当使用具有不同尺寸的晶体管时,也称为倾斜镜,增益为

pFET电流镜只是翻转的nFET电流镜,其中二极管连接的pFET镜像输入电流,并迫使另一个pFET输出电流。

电流镜通常用于复制电流而不会消耗输入电流。这对于反馈回路尤其重要,例如用于加速动作电位的回路,以及在突触处对输入电流求和。

源极跟随器

[编辑 | 编辑源代码]

源跟随器由一个输入晶体管 和一个叠加在其上的偏置晶体管 组成。固定的亚阈值 () 偏置电压控制着栅极 ,迫使其吸收恒定电流 。因此, 也被强制吸收相同的电流 (),而不管输入电压 是什么。

源跟随器之所以被称为源跟随器,是因为输出 将跟随 ,并存在由以下公式描述的轻微偏移:



其中 kappa 是亚阈值斜率因子,通常小于 1。

这个简单的电路通常用作缓冲器。由于电流无法通过栅极,因此该电路不会从输入端汲取电流,这对低功耗电路来说是一个重要的特性。源跟随器还可以隔离电路,保护它们免受电源浪涌或静电的影响。pFET 源跟随器与 nFET 源跟随器的唯一区别在于,偏置 pFET 的体连接到

在神经形态电路中,源跟随器等被用作简单的电流积分器,其行为类似于突触后神经元,收集来自许多突触前神经元的电流。


反相器

[编辑 | 编辑源代码]

一个反相器由一个pFET,,叠加在一个nFET,,上构成,它们的栅极连接到输入端,,输出端连接到共源节点,。当输入高电平信号时,pFET关闭但nFET导通,有效地将输出节点,,放电,并反相信号。相反,当输入信号为低电平时,nFET关闭但pFET导通,给节点充电。

这个简单的电路可以用作快速开关。反相器也常被用作缓冲器,因为它可以产生输出电流而无需直接提供输入电流,因为不允许电流通过栅极。当两个反相器串联使用时,它们可以用作同相放大器。Mead 等人在 1989 年最初的积分-触发硅神经元中使用了这种方法[8],以产生类似于生物动作电位的快速去极化尖峰。然而,当输入在高低信号之间波动时,两个晶体管都处于超阈值饱和状态,消耗电流,这使得该电路非常耗电。

电流传送器

[编辑 | 编辑源代码]

电流传送器也常被称为缓冲电流镜像。电流传送器由两个晶体管组成,它们的栅极连接到对方的节点,电流传送器可以自我调节,使输出电流与输入电流匹配,其方式类似于电流镜像。

电流传送器通常用于取代大型串联重复阵列中的电流镜像。这是因为电流镜像电流通过栅极控制,栅极的氧化物电容会导致输出延迟。虽然对于单个输出电流镜像来说,这种延迟可以忽略不计,但对于较长的镜像阵列,累积的输出延迟会很大。这种延迟会极大地阻碍大型并行过程,例如试图模拟生物神经网络计算策略的过程。

差分对

[编辑 | 编辑源代码]

差分对是一个比较电路,由两个共源跟随器和一个公共偏置组成,该偏置强制较弱输入的电流被抑制。偏置晶体管将强制保持恒定,将公共节点,,连接到固定电压。两个输入晶体管都希望分别与其输入电压成比例地汲取电流,。但是,由于公共节点必须保持固定,因此输入晶体管的漏极必须与其栅极电压成比例地升高。输入电压较低的晶体管将充当阻尼器,并减少通过其漏极的电流。输掉的晶体管将看到其源极电压增加,因此退出饱和状态。

在神经元电路的设置中,差分对可以作为离子通道的激活阈值,低于该阈值,电压门控离子通道将不会打开,从而防止神经元产生尖峰[9]

硅神经元

[编辑 | 编辑源代码]

胜者为王

[编辑 | 编辑源代码]

胜者为王 (WTA) 电路最初由 Lazzaro 等人设计[10],是一个连续时间模拟电路。它比较一组单元的输出,并且只允许输出电流最大的单元开启,抑制所有其他竞争单元。

一个双输入 CMOS 胜者为王电路

每个单元包含一个电流控制的传送器,接收输入电流,并输出到控制偏置晶体管的公共线上。输入电流最大的单元也将输出最大的电流,从而提高公共节点的电压。这迫使较弱的单元关闭。WTA 电路可以扩展到包含一个大型的竞争单元网络。软 WTA 也将其输出电流镜像回输入端,有效地提高单元增益。如果单元阵列的动态范围较小,则需要这样做以减少噪声和随机切换。

WTA 网络通常用作计算神经网络中竞争学习的一种形式,涉及分布式决策。特别是,WTA 网络已被用于执行低级识别和分类任务,这些任务更类似于视觉选择任务期间皮层活动[11]

积分-发放神经元

[编辑 | 编辑源代码]

积分-发放神经元的通用示意图,也称为轴突丘神经元,是最常用的脉冲神经元模型[8]。大多数轴突丘电路之间的共同元素包括:具有膜电位记忆的节点、放大器、正反馈回路和将膜电位重置到其静息状态的机制

输入电流充电,后者存储在电容器 C 中。该电容器类似于脂质细胞膜,脂质细胞膜阻止离子的自由扩散,从而在脂质膜两侧积累的电荷差产生膜电位。输入被放大以输出电压尖峰。膜电位的变化通过正反馈到,产生更快的尖峰。这与生物轴突丘非常相似,轴突丘密集地填充了电压门控钠通道,放大总和电位以产生动作电位。当产生电压尖峰时,复位偏置开始耗尽节点。这类似于钠钾通道,钠钾通道主动地逆浓度梯度泵送钠离子和钾离子以维持静息膜电位。

脉冲神经元电路。放大器由两个反相放大器组成,它们产生动作电位特征性的快速向上摆动。输出尖峰由输入电流启动,其宽度由调制。来源:改编自 Mead 等人,1989 年


DPI 神经元电路。(A)电路示意图。输入 DPI 低通滤波器(黄色,ML1-ML3)模拟神经元的泄漏电导。尖峰事件生成放大器(红色,MA1-MA6)实现基于电流的正反馈(模拟钠激活和失活电导),并在极低功耗下产生地址事件。复位块(蓝色,MR1-MR6)复位神经元,并在由 Vref 偏置电压设置的难治期内保持其处于复位状态。一个额外的 DPI 滤波器整合尖峰并产生缓慢的超极化电流 Ig,该电流负责尖峰频率适应(绿色,MG1-MG6)。(B)DPI 神经元电路对恒定输入电流的响应。测量数据拟合了一个函数,该函数包括在刺激开始时的指数∝e−t/τK,这是所有基于电导的模型的特征,以及在尖峰开始时的附加指数∝e+t/τNa(基于指数 I&F 计算模型的特征;Brette 和 Gerstner,2005)。来源:Indiveri 等人,2010 年。


最初的轴突丘硅神经元已经过改进,通过添加一个比较输入与设定阈值偏置的差分对,从而包含了一个激活阈值[9]。这种基于电导的硅神经元利用带泄漏晶体管的差分对积分器(DPI)来比较输入,与阈值。泄漏偏置、不应期偏置、适应偏置和正反馈增益都独立控制着脉冲频率。研究一直集中在实现脉冲频率适应以设定不应期和调节阈值[12]。适应允许神经元将其输出放电率调节为其输入的函数。如果存在持续的高频输入,神经元将对输入变得不敏感,并且输出将随着时间的推移而逐渐减弱。基于电导的神经元电路的适应组件通过钙通量建模,并通过适应电容存储过去活动的信息。脉冲频率适应的出现使得神经元层面的变化能够控制突触层面的自适应学习机制。这种神经元学习模型是从生物学中建模的[13],并在硅突触中进一步讨论。

(A)电流衰减机制。(B)作为(蓝色)函数的自适应阈值机制。神经元的脉冲阈值(红色)随着每次脉冲而增加,从而增加了脉冲时间常数。来源:Indiveri 等人,2010 年

硅突触

[编辑 | 编辑源代码]

最基本的硅突触,最初由 Mead 等人于 1989 年使用[8],仅由一个 pFET 源跟随器组成,该跟随器接收低信号脉冲输入并输出单向电流,[14]

(A)基本突触电路。(B)具有更长时间常数的突触电路。来源:分别改编自 Mead 等人,1989 年和 Lazzaro 等人,1993 年。

脉冲的幅度由权重偏置控制,脉冲宽度与输入脉冲宽度直接相关,输入脉冲宽度由 $V_{\tau}$ 设置。在 Lazzaro 等人(1993 年)的突触电路中添加了电容器以将脉冲时间常数增加到生物学上合理的值。这减缓了脉冲超极化和去极化的速率,并且是电容的函数。

基本突触电路。来源:改编自 Lazzaro 等人,1992 年

对于描绘竞争性兴奋和抑制行为的多个输入,对数域积分器使用来调节输出电流幅度,作为输入电流的函数,根据

控制着 为输出晶体管栅极充电的速度。 控制着输出 吸收电流的速度。这种竞争特性对于模拟神经递质促进或抑制神经元放电的生物学行为是必要的。

突触模型也已开发出使用对数域滤波器的二阶线性积分器,能够模拟兴奋性突触后电流 (EPSC) 的指数衰减[15]。这对于获得生物学上合理的脉冲轮廓和时间常数是必要的。增益也可以独立于突触时间常数进行控制,这对于脉冲速率和脉冲定时相关的学习机制是必要的。

A) 差分对积分器 (对数域) 突触的 EPSC(“兴奋性突触后电流”)测量。B) 所用电路的示意图。(基于 Giacomo Indiveri 的图像)

上述突触只是简单地传递来自突触前源的电流,同时改变脉冲尖峰的形状。然而,它们不包含任何先前尖峰的记忆,也不能够根据时间动态来适应其行为。但是,如果神经形态电路要像生物神经网络一样学习,这些能力是必要的。

一个人工神经网络。有 个突触前神经元(),和 个突触后神经元()。 是一个突触前神经元,它与突触后神经元 突触连接,突触权重为 ,导致突触后神经元输出 。来源:维基百科

根据赫布法则,学习和记忆等行为被假设发生在突触水平[16]。它将学习过程归因于长期的神经元适应,其中突触前和突触后的贡献通过生化修饰得到增强或减弱。该理论通常总结为一句谚语:“一起放电的神经元,会形成连接”。人工神经网络通过这些生化“连接”的修改来模拟学习,使用一个参数,即突触权重 。突触权重是一个参数状态变量,它量化了突触前神经元的脉冲如何影响突触后神经元的输出。赫布突触权重可塑性的两种模型包括脉冲速率依赖性可塑性 (SRDP) 和脉冲定时依赖性可塑性 (STDP)。自从该理论提出以来,生物神经元的活动已被证明表现出与赫布学习非常相似的行为。一个例子是突触 NMDA 和 AMPA 受体可塑性修饰,导致钙通量诱导的适应[17]

生物神经元中信息的学习和长期记忆归因于 NMDA 通道诱导的适应。这些 NMDA 受体是电压依赖性的,并且控制细胞内钙离子的通量。动物研究表明,当细胞外钙减少时,神经元脱敏会减少[17]

(A)包含 AMPA 和 NMDA 通道以及钙的简单突触。(B)突触各个元件的电路模型。(C)响应突触前动作 (AP) 电位输入 ()的电路输出。来源:Rachmuth 等人,2011 年

由于钙离子浓度呈指数衰减,因此这种行为很容易使用亚阈值晶体管在硬件上实现。Rachmuth 等人(2011)[18]展示了一个演示钙依赖性生物行为的电路模型。钙信号,,通过节点根据钙依赖性 STDP 和 SRDP 学习规则调节 AMPA 和 NMDA 通道的活性。这些学习规则的输出是突触权重,,它与活跃的 AMPA 和 NMDA 通道的数量成正比。SRDP 模型根据两个状态变量(控制更新规则)和(控制学习率)来描述权重。



其中是突触权重,是更新规则,是学习率,是一个常数,它允许权重在没有输入的情况下漂移出饱和状态。

NMDA 通道控制钙离子内流,。NMDA 受体的电压依赖性由建模,并且通道机制由一个大型电容器控制,以增加钙离子时间常数。输出通过电流镜像复制到电路中,以执行下游学习功能。

Ω电路将ICa与阈值偏置(θLTP和θLTD)进行比较,这些偏置分别通过一系列差分对电路控制长期增强或长期抑制。差分对的输出决定更新规则。该Ω电路已被证明可以展现出海马体中观察到的各种Hebbian学习规则,以及小脑中使用的反Hebbian学习规则。

η电路通过仅在ICa高于差分对设定的阈值θη时才允许更新,来控制突触学习何时发生。学习率(LR)根据以下公式建模:



其中,的函数,并控制学习率;电路的电容,而是比较器的阈值电压。此函数表明,为了模拟SRDT,必须对进行偏置以维持较高的。为了在不活动期间将泄漏至,包含了一个泄漏电流

NEURON仿真环境

[编辑 | 编辑源代码]

Neuron是一个仿真环境,您可以使用它来模拟生物和人工神经元以及神经元网络中离子和动作电位的传播[19]。用户可以通过定义和连接神经元细胞部分来指定模型几何形状,这些部分可以配备各种机制,例如离子通道、钳位和突触。为了与NEURON交互,用户可以使用图形用户界面(GUI)或其中一种编程语言hoc(一种具有类似C语法的语言)或Python作为解释器。GUI包含了大多数常用功能的广泛选择,右侧的图中显示了一个示例屏幕截图。另一方面,编程语言可用于向模型添加更具体的机制以及用于自动化目的。此外,可以使用编程语言NMODL创建自定义机制,它是MODL的扩展,MODL是由NBSR(国家生物医学模拟资源)开发的模型描述语言。然后可以编译这些新机制,并通过GUI或解释器将其添加到模型中。

A screenshot of the Graphical User Interface of NEURON. Source: Neuron tutorial - https://www.neuron.yale.edu/neuron/static/docs/cbtut/stylized/usemodel.html

Neuron最初由杜克大学的John W. Moore与Michael Hines合作开发。目前,众多研究所和大学将其用于教育和研究目的。有大量信息可用,包括包含文档的官方网站、NEURON论坛以及各种教程和指南。此外,2006年出版了NEURON的权威参考书,名为“The NEURON Book”[20]。要阅读以下章节并使用NEURON,建议您具备一些关于神经元生理学的背景知识。关于神经元的一些信息来源示例包括WikiBook章节或Khan学院高级神经系统生理学章节介绍中的视频。由于本文档并非旨在作为教程,而只是对NEURON中可能性和模型结构的概述,因此我们不会介绍如何使用NEURON执行此处提到的操作的具体命令或细节。有关使用NEURON进行实现的更多实用信息,我建议您参考下面链接的教程以及官方网页上的文档[19]

模型创建

[编辑 | 编辑源代码]
神经元的示意图。

单细胞几何

[编辑 | 编辑源代码]

首先,我们将讨论创建由单个生物神经元组成的模型几何形状。右侧的图中显示了神经元的示意图。在下面的清单中,显示了一个示例代码片段,其中使用hoc指定了一个具有一个胞体和两个树突的多室细胞。

A schematic representation of a neuron with a soma and two dendrites.

load_file("nrngui.hoc")

// Create a soma object and an array containing 2 dendrite objects
ndend = 2
create soma, dend[ndend]
access soma

// Initialize the soma and the dendrites
soma {
  nseg = 1
  diam = 18.8
  L = 18.8
  Ra = 123.0
  insert hh
}

dend[0] {
    nseg = 5
    diam = 3.18
    L = 701.9
    Ra = 123
    insert pas
}

dend[1] {
    nseg = 5
    diam = 2.0
    L = 549.1
    Ra = 123
    insert pas
}

// Connect the dendrites to the soma
connect dend[0](0), soma(0)
connect dend[1](0), soma(1)

// Create an electrode in the soma
objectvar stim
stim = new IClamp(0.5)

// Set stimulation parameters delay, duration and amplitude
stim.del = 100
stim.dur = 100
stim.amp = 0.1

// Set the simulation end time
tstop = 300

NEURON 的基本构建块称为“段”(sections)。最初,一个段仅表示一个具有个体属性(例如长度和直径)的圆柱形管道。通过配备相应的机制,例如离子通道或与其他细胞或人工刺激的突触连接,一个段可以用来表示不同的神经元部分,例如胞体、树突或轴突。然后,可以通过以任何你想要的方式连接段的末端来创建神经元细胞,例如树状结构,只要没有循环即可。如上所示列表中指定的神经元,在右侧的图中进行了可视化。

节段(Segments)

[编辑 | 编辑源代码]

为了更准确地模拟动作电位在段中的传播,可以将段划分为更小的部分,称为“节段”(segments)。将段分成多个节段的模型称为“多室”(multi-compartment)模型。增加节段的数量可以看作是增加了空间离散化的粒度,这在例如膜特性沿段不均匀时会导致更准确的结果。默认情况下,一个段包含一个节段。

膜机制(Membrane Mechanisms)

[编辑 | 编辑源代码]

段的默认设置不包含任何离子通道,但用户可以添加它们[21]。有两种类型的内置离子通道膜机制可用,即被动离子通道膜模型和Hodgkin-Huxley 模型膜模型,它表示被动和电压门控离子通道的组合。如果这还不够,用户可以使用 NMODL 编程语言定义自己的膜机制。

点过程(Point Processes)

[编辑 | 编辑源代码]
突触的示意图

除了在膜区域定义的膜机制外,还可以向段添加称为“点过程”(Point processes)的局部机制。一些示例包括突触(如右侧图所示)和电压钳和电流钳。同样,用户可以使用 NMODL 编程语言自由实现自己的机制。点过程和膜机制之间的一个关键区别在于,用户可以指定应在段上添加点过程的位置,因为它是一种局部机制[21]

输出和可视化(Output and Visualizations)

[编辑 | 编辑源代码]

可以跟踪计算量的随时间变化并进行绘图,例如创建特定节段内电压随时间变化的图形,如上图 GUI 屏幕截图所示。还可以制作动画,例如显示轴突内电压分布如何随时间变化。请注意,这些量仅在每个节段的中心和每个段的边界处计算。

创建细胞网络(Creating a Cell Network)

[编辑 | 编辑源代码]

除了模拟单个细胞内的离子浓度外,还可以连接细胞并模拟神经元网络。为此,用户必须将突触(一种点过程)连接到突触后神经元,然后创建“NetCon”对象,这些对象将充当突触前神经元和突触后神经元之间的连接。用户可以将不同类型的突触连接到神经元,例如AlphaSynapse,其中突触电导根据 alpha 函数衰减,以及ExpSyn,其中突触电导呈指数衰减。与其他机制一样,也可以使用 NMODL 创建自定义突触。对于 NetCon 对象,可以指定多个参数,例如阈值和延迟,这些参数决定了突触前神经元引起突触后电位的必要条件。

人工神经元(Artificial Neurons)

[编辑 | 编辑源代码]

除了我们迄今为止讨论过的生物神经元之外,还有一种可以使用 NEURON 模拟的神经元类型,称为“人工”(artificial)神经元。NEURON 中生物神经元和人工神经元之间的区别在于,人工神经元没有空间范围,并且其动力学高度简化。NEURON 中有几个积分器可用于模拟人工细胞的行为,它们的区别在于它们对生物神经元动力学的简化程度[22]。为了减少人工脉冲神经元细胞和网络模型的计算时间,NEURON 的开发者选择支持事件驱动模拟。这大大减少了模拟脉冲触发的突触传递的计算负担。尽管模拟基于电导的神经元细胞需要连续系统模拟,但 NEURON 仍然可以通过完全支持混合模拟来利用事件驱动方法的优势,从而模拟包含生物和人工神经元的网络。这样,任何人工和基于电导的神经元细胞的组合都可以被模拟,同时仍然实现由人工细胞的事件驱动模拟带来的计算时间减少[23]。用户还可以使用 NMODL 语言添加其他人工神经元类。

Python 中的 NEURON

[编辑 | 编辑源代码]
Python 徽标

自 1984 年以来,NEURON 一直提供 hoc 解释器用于创建和执行模拟。hoc 语言已被扩展和维护,直到现在一直与 NEURON 一起使用,但由于这种维护需要大量时间,并且事实证明它是一种仅限于 NEURON 用户的孤立语言,因此 NEURON 的开发者希望使用更现代的编程语言作为 NEURON 的解释器。由于 Python 在科学计算领域得到广泛使用,许多用户创建了包含可重用代码的包,因此它现在比 hoc 更具吸引力作为解释器[24]。有三种方法可以使用 Python 与 NEURON 结合使用。第一种方法是使用终端运行 NEURON,接受交互式 Python 命令。第二种方法是使用解释器 hoc 运行 NEURON,并通过 hoc 中的特殊命令访问 Python 命令。第三种方法是将 NEURON 作为 Python 的扩展模块使用,以便可以将 NEURON 模块导入到 Python 或 IPython 脚本中。

安装(Installation)

[编辑 | 编辑源代码]

要使用第一种和第二种模式,即使用嵌入式 Python 的 NEURON,只需完成简单的安装即可。但是,要使用第三种模式,即作为 Python 扩展模块的 NEURON,则需要从源代码构建 NEURON 并安装 Python 的 NEURON 共享库,这在此安装指南中进行了说明。

Python 中的 NEURON 命令

[编辑 | 编辑源代码]

由于 NEURON 最初是使用 hoc 作为解释器开发的,因此用户仍然必须在 Python 中显式调用 hoc 函数和类。在使用嵌入在 NEURON 中的 Python 或使用 NEURON 作为扩展模块时,通过“neuron”模块都可以访问 hoc 中已存在的所有函数和类。hoc 和 Python 中的 NEURON 命令之间只有细微的差别,因此当从一种切换到另一种时,用户不应该遇到很多复杂情况[24]。与使用 hoc 相比,使用 Python 与 NEURON 结合使用有一些优势。主要优势之一是 Python 提供了更多功能,因为它是一种完整的面向对象语言,并且有一套广泛的科学和工程分析工具可用。此外,加载来自 NMODL 脚本的用户定义机制变得更容易,这使得 NEURON 对非常具体的机制的模拟更具吸引力[24]。有关 NEURON 与 Python 结合使用的更多详细信息,请参见此处

教程(Tutorials)

[编辑 | 编辑源代码]
您将在第一个教程中学****建模的神经网络的示意图。蓝点表示两个神经元之间的突触。

在线上有多个关于NEURON入门教程,下面列出了其中的两个。

第一个教程中,您将从学习如何创建一个单隔室细胞开始,并最终创建一个神经元网络,如右侧图所示,其中包含自定义细胞机制。同时,教程将引导您了解NEURON的模板、自动化、计算时间优化和结果数据提取等功能。该教程使用hoc命令,但Python中的过程几乎相同。

第二个教程展示了如何创建一个具有被动细胞膜和突触刺激的细胞,以及如何使用Python模块matplotlib可视化结果。

进一步阅读

[编辑 | 编辑源代码]

除了本NEURON入门介绍中提到的内容外,还有许多其他选项可供使用,这些选项正在不断地由开发人员扩展和改进。在“NEURON书籍”[20]中可以找到对NEURON的详细解释,这是官方参考书。此外,官方网站也包含大量信息以及其他资源的链接。

参考文献

[编辑 | 编辑源代码]

另外两个来源是Chicca等人的“自适应硅突触”[25]和Liu等人的“模拟VLSI:电路与原理”[26]

  1. T. Haslwanter (2012). "Hodgkin-Huxley模拟[Python]". 私人通信.
  2. T. Haslwanter (2012). "Fitzhugh-Nagumo模型[Python]". 私人通信.
  3. T. Anastasio (2010). "神经系统建模教程".
  4. 欧洲花费了6亿欧元在计算机上重建人类大脑。结果如何?
  5. E Aydiner,AM Vural,B Ozcelik,K Kiymac,U Tan (2003),一个简单的混沌神经元模型:神经网络的随机行为{{citation}}:CS1维护:作者列表中有多个名称(链接
  6. WM Siebert (1965),初级听觉神经元的随机行为的一些含义
  7. G Indiveri,F Stefanini,E Chicca (2010),基于尖峰学习的广义积分和发射硅神经元{{citation}}:CS1维护:作者列表中有多个名称(链接
  8. a b c CA Mead (1989),模拟VLSI和神经系统
  9. a b RJ Douglas,MA Mahowald (2003),硅神经元
  10. J Lazzaro,S Ryckebusch,MA Mahowald,CA Mead (1989),赢者通吃:复杂度为O(N)的网络{{citation}}:CS1维护:作者列表中有多个名称(链接
  11. M Riesenhuber,T Poggio (1999),皮层中物体识别的分层模型
  12. E Chicca,G Indiveri,R Douglas (2004),基于事件的积分和发射神经元VLSI网络{{citation}}:CS1维护:作者列表中有多个名称(链接
  13. G Indiveri,E Chicca,R Douglas (2004),具有基于尖峰学习突触的积分和发射神经元的VLSI可重构网络{{citation}}:CS1维护:作者列表中有多个名称(链接

  14. J·Lazzaro,J·Wawrzynek (1993),《低功耗硅神经元、轴突和突触》
  15. S·Mitra,G·Indiveri,RE·Cummings (2010),《用于具有全局参数控制的硅突触的对数域积分器的合成》{{引用}}:CS1维护:作者列表有多个名称(链接
  16. DO·Hebb (1949),《行为的组织》
  17. a b PA·Koplas,RL·Rosenberg,GS·Oxford (1997),《钙在去敏大鼠背根神经节神经元辣椒素反应中的作用》{{引用}}:CS1维护:作者列表有多个名称(链接
  18. G·Rachmuth,HZ·Shouval,MF·Bear,CS·Poon (2011),《基于生物物理的神经形态模型的脉冲速率-时间依赖性可塑性》{{引用}}:CS1维护:作者列表有多个名称(链接
  19. a b 《Neuron,用于基于经验的神经元和神经元网络模拟》
  20. a b Nicholas T. Carnevale,Michael L. Hines (2009),《NEURON手册》
  21. a b 《NEURON教程1》
  22. M.L. Hines 和 N.T. Carnevale (2002),《NEURON模拟环境》
  23. Romain Brette,Michelle Rudolph,Ted Carnevale,Michael Hines,David Beeman,James M. Bower,Markus Diesmann,Abigail Morrison,Philip H. Goodman,Frederick C. Harris Jr.,Milind Zirpe,Thomas Natschläger,Dejan Pecevski,Bard Ermentrout,Mikael Djurfeldt,Anders Lansner,Olivier Rochel,Thierry Vieville,Eilif Muller,Andrew P. Davison,Sami El Boustani,Alain Destexhe (2002),《尖峰神经元网络的模拟:工具和策略综述》{{引用}}:CS1维护:作者列表有多个名称(链接
  24. a b c Hines ML,Davison AP,Muller E. NEURON和Python. 神经信息学前沿. 2009;3:1. doi:10.3389/neuro.11.001.2009. (2009),《NEURON和Python》{{引用}}:CS1维护:作者列表有多个名称(链接
  25. E·Chicca,G·Indiveri,R·Douglas (2003),《一种自适应硅突触》{{引用}}:CS1维护:作者列表有多个名称(链接
  26. SC·Liu,J·Kramer,T·Delbrück,G·Indiveri,R·Douglas (2002),《模拟VLSI:电路和原理》{{引用}}:CS1维护:作者列表有多个名称(链接

引言 · 神经感觉刺激

华夏公益教科书