part 4: topologically structured networks

incorporating structure in networks of point neurons

如果我们使用神经元的生物学详细模型,那么很容易理解和实现拓扑的概念,因为我们已经有树突状乔木,轴突等,它们是神经系统内连接的物理先决条件。 但是,我们仍然可以通过使用点神经元网络来获得一定程度的特异性。

无论是在拓扑结构还是日常意义上,结构都可以被看作是一组规则,用于规定对象的位置以及它们之间的关系。 在点神经元的网络中,我们可以区分三种类型的特异性:

  • 细胞类型特异性 - 那里有什么种类的细胞?
  • 位置特异性 - 细胞在哪里?
  • 投影特异性 - 他们投射哪些细胞,以及如何?
  • 在之前的讲义中,我们看到我们可以使用Connect()在网络之间创建确定性或随机选择的连接。 如果我们想创建融合了空间位置和空间连通性配置文件的网络模型,现在是时候转向拓扑模块。 注意:有关拓扑模块使用的完整文档在NEST拓扑用户手册(NTUM)[1]中提供,后者在以下页面中被引用为完整源代码。

    the nest.topology module

    nest.topology模块允许我们创建具有给定空间组织的节点群体,指定神经元如何连接的连接配置文件,并提供高级连接例程。 因此,我们可以通过设计连接配置文件来创建结构化网络,从而为细胞类型,位置和投影提供所需的特异性。

    结构化网络的生成分三步进行,每个步骤将在后面的章节中进行更详细的介绍:

  • 定义图层,在其中我们在网络的一层中分配神经元的布局和类型。

  • 定义连接配置文件,我们在那里生成我们希望我们的连接具有的配置文件。 每个连接字典指定一个连接类的属性,并包含允许我们调整配置文件的参数。 这些与选择目标(掩码和内核)的依赖位置的可能性以及单元类型特异性有关,即层中的哪些类型的单元可以参与连接类(源和目标)。

  • 连接图层,我们在图层之间应用连接字典,等同于群体特异性。 请注意,可以在两个图层之间应用多个字典,就像一个图层可以连接到它自己一样。

  • 辅助,其中我们通过nest.PrintNetwork()或包含在拓扑模块中的可视化功能可视化上述步骤的结果,并查询连接以供进一步分析。

  • defining layers

    用于定义图层的代码遵循以下模板:

    1. import nest.topology as topp
    2. my_layer_dict = {...} # see below for options
    3. my_layer = topp.CreateLayer(my_layer_dict)

    其中my_layer_dict将定义图层的元素及其位置。i

    填充图层的节点的选择是使用元素键指定的。 目前,我们只关心创建简单图层,其中每个元素来自同质群体。 然后,该字典条目的对应值应该是神经元的模型类型,它可以是NEST集合中的现有模型,或者是我们之前使用CopyModel()定义的模型。

    我们接下来必须决定节点是否应该以基于网格或自由(离网)的方式放置,这相当于要求“我们的网络元素能否定期和均匀地放置在2D网络中,或者 我们需要告诉他们他们应该在哪里?“。

    1 - On-grid

    我们必须明确指定网格的大小和间距,数量或行数m和列数n以及范围(图层大小)。 由此确定网格间距,并且n×m个元素对称排列。 请注意,我们也可以为网格指定一个中心,否则默认偏移量就是原点。

    以下片段产生图A:

    1. layer_dict_ex = {"extent" : [2.,2.], # the size of the layer in mm
    2. "rows" : 10, # the number of rows in this layer ...
    3. "columns" : 10, # ... and the number of columns
    4. "elements" : "iaf_psc_alpha"} # the element at each (x,y) coordinate in the grid

    2 - Off grid

    我们只定义元素,它们的位置和范围。 创建的元素的数量等于位置列表的长度。 这个选项允许我们分配神经元的方式有更多的灵活性。 请注意,我们还应该指定范围,如果这些头寸超出了默认值(范围大小= [1,1]和原点为中心)。 有关更多详细信息,请参见NUTM中的第2.2节。

    以下片段产生图B:

    1. import numpy as np
    2. # grid with jitter
    3. jit = 0.03
    4. xs = np.arange(-0.5,.501,0.1)
    5. poss = [[x,y] for y in xs for x in xs]
    6. poss = [[p[0]+np.random.uniform(-jit,jit),p[1]+np.random.uniform(-jit,jit)] for p in poss]
    7. layer_dict_ex = {"positions": poss,
    8. "extent" : [1.1,1.1],
    9. "elements" : "iaf_psc_alpha"}

    注意:拓扑模块确实支持3D图层,但这不在本讲义范围内。

    以下是可以使用的所有参数以及它们主要用于基于网格还是空闲层的概述:

    Advanced

    复合图层也可以创建。 此图层类型扩展了基于网格的图层,并允许我们在每个网格位置定义大量神经元和其他元素,例如poisson_generators。 NTUM的第2.5节提供了完整的解释。 这种方法的优点是,如果我们想要一个图层,其中每个元素或子网络具有相同的组件组成,那么定义一个具有这些属性的图层非常容易。 举一个简单的例子,我们考虑一个元素的网格,其中每个元素包含4个锥体细胞,1个中间神经元,1个泊松生成器和1个噪声发生器。 相应的代码是:

    1. nest.CopyModel("iaf_psc_alpha","pyr")
    2. nest.CopyModel("iaf_psc_alpha","inh", {"V_th": -52.})
    3. comp_layer = topp.CreateLayer({"rows":5,"columns":5,
    4. "elements": ["pyr",4,"inh","poisson_generator","noise_generator"]})

    defining connection profiles

    为了定义我们想要的神经元群体之间的连接类型,我们指定了一个连接字典。

    任何连接字典的唯一两个必需参数是connection_type和mask。 所有其他人都允许我们通过调整连接的可能性,突触类型,与连接相关的权重和/或延迟,或连接数量来调整我们的连接配置文件,并指定可以参与的单元类型的限制 连接类。

    NTUM的第3章全面讨论了所有不同的可能性,建议您在那里了解不同的约束条件,并阅读其中列出的不同示例。 以下是设置连接配置文件的一些代表性示例,下表列出了可以使用的参数。

    1. # Circular mask, gaussian kernel.
    2. conn1 = { "connection_type":"divergent",
    3. "mask": {"circular":{"radius":0.75}},
    4. "kernel": {"gaussian":{"p_center":1.,"sigma":0.2}},
    5. "allow_autapses":False
    6. }
    7. # Rectangular mask, constant kernel, non-centered anchor
    8. conn2 = { "connection_type":"divergent",
    9. "mask": {"rectangular":{"lower_left":[-0.5,-0.5],"upper_right":[0.5,0.5]},
    10. "anchor": [0.5,0.5],
    11. },
    12. "kernel": 0.75,
    13. "allow_autapses":False
    14. }
    15. # Donut mask, linear kernel that decreases with distance
    16. # Commented out line would allow connection to target the pyr neurons (useful for composite layers)
    17. conn3 = { "connection_type": "divergent",
    18. "mask": {"doughnut":{"inner_radius":0.1,"outer_radius":0.95}},
    19. "kernel": {"linear": {"c":1.,"a":-0.8}},
    20. #"targets":"pyr"
    21. }
    22. # Rectangular mask, fixed number of connections, gaussian weights, linear delays
    23. conn4 = { "connection_type":"divergent",
    24. "mask": {"rectangular":{"lower_left":[-0.5,-0.5],"upper_right":[0.5,0.5]}},
    25. "number_of_connections": 40,
    26. "weights": {"gaussian":{"p_center":J,"sigma":0.25}},
    27. "delays" : {"linear" :{"c":0.1,"a":0.2}},
    28. "allow_autapses":False
    29. }

    connecting layers

    连接图层是最简单的步骤:定义了源图层,目标图层和连接字典,我们只需使用函数topp.ConnectLayers():

    1. ex_layer = topp.CreateLayer({"rows":5,"columns":5,"elements":"iaf_psc_alpha"})
    2. in_layer = topp.CreateLayer({"rows":4,"columns":4,"elements":"iaf_psc_alpha"})
    3. conn_dict_ex = {"connection_type":"divergent","mask":{"circular":{"radius":0.5}}}
    4. # And now we connect E->I
    5. topp.ConnectLayers(ex_layer,in_layer,conn_dict_ex)

    请注意,我们可以定义多个字典,多次使用相同的字典并连接到同一个图层:

    1. # Extending the code from above ... we add a conndict for inhibitory neurons
    2. conn_dict_in = {"connection_type":"divergent",
    3. "mask":{"circular":{"radius":0.75}},"weights":-4.}
    4. # And finish connecting the rest of the layers:
    5. topp.ConnectLayers(ex_layer,ex_layer,conn_dict_ex) # Connect E->E
    6. topp.ConnectLayers(in_layer,in_layer,conn_dict_in) # Connect I->I
    7. topp.ConnectLayers(in_layer,ex_layer,conn_dict_in) # Connect I->E

    visualising and querying the network structure

    有两种主要方法可用于检查我们的网络是否正确构建:


  • nest.PrintNetwork(depth=1)

    以文本形式打印网络中的所有神经元和子网。 这是检查复合图层层次结构的好方法;

  • create plots using functions in nest.topology

    有三种功能可以结合使用:

    这使我们能够生成与NUTM和本讲义一起使用的情节。 有关更多详细信息,请参阅NTUM的4.2节。

  • 除了已经在NTUM 4.1节中列出的功能之外,其他有用的功能可能有所帮助:

    PyNest——part 4: topologically structured networks的更多相关文章

    1. Pixel Recurrent Neural Networks翻译

      Pixel Recurrent Neural Networks 目前主要在用的文档存放: https://www.yuque.com/lart/papers/prnn github存档: https: ...

    2. [转]GAN论文集

      really-awesome-gan A list of papers and other resources on General Adversarial (Neural) Networks. Th ...

    3. ArcEngine开发各种几何错误代码

      E_GEOMETRY_AMBIGUOUSPARTTYPE - Static variable in interface com.esri.arcgis.geometry.esriGeometryErr ...

    4. Text Classification

      Text Classification For purpose of word embedding extrinsic evaluation, especially downstream task. ...

    5. STA之RC网

      STA的主要工作是计算电路网络的延时,如今的电路网络还是由CMOS cell和net组成的,所以STA所要计算的延时仍是电容的充放电时间.等量子计算机普及的时候,如今的这一套理论都将随着科技的进步被丢 ...

    6. PyNest——part 3: connecting networks with synapses

      part 3: connecting networks with synapses parameterising synapse models NEST提供了各种不同的突触模型. 您可以使用命令nes ...

    7. PyNest——Part1:neurons and simple neural networks

      neurons and simple neural networks pynest – nest模拟器的界面 神经模拟工具(NEST:www.nest-initiative.org)专为仿真点神经元的 ...

    8. Temporal Action Detection with Structured Segment Networks (ssn)【转】

      Action Recognition: 行为识别,视频分类,数据集为剪辑过的动作视频 Temporal Action Detection: 从未剪辑的视频,定位动作发生的区间,起始帧和终止帧并预测类别 ...

    9. [转]Neural Networks, Manifolds, and Topology

      colah's blog Blog About Contact Neural Networks, Manifolds, and Topology Posted on April 6, 2014 top ...

    随机推荐

    1. CodeForces 584D Dima and Lisa

      1e9 以内的判断一个数是否是素数,可以直接朴素的暴力.   这倒题除了考虑1e9以内的素数的判断,还有一个歌德巴赫猜想:任意一个奇数都可一分解为三个素数的和. 第三个结论:素数是密集的,1e9以内, ...

    2. 机器学习算法( 二、K - 近邻算法)

      一.概述 k-近邻算法采用测量不同特征值之间的距离方法进行分类. 工作原理:首先有一个样本数据集合(训练样本集),并且样本数据集合中每条数据都存在标签(分类),即我们知道样本数据中每一条数据与所属分类 ...

    3. pipe_wait问题_转

      转自:调用Process.waitfor导致的进程挂起 最近遇到pipe_wait问题,父进程调用子进程时,子进程阻塞,cat /proc/$child/wchan输出pipe_wait,进程阻塞在p ...

    4. 路由器port触发与转发---Port Forwarding & Port Triggering

      What is Port Triggering? If you have not read my explanation of port forwarding do so now. You can f ...

    5. CI和CD的意思

      openstack中CI和CD的意思: 持续集成(CI)和持续交付(CD)

    6. java字符编码(转)

      转载:http://blog.csdn.net/peach99999/article/details/7231247 深入讨论java乱码问题 几种常见的编码格式 为什么要编码 不知道大家有没有想过一 ...

    7. ConfigurationSection类使用心得

      ConfigurationSection类主要是方便我们用于扩展自定义webcongfig中的节点信息.我们可以方便的通过以下方式获取[自定义节点对象] [你自定义的对象] config = ([你自 ...

    8. ReSharper 配置及用法(ZHUANG)

      1:安装后,Resharper会用他自己的英文智能提示,替换掉 vs2010的智能提示,所以我们要换回到vs2010的智能提示 2:快捷键.是使用vs2010的快捷键还是使用 Resharper的快捷 ...

    9. Material design之Views and Shadows

      Views and Shadows: elevation是构成控件阴影的基本属性.通过设置较高的Z值可以接受更大的阴影,阴影只能投射到Z=0的平面上. View Elevation 控件的Z值,是由两 ...

    10. Mac 终端命令行颜色高亮显示

      一.颜色高亮显示 针对terminal采用bash模式: 编辑 ~/.bash_profile, 加入以下代码: export CLICOLOR=1 export LSCOLORS=gxfxaxdxc ...