NeuNetBuilderCloud(NNBC)用户手册
## 1. NeuNetBuilderCloud(NNBC) 简介
NeuNetBuilder(NNB)是中小规模脉冲神经网络的构建和分析软件,由中国传媒大学脑科学与智能媒体研究院研发和维护。NNB以层为神经网络的构建单位,每层可包含多个神经元。目前NNB支持多房室神经元模型和STC突触可塑性模型。任何建议意见欢迎通过网页和我们联系。
NNB的主界面由以下几个个主要区构成,如下图:
![](/Uploads/Help/nnb/nnbc-main.png?h=450#border#pic_center)
+ **菜单工具条**:这里可以打开、保存文件,获得帮助。
![](/Uploads/Help/nnb/nnbc-head.png#border#pic_center)
+ **结构窗口**:对神经元的添加、离子通道的添加等结构修改都在这里进行。其中工具栏的主要功能如下:
![](/Uploads/Help/nnb/nnbc-toolbar.png?h=200#border#pic_center)
+ **属性窗口**:对各元素(元素的选择通过Structure Window)的属性设置在这里进行。
+ **神经网络可视化显示窗口**:显示网络结构及网络中的神经元,且可以与结构窗口交互使用。
+ **神经活动窗口**:神经脉冲序列、突触电导变化、刺激电流、钙离子浓度等信号的展示。
+ **Env控制栏** 包含Env的选取、显示、刷新等功能。如下图:
![](/Uploads/Help/nnb/nnbc-envbar.png?h=120#border#pic_center)
## 2. 相关概念介绍
+ **感知层** 用于感知Env中所产生的的刺激信号,仅支持单房室神经元
+ **非感知层** 不受Env的影响,但可以接收感知层传递的信号,也可以自发产生信号,这取决于非感知层中添加的神经元类型。非感知层中支持单房室、多房室神经元。
+ **选中/取消选中神经元** 可以将鼠标移至神经元上,当出现蓝色半透明小球时,双击鼠标即可实现选中/取消选中神经元。选中的神经元将变为红色。
+ **查看神经元映射** 可以将鼠标移至Pre-Layer的神经元上,当出现蓝色半透明小球时,右键单击鼠标可以查看当前神经元与Post层的神经元的映射关系。显示映射关系的神经元将显示为亮蓝色。
备注:同一层中仅支持添加一种神经元。
## 3. 创建/打开项目
### 3.1 新建项目
点击菜单工具条上的【New】按钮,在弹出的界面中填写项目名称和项目描述后单击【Create】按钮创建。如下图:
![](/Uploads/Help/nnb/1.png?h=250#border#pic_center)
### 3.2 创建层
点击软件主界面左侧工具栏【+】按钮,系统弹出**Add Layer**界面如下图。
![](/Uploads/Help/nnb/toolbar-add.png#border#pic_center)
![](/Uploads/Help/nnb/6.png?h=450#border#pic_center)
+ **Area Name** : 区域名称。神经元层所在的区域。每个区域内可以包含多个层
+ **Layer Name** : 层名称。
+ **Layer Size Grid X** : 层的宽度
+ **Layer Size Grid Y** : 层的高度
+ **Sensor Layer** : 当前层是否为感知层。默认为非感知层。
+ **Env** : 感知类型。如果为感知层,需要设置感知层的感知类型。目前感知类型仅支持两种Env0和Env1
如上图的参数,将自动创建 区域【A1】,并在【A1】中创建感知层【L1】,并将【L1】的感知类型设置为了Env0.
### 3.3 为层添加神经元
首先在左侧的结构窗口中选中要添加神经元的层,例如【L1】。单击工具条中的【导入】按钮 弹出神经元的选择列表如下图。
![](/Uploads/Help/nnb/toolbar-import.png#border#pic_center)
![](/Uploads/Help/nnb/4.png?h=450#border#pic_center)
+ **Public** 公共的神经元库
+ **Private** 私有的神经元库。若要在此处添加个人的神经元可以通过 【Local Neuron List】或者 [NBC](https://nimibrain.cuc.edu.cn/nbcloud/)
+ **Local** 本地神经元库。需要加载本地神经元XML文件后才能显示列表。通过该列表可以将本地的神经元库上传至云端。
+ **Neuron Number** 神经元的数量
+ **Distribution** 是否将神经元均匀分布在层当中。默认为均匀分布。该属性可能会影响到后面突触连接的映射关系。
+ **Number of rows** 每行的神经元数量,在采用均匀分布时有效。
在左侧的神经元列表中选中神经元后,右侧的Preview窗口中将会渲染出神经元模型的结构。
备注:在为感知层添加神经元的时候无需选择神经元,系统会为其添加默认的单房室神经元。如上图,我们将为作为感知层的【A1/L1】添加15个神经元,并采用均匀分布的方式,将神经元均匀分布在一行上。
添加完成后,神经网络显示窗口的显示如下图:
![](/Uploads/Help/nnb/5.png#border#pic_center)
可以按照以上方法再添加一个感知类型为Env1的感知层后,神经网络显示窗口效果如下:
![](/Uploads/Help/nnb/10.png#border#pic_center)
如此,我们在网络中添加了两个感知层。此处需要注意的是,**一个项目中最多可以添加两个感知层,并且两个感知层的感知类型需要是不同的**。
### 3.4 神经元电活动的仿真实验
#### 3.4.1 感知层的电活动——环境刺激
在NNB中,我们设计了环境刺激作为感知层的刺激(在NNBC中,感知层无法接收来自其它层的突触输入),模拟真实生物大脑接收环境中视觉、听觉、触觉等一系列感觉刺激的过程。目前,NNBC的环境刺激文件支持两个环境(如视觉和听觉),环境刺激文件的格式是xml,定义了每个时刻每个感知层神经元的放电率,感知层神经元接收到放电率的数值后,即产生服从泊松分布的spike train。
点击菜单栏中的【ENV】按钮,系统弹出**Multi Env Control**界面如下:
![](/Uploads/Help/nnb/7.png?h=450#border#pic_center)
+ **Public** Env公共列表
+ **Private** 私有的Env列表
+ **Env Name** Env名称
+ **ExpProc Name** 当前实验的名称
+ **ExpStep** 实验的次数
+ **Env0/Env1** Env类型,**需要与感知层的感知Env类型相对应**。
+ **Background** Env背景刺激强度(暂不支持)
+ **Scale** 刺激幅度
+ **Type** 刺激类型
+ **Duration** 刺激的持续时间
+ **Del Env** 删除选中的Env
+ **Upload Env** 上传Env
+ **Download Env** 下载Env,下载后可以将此Env文件分享给其他人使用
+ **Name** 刺激的名称
+ **Class** 刺激所属类别
+ **FilePath** 文件路径(暂未启用)
+ **Features** 每个神经元的放电率,其中包含的值的数量与Features Length 一致。每个神经元的放电率以“;”隔开。每个神经元的放电率的取值范围为[0,1]
+ **Features Length** 覆盖的神经元数量。**这个参数要尽可能的与感知层的神经元数量保持一致**
备注:当选中Env 刺激列表中的条目后,右侧才会出现刺激的详情。
现在,我们把环境刺激施加到感知层神经元上,看看它们的反应。首先,我们需要选择要观察的神经元,选中神经元的方法参考[2.相关概念介绍](#2-相关概念介绍) 。选中神经元后的界面如下图
![](/Uploads/Help/nnb/13.png#border#pic_center)
在**Env控制条**中的Env列表中选择Env,如果Env列表中为空的说明尚未添加Env,如果是刚刚添加的Env,可以单击【刷新】按钮进行刷新。选择Env后,单击【启动】按钮。当按钮变为【停止】时,说明Env已经处于准备完毕进入待运行状态。当单击顶部菜单栏的**Start**按钮启动神经网络运行的时候,选中的Env会随之启动。Env的操作如下图:
![](/Uploads/Help/nnb/nnbc-envbar.png?h=150#border#pic_center)
网络启动后,开始给神经元输入“Env”刺激,刺激持续时间是一个RunCourse(在LabSetting中可以设置RunCourse,默认为2000,单位为ms)【神经元活动窗口】显示了神经元的电活动,可以看到,前1000 ms没有给任何神经元刺激,所以大家都没有反应,在后1000 ms中,A1L1(0,0)和A2L1(0,0)的放电率是100 Hz.
![](/Uploads/Help/nnb/16.png#border#pic_center)
点击菜单栏中的【RunNext】按钮,继续运行下一个**RunCourse**,系统依次运行**Env**中的刺激,上图中**Env0**和**Env1**分别对应两种类型的刺激运行的状态,绿色背景代表已经运行完毕,橙色表示在当前**RunCourse**运行结束上该刺激尚未结束,将在下一个**RunCourse**继续运行。
点击上图中的的【停止】按钮,停止**Env**对**Sensory**层神经元的刺激。
#### 3.4.2非感知层的电活动——电流刺激
若该层不为感知层,则可以接收来自感知层或非感知层的突触输入以及直接的电流刺激,在这一小节,我们仅介绍为非感知层施加电流刺激的操作步骤,突触输入的部分请参见X.X.X小节。
请按照3.2小节 [3.2 创建层](#32-创建层) 中提到的构建方法搭建一个包含100个神经元的非感知层,并选中一些神经元(如下图)。
![](/Uploads/Help/nnb/17.png#border#pic_center)
在左侧**结构窗口**中打开【Stimulator】节点,检查其图标状态是否处于Block状态,如果处于Block状态,则单击工具栏右上角的Block切换按钮,切换为激活状态。下面两图分别为Block状态和激活状态。在Block状态下,Stimulator是无效的。
![Block状态](/Uploads/Help/nnb/18.png#border#pic_center)
![激活状态](/Uploads/Help/nnb/22.png#border#pic_center)
有关Stimulator相关的属性介绍参照 [4.3.3 Stimulator 相关属性](#433-stimulator-相关属性)
设置“Mode”为0、1、2、3、4中的某个模式,设置其他相应参数,在菜单栏中点击**Start**按钮,**神经元活动窗口**出现不同的变化曲线。在**神经元活动窗口**中中按层中不同位置的神经元进行分组,每个神经元的不同房室又被划分为单独的区域,在soma房室区的左上角以(该神经元所在的区域名、层名、层中的排列位置)形式来表示该神经元的位置信息,从而区分不同神经元的显示区域。(下图显示的是给soma房室一个从200ms开始,持续时间为2000ms,大小为10 mA的方波刺激后所选神经元的活动)。
![](/Uploads/Help/nnb/23.png#border#pic_center)
上图中不同颜色的的线条代表不同的含义。对每个神经元的每个房室来说,有4条曲线,其中与房室颜色相同的曲线为该房室的spike train.其他曲线的含义参考右侧设置按钮所打开的窗口。如下图:
![](/Uploads/Help/nnb/nnbc-envbar.png?h=150#border#pic_center)
![](/Uploads/Help/nnb/24.png#border#pic_center)
上图中各个参数的含义如下:
+ **Potential** 电压信息
+ **Ca** 钙离子浓度信息
+ **STC_Ca_d**
+ **Stimulator** 刺激信号电压
+ **NTReleasableRate**
+ **Conductance** 电导
+ **NMDA_Ca** 从此以下均属于突触连接有关的信息。
+ **NMDA_VD**
+ **NMDACndctnc**
+ **NMDAPState**
+ **STC_Ca**
+ **TagFlag**
+ **Tag**
+ **PRP**
+ **PRPRate**
+ **APPA_z**
+ **NMDA_z**
点击**Spike train**中的某处,界面中的白框显示**V=…|Cad=…**,分别代表该时刻的电压值和该房室中的Ca离子浓度。
我们还可以阻断神经元的一个或多个离子通道,模拟真实生理实验中阻断离子通道后神经元的反应。在结构窗口中选中要阻断/激活离子通道,点击【阻断】按钮,即可完成离子通道的阻断/激活。
![](/Uploads/Help/nnb/toolbar-block.png#border#pic_center)
注:NNBC支持block通道及修改离子通道电导、离子通道反转电位的操作,不支持对层中的神经元进行添加、删除、编辑离子通道等操作。
### 3.5神经活动数据的保存
NNB支持保存神经活动数据,点击菜单栏中的【SaveResult】按钮,在弹出的窗口中输入要保存多长时间的神经活动数据,一般与Env中刺激总时间一致。下图是保存时长输入窗口
![](/Uploads/Help/nnb/33.png#border#pic_center)
* **Duration** 保存网络的运行时长
* **Step Interval** 保存数据采样间隔。该参数仅对 Ca_d,Conductance,Ca_s,Tag,PRP,STC_Z有效。
* **Conpartmental Data** 房室数据保存选项
* **Receptor Data Receptor**数据保存选项
设置完毕后,单击【Start】运行网络,文件将在运行结束后保存在云端。可以通过【Result】按钮,打开运行记录窗口,在窗口的【Action】一栏中有下载按钮的即为已经保存了运行结果的记录。单击下载按钮即可下载。
![](/Uploads/Help/nnb/27.png?h=400#border#pic_center)
打开下载窗口后可以根据需要下载需要的运行结果数据。
### 3.6突触的建立
首先,按照3.2小节的方法构建一个感知层A1L1和一个非感知层A2L1(在此示例中,选择了WXJ_2016_1C_Ca神经元模型),每层均包含15个神经元,如下图:
![](/Uploads/Help/nnb/39.png#border#pic_center)
我们把感知层作为presynaptic layer(在NNB中,感知层不能作为postsynaptic layer),非感知层作为postsynaptic layer。
在左侧结构窗口中,选中【Soma】,在左侧工具栏中点击添加连接按钮 ,在弹出的**Select Pre-Layer**窗口,选中A1、L1和Simple PSP,其余参数采用默认值,后续会对这部分参数进行说明,点击【Create】按钮。
![](/Uploads/Help/nnb/29.png?h=450#border#pic_center)
系统返回主界面,我们可以看到A1L1和A2L1之间出现了一条线,其中黄色的一端代表突触前,红色的一端代表突触后,如下图:
![](/Uploads/Help/nnb/42.png#border#pic_center)
下面,我们可以查看和修改连接的属性,在左侧结构窗口,选中A2-> L1 -> WXJ_2016_1C_Ca -> Soma -> Synaptic Inputs -> A1L1 -> Projection,可以看到右侧projection属性窗口,如下图。
![](/Uploads/Help/nnb/43.png#border#pic_center)
Projection相关参数意义及取值范围如下:
+ **MaxNum**:每个preneuron最多能投射到多少postneuron上
+ **Projection**:每个preneuron在接收层上的投射范围,以preneuron在接收层的对应位置为中心,画一个形状,落在形状内部的神经元就是该神经元的所有postneuron。目前支持3种投射方式:
+ **矩形** R;-1;1;1;-1,R代表矩形,坐标采用计算机图形学的定义方式,第一个-1和第三个1定义了矩形的左下角坐标,第二个1和第四个-1定义了矩形了右上角坐标
+ **椭圆** E;0;0;6;3;45,E代表椭圆,0和0定义了椭圆的重心,6和3定义了椭圆的长轴和短轴,45定义了椭圆的旋转角度
+ **圆形** C;0;0;10,C代表圆形,0和0定义了圆心的坐标,10定义了圆的半径。
+ **ConnectRate**:投射密度,定义了每个preneuron的投射范围后,对于这一范围内百分之多少的postneuron建立连接,取值范围为0到1,对应全不连接到全部连接。
+ **Distribution**:投射的分布,支持均匀分布(U,U代表Uniform Distribution)和高斯分布(N; 1.5, N代表Normal Distribution,1.5代表标准差)。
+ **RandomNess**:投射强度的随机性,取值范围为0到1。
+ **RandomSeed**:ConnectRate和RandomNess的随机种子,用于确保每次投射的是同一批神经元,权重也一致。
如何查看神经元之间的投射关系呢?鼠标presynaptic layer中的某个神经元,就可以看到这个神经元投射到了哪些postneuron上,参考[2.相关概念介绍](#2-相关概念介绍) 。我们先选中A1L1的第1个神经元,可以看到该神经元变成亮蓝色,此时,A2L1的前4个神经元也变成了亮蓝色,这表示我们选中的突触前神经元投射到了4个突触后神经元上,这是由属性窗口中的参数Distribution决定的,高斯分布的Distribution中间权重大,两边权重小,而均匀分布则所有神经元有一样的连接权重。可以参考下图:
![](/Uploads/Help/nnb/44.png#border#pic_center)
再选中A1L1的第2个神经元,发现投射的神经元为4个。再选中A1L1的第5个神经元,发现投射的神经元为6个,因为我们定义的投射范围是R;-30;30;30;-30,是一个边长为60的矩形,而L2层的尺寸是150×10,包含一排15个神经元,60/150*15=6,就是每个神经元的postneuron的个数,而落在两侧的神经元(第一个和最后一个)由于区域限制,只能投射到3个或4个神经元。
现在把Projection改成R;-50;50;-30;30,可以看到每个preneuron的投射范围也随之发生了变化(如下图)。
![](/Uploads/Help/nnb/45.png#border#pic_center)
下面,我们给preneuron一些刺激,并观察postneuron的反应。由于preneuron是sensory neuron,所以我们参照2.4.1小节的内容以ENV-demo.env作为环境刺激。投射参数设置如下:
![](/Uploads/Help/nnb/46.png#border#pic_center) ![](/Uploads/Help/nnb/47.png#border#pic_center) ![](/Uploads/Help/nnb/48.png#border#pic_center)
选择A1L1的第一个神经元和A2L1的前两个神经元作为观察对象,运行网络,可以在spike train window看到神经元的电活动(黄色)、钙浓度(蓝色)变化、突触连接电导(绿色)的变化和神经递质的释放(灰色)等(图 3 9)。
![](/Uploads/Help/nnb/49.png#border#pic_center)
下面,我们再建立一个新的层A3L1,A3L1包含15个神经元(在此示例中,选择了WXJ_2016_1C_Ca神经元模型),并建立A1L1和A3L1之间的连接(如下图)。
![](/Uploads/Help/nnb/50.png#border#pic_center)
我们对突触后神经元受体同时选择Simple PSP和NMDA plastic,点击确定,系统返回主界面,可以看到A1L1和A3L1之间也建立了连接,且有NMDA受体的突触上面会有一个绿色的正方形(菱形),如下图所示。
![](/Uploads/Help/nnb/51.png#border#pic_center)
在左侧的属性框可以看到NMDA即Recepter1的相关参数,在此示例中参数设置下图所示。
![](/Uploads/Help/nnb/52.png#border#pic_center)
Receptor1相关参数意义及取值范围如下:
+ **ERevCa** :Ca的反转电位,用于计算由NMDA进来的Ca电流,一般在120-140之间;
+ **GmaxCaPct**:由NMDA进来的离子中Ca离子所占的比例,取值为0-1;
+ **VD.Alpha**,**VD.Beta**,**VD.Gama**:VD表示Voltage Dependency,描述Mg离子对NMDA通透性的相关参数,我们知道NMDA在电压较低时有Mg离子堵在门口,一旦电压起来了,Mg就会被踢开,如果此时有神经递质,那么NMDA通道就会打开,描述电压与NMDA通透性关系的函数类似于sigmoid,其方程为$f_{Mg}(V)=1 over {alpha + exp(beta V+gamma)}$,VD.Alpha,VD.Beta和VD.Gama就对应方程中的三个参数;
STC相关参数的意义及取值范围参见4.2.1小节。
在过滤掉一些曲线之后,我们可以较为清晰的看到有关NMDA的信号变化如下图:
![](/Uploads/Help/nnb/54.png#border#pic_center)
NNB还支持层内的recurrent连接,我们选择A3L1最为A3L1的prelayer,即可建立A3L1的recurrent连接,那么神经元上就会出现六边形,如果为NMDA连接则是绿色的正方形,如下图。
![](/Uploads/Help/nnb/55.png#border#pic_center)
### 3.7突触的阻断
在NNB中,突触是可以被阻断(block)的,我们尝试block突触A1L1对A2L1的连接,选中A2 -> L1 -> [NeuronName] -> Soma -> ConnectionInfo -> A1L1,点击【阻断】 按钮,可以看见A1L1对A2L1的连接线上的形状变成了黑色的三角形,表示这个突触在模拟过程中不起作用了,如下图:
![](/Uploads/Help/nnb/toolbar-block.png#border#pic_center)
![](/Uploads/Help/nnb/57.png#border#pic_center)
从神经活动窗口可以看到,A2L1由于失去了A1L1的输入,其神经活动也随之消失了(如下图)。再选中该突触,点击【阻断】按钮,就可以解除对该突触的block。
![](/Uploads/Help/nnb/58.png#border#pic_center)
### 3.8突触的删除
NNB还支持突触的删除。我们尝试删除A1L1对A3L1连接,选中NeuNet -> A3 -> L1 -> [NeuronName] -> Soma -> Synptic Inputs -> A1L1,点击【删除】按钮,就可以看到A1L1与A3L1之间的连接被删除了(如下图)。
![](/Uploads/Help/nnb/toolbar-del.png#border#pic_center)
![](/Uploads/Help/nnb/60.png#border#pic_center)
## 4.可塑性模型的构建
### 4.1可塑性的基本知识
#### 4.1.1什么是可塑性
我们知道,神经元之间的信息交流是以其间的突触连接为桥梁进行的。桥有宽有窄,宽的桥允许车辆更容易地通过,类似地,突触也有连接强度,来衡量其传递信息的能力。一般来说,突触后神经元更容易通过连接强度高的突触被激活。可塑性就是指突触的连接强度随脑的活动不断变化的过程,就像根据不同时段车流量变化而改变车道宽度的潮汐车道,突触也会根据神经元的活动强弱改变连接强度。
#### 4.1.2 NNBC支持的可塑性模型有哪些?
为了在仿真中实现可塑性,近几十年来,许多关于可塑性的数学模型被创建。许多添加了可塑性模型的模拟神经网络能够进行与真实实验观测非常相似的活动。目前NNB支持使用STC模型进行可塑性的仿真。
#### 4.1.3 STC模型介绍
STC(synaptic tagging and capture)模型可塑性规则是由Tag与PRP(plasticity related products)的共同作用引发的,Tag和PRP都与钙离子浓度高度相关,具有生理上的可解释性。简单来说,NMDA受体在激活时将钙离子由神经元外运送到spine(树突棘)中,当突触后神经元的spine钙离子浓度足够高时,spine就会根据钙离子浓度调整Tag的类型,表示该spine所在的突触处于可以被增强或是抑制的状态。但是,Tag自身并不能引发可塑性的产生,必须有PRP的作用才能实现LTD(long-term depression)或LTP(long-term potentiation)。PRP是由soma或dendrite生成的一系列与可塑性有关的物质的统称,这些PRP的生成同样需要较高的钙离子浓度,增加的钙离子主要来源于房室上的离子通道。PRP生成后扩散到维持着Tag的spine并被其capture,并通过进一步的加工使包含该spine的突触的突触强度产生变化。
#### 4.1.4 STC模型的数学表达及解释
关于Tag的计算:
“`katex
{d(Tag) over dt} = vert Flag vert cdot beta_T cdot (Flag-Tag)+(vert Flag vert -1) ag{1}
“`
其中:
“`katex
Flag=
begin{cases}
0 & [{Ca}^{2+}]_S Ca1_S
end{cases}
ag{2}
“`
其中$$[{Ca}^{2+}]_S$$ 是spine的钙离子浓度:当其小于$Ca0_S$时,Tag以速率$alpha_T$向0衰减;当其处于$$Ca0_S$$和 $$Ca1_S$$之间时,Tag以速率$$beta_T$$接近-1;当其大于$$Ca1_S$$时,Tag以速率$$beta_T$$接近1.
关于PRP的计算:
“`katex
PRP=int_0^tPRP_{rate}dt ag{3}
“`
其中:
“`katex
{d(PRP_{rate})over{dt}}=-{PRP_{rate}over{ au_p}} + alpha_p(1-PRP_{rate})-{1over4}({1over au_p} +alpha_p)^2 int_0^tPRP_{rate}dt ag{4}
“`
“`katex
alpha_p=
begin{cases}
0 & [{Ca}^{2+}]_d t1;**STC.End_Time**是STC的关闭时间,如t2; t4,这里t2和t4均为非负,且t1
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/94051.html