【CARLsim和脉冲神经网络】CARLsim4的工作模式
CARLsim4:http://uci-carl.github.io/CARLsim4/index.html
CARLsim4代码:https://github.com/UCI-CARL/CARLsim4
前言
CARLsim4是一个高效、易用的、基于GPU加速的大规模脉冲神经网络仿真系统。由“[Cognitive Anteater Robotics Laboratory]
这一节会很无聊,主要介绍了CARLsim工作流程(三个状态以及之间的转换),接下来的几节接下来会结合代码分析理解脉冲神经网络的很多核心概念。
(http://www.socsci.uci.edu/~jkrichma/CARLsim/ “Cognitive Anteater Robotics Laboratory”)”开源,C++编写,支持windows和linux平台。
即将入坑SNN,新开一个关于CARLsim的主题,主要的内容都是基于CARLsim4文档的学习总结,以及翻译搬运。
CARLsim4的工作流程
1 工作流(Workflow)概述
一个CARLsim程序一般有三个不同但又连续的状态:配置(configuration)状态、设置(set)状态、运行(run)状态。所有的函数都根据以上状态组织,状态间的转换由特殊的函数实现,比如CARLsim::setupNetwork
和CARLsim::runNetwork
。
下图为可能出现的状态转换。
首先需要实例化CARLsim对象
#include <carlsim.h>
CARLsim sim("example", GPU_MODE, USER);
以上代码段,第三个参数是log的类型。USER
是默认的日志形式,在控制台打印报错和信息,并保存debug内容到一个文本;SHOWTIME
只打印报错;SILENT
不输出任何信息;CUSTOM定制输出各种信息到不同的文件。
值得注意的是,CPU_MODE
适合小型网络,GPU_MODEL
适合大型网络(大于10000个神经元,GPU的效率将会是CPU的20倍),当然CPU模式可以运行占用超大内存的网络。
可以使用CUDA工具,设置GPU的编号,比如说项要使用第三块GPU,随机种子设置为42,可以用如下代码:
CARLsim sim("example", GPU_MODE, USER, 2, 42);
现在,CARLsim正式进入CONFIG
状态。
2 CONFIG状态
和PyNN等其他仿真环境一样,CARLsim使用神经元组(groups of neurons)和连接(connections)实现突触的连接。
CARLsim::createSpikeGeneratorGroup
或CARLsim::createGroup
可以用来创建神经元组,神经元组可以是一维的也可以是三维的。
CARLsim::connect
可以用来指定由神经元之间的相对位置确定的连接。
突触可塑性机制(synaptic plasticity mechanisms)可以由用户自己指定,包括STP(Short-Term Plasticity)的标准方程,各种形式的最近邻STDP(Timing Dependent Plasticity),以及Homestasis。
3 SETUP状态
CARLsim::setupNetwork
函数可以根据CPU或GPU优化网络,并使仿真进入SETUP状态。
在这个阶段可以用一些监视器来监视变量(脉冲,权重,状态变量),存入二进制文件,做离线分析。也可以在运行时查看RUN状态的信息。
比如脉冲监视器可以记录不同神经元组的输出到spike文件(二进制)或者存入SpikeMonitor
对象。前者用于离线分析;后者用于在线计算不同峰值的度量和统计,比如mean firing rate(计算在一段时间内脉冲数的平均值)和标准差(standard deviation)。
4 RUN状态
第一次使用CARLsim::runNetwork
函数,程序会进入RUN状态,程序能被重复使用或步进(sec*1000+msec)秒:
sim.runNetwork(sec, msec);
输入可以是电流,也可以是脉冲。
提供了plug-in代码从animated visual stimuli(如sinusoidal gratings, plaids, and random dot fiels,使用matlab工具包)中创建泊松脉冲训练(Poisson spike trains)。
一但网络进入CONFIG或RUN状态,网络状态就可以保存在文件中,用以以后恢复网络。网络状态由所有的突触连接、权值、延迟、连接是否可塑组成。可以在突触学习后将网络保存,用来外部分析突出模式。
CARLSIM提供了参数优化接口,使用进化算法来优化通用的适应度函数。
如前所述,网络一旦运行,其活动和结构就可以使用MATLAB编写的离线分析工具箱(OAT)进行可视化。此外,OAT还提供了以编程方式访问保存的数据的方法,并将生成的绘图序列存储为AVI文件。