【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文件。