CN112966433B - 一种基于即时编译的神经动力学仿真方法及装置 - Google Patents
一种基于即时编译的神经动力学仿真方法及装置 Download PDFInfo
- Publication number
- CN112966433B CN112966433B CN202110180686.7A CN202110180686A CN112966433B CN 112966433 B CN112966433 B CN 112966433B CN 202110180686 A CN202110180686 A CN 202110180686A CN 112966433 B CN112966433 B CN 112966433B
- Authority
- CN
- China
- Prior art keywords
- function
- neuron
- model
- synapse
- neurodynamic
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/20—Design optimisation, verification or simulation
- G06F30/27—Design optimisation, verification or simulation using machine learning, e.g. artificial intelligence, neural networks, support vector machines [SVM] or training a model
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/11—Complex mathematical operations for solving equations, e.g. nonlinear equations, general mathematical optimization problems
- G06F17/13—Differential equations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/061—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using biological neurons, e.g. biological neurons connected to an integrated circuit
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Evolutionary Computation (AREA)
- Computational Mathematics (AREA)
- Biophysics (AREA)
- Pure & Applied Mathematics (AREA)
- Biomedical Technology (AREA)
- Data Mining & Analysis (AREA)
- Life Sciences & Earth Sciences (AREA)
- Mathematical Optimization (AREA)
- Mathematical Analysis (AREA)
- Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Neurology (AREA)
- Artificial Intelligence (AREA)
- Computational Linguistics (AREA)
- Computing Systems (AREA)
- General Health & Medical Sciences (AREA)
- Microelectronics & Electronic Packaging (AREA)
- Operations Research (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Medical Informatics (AREA)
- Computer Hardware Design (AREA)
- Geometry (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明公开了一种基于即时编译的神经动力学仿真方法及装置。该仿真方法包括如下步骤:在高级编程语言中设置神经动力学模型所需的模型支持,并构建神经动力学模型的相关更新函数;根据神经动力学模型的相关更新函数、预设连接规则和神经元群之间突触连接的基本信息,构建神经动力学模型;使用即时编译方法对构建好的神经动力学模型进行动力学模拟,或者基于抽象语言树解析对构建好的神经动力学模型进行动力学分析,并按要求输出相应的结果。利用本发明,能够有效地满足神经动力学仿真编程中用户的易学易用、灵活透明、模拟分析一体化和运行高效的基本需求。
Description
技术领域
本发明涉及一种基于即时编译的神经动力学仿真方法,同时也涉及相应的神经动力学仿真装置,属于计算神经科学技术领域。
背景技术
计算神经科学是一门迅猛发展的高度交叉的新学科,其目标是使用神经动力学模型对生物大脑进行建模,以便于对大脑的工作原理进行模拟和分析。同时,该门学科也为人工智能的发展提供了新的思想和模型,其起到了脑科学与类脑智能之间的桥梁作用。
当前主流的神经动力学仿真平台有NEURON、NEST、BRIAN2。NEURON和NEST提供了Python编程语言的接口,允许用户直接调用预定义的内置神经动力学模型。然而,一旦用户需要自定义神经动力学模型,就需要学习底层C++/SLI/Hoc等编程语言。因此用户的学习成本较高,并严重限制了神经动力学模型自定义的灵活性。
BRIAN2提供了一种字符串编程的方法。允许用户输入字符串来定义满足神经动力学仿真方法假设的神经元或突触模型,再据此生成C++代码。通过这种方式,用户可基于BRIAN2方便快捷地定义神经动力学模型,并获得较好的仿真速度。这种被称为“生成代码”(Code Generation)的方法目前取得了巨大的成功,但依然存在着本质的局限性。首先,字符串编程实质上是伪编程,它严重地限制了编程原有的可操作性和表现力。其次,字符串编程使得用户难以进行调试,加之,生成的代码对用户隐藏,生成代码的逻辑对用户不透明,用户不清楚神经动力学仿真方法是否生成了自己想要的代码逻辑,并且一旦发现错误后用户根本无法纠正代码。不仅如此,当前神经动力学仿真方法无法提供任何动力学分析的工具,用户进行动力学分析往往陷入尴尬的境地。
发明内容
本发明所要解决的首要技术问题在于提供一种基于即时编译的神经动力学仿真方法。
本发明所要解决的另一技术问题在于提供一种基于即时编译的神经动力学仿真装置。
为了实现上述目的,本发明采用下述技术方案:
根据本发明实施例的第一方面,提供一种基于即时编译的神经动力学仿真方法,包括如下步骤:
步骤S1、在高级编程语言中设置神经动力学模型所需的模型支持,并构建所述神经动力学模型的相关更新函数;
步骤S2、根据所述神经动力学模型的相关更新函数、预设连接规则和神经元群之间突触连接的基本信息,构建所述神经动力学模型;
步骤S3、使用即时编译方法对构建好的神经动力学模型进行动力学模拟,或者基于抽象语言树解析对构建好的神经动力学模型进行动力学分析,并按要求输出相应的结果。
其中较优地,所述相关更新函数是指构建所述神经动力学模型中每个神经元和突触的更新函数;
对于微分方程为常微分方程时,构建每个神经元或突触的更新函数时,计算每个神经元或突触的各个微分方程分别从上一时刻~下一时刻的神经元或突触的状态变量的函数值,并分别调用每个微分方程得到的神经元或突触的状态变量的函数进行积分操作后,整合成一个积分函数,作为每个神经元或突触的更新函数;
对于所述微分方程为随机微分方程时,构建每个神经元或突触的更新函数时,计算每个神经元或突触的各个微分方程分别从上一时刻~下一时刻的神经元或突触的状态变量的函数值与随机函数值,并分别调用每个微分方程得到的神经元的状态变量的函数与随机函数进行积分操作后,整合成一个积分函数,作为每个神经元或突触的更新函数。
其中较优地,当所述微分方程为常微分方程时,对任意一个所述微分方程进行积分操作的实现方式为:
定义神经元或突触的状态变量以及状态变量函数相关的其他一些参数或变量;
计算t时刻神经元或突触的状态变量的函数值;
将t时刻~t+1时刻的神经元或突触的状态变量的函数值叠加后,调用该微分方程得到的神经元或突触的状态变量的函数进行积分操作。
其中较优地,当所述微分方程为随机微分方程时,对任意一个所述微分方程进行积分操作的实现方式为:
定义神经元或突触的状态变量以及状态变量函数相关的其他一些参数或变量;
计算t时刻神经元或突触的状态变量的函数值与随机函数值;
将t时刻~t+1时刻的神经元或突触的状态变量的函数值叠加后,调用所述微分方程得到的神经元或突触的状态变量的函数进行积分操作,同时将t时刻~t+1时刻的神经元或突触的状态变量的随机函数值叠加后,调用所述微分方程得到的神经元或突触的状态变量的随机函数进行积分操作。
其中较优地,构建所述神经动力学模型包括如下步骤:
步骤S22、分别设置神经元模型、突触模型和神经元群的基本信息;
步骤S23、根据预设连接规则和神经元群之间突触连接的基本信息,构建神经动力学模型。
其中较优地,设置所述神经元模型或所述突触模型的基本信息包括名称、用户所需的所述神经元模型或所述突触模型的参数、每个神经元或突触从t时刻~t+1时刻的更新函数;
设置所述神经元群的基本信息包括所述神经元群可指定神经元模型、所述神经元群中神经元的几何结构、需要监控历史轨迹的变量、满足神经元模型需求的实例化数据;
所述预设连接规则为所述神经元群之间的连接规则,包括一对一、全连接、随机连接、高斯概率连接、最近邻连接等拓扑连接结构,并支持用户网络连接的定制化。
其中较优地,使用即时编译方法对构建好的神经动力学模型进行动力学模拟,包括如下步骤:
步骤S31、在对构建好的神经动力学模型进行动力学模拟仿真时,将高级编程语言运行时生成的字节码转换为LLVM中间表示
步骤S32、使用LLVM/NVVM即时编译引擎编译生成目标平台兼容的机器码,并保存于缓存中;
步骤S33、运行所述神经动力学模型时,从缓存中调用并执行编译后的机器码。
其中较优地,所述神经动力学模型的动力学分析,包括如下步骤:
步骤S34、对待分析神经动力学模型使用抽象语言树解析代码定义的函数dx=f(x),并将其转换为计算机代数系统支持的函数f(x),其中,x表示用户所需创建的神经动力学模型中神经元或突触的状态变量,f(x)表示用户所需创建的神经动力学模型中神经元或突触的状态变量的函数值;
其中较优地,所述神经动力学模型的动力学分析,包括如下步骤:
步骤S37、对待分析神经动力学模型使用抽象语言树解析代码定义的函数dx=f(x)和dy=g(y),并将其转换为计算机代数系统支持的函数f(x)和g(y),其中,x、y分别表示用户所需创建的神经动力学模型中神经元或突触的两个状态变量,f(x)和g(y)分别表示用户所需创建的神经动力学模型中神经元或突触的两个状态变量的函数值;
步骤S38、使用计算机代数系统解出函数f(x,y)=0中变量y对变量x的依赖关系x=f1(y),若成功,带入到函数g(x,y)=0中,使用迭代优化的方法确定出函数g(f1(y),y)=0的一个不动点的值得到另一个不动点的值后执行步骤41;若不成功,解出函数f(x,y)=0中变量x对变量y的依赖关系y=f2(x),若成功,带入到g(x,y)=0中,使用迭代优化的方法确定出函数g(x,f2(x))=0的一个不动点的值得到另一个不动点的值后执行步骤41,若不成功执行步骤S39;
步骤S39、使用计算机代数系统解出函数g(x,y)=0中变量y对变量x的依赖关系x=g1(y),若成功,带入到函数f(x,y)=0中,使用迭代优化的方法确定出函数f(g1(y),y)=0的一个不动点的值得到另一个不动点的值后执行步骤41;若不成功,解出函数g(x,y)=0中变量x对变量y的依赖关系y=g2(x),若成功,带入到函数f(x,y)=0中,使用迭代优化的方法确定出函数f(x,g2(x))=0的一个不动点的值得到另一个不动点的值后执行步骤41,若不成功执行步骤S40;
步骤S40、构造优化函数h(x,y)=f2(x,y)+g2(x,y),使用梯度下降方法在全空间内寻找所有极小值点;遍历所有极小值点,判断每个极小值点处的优化函数值是否小于10-8;若是,则该极小值点处的优化函数值为不动点的值;
根据本发明实施例的第二方面,提供一种基于即时编译的神经动力学仿真装置,包括处理器和存储器,所述处理器读取所述存储器中的计算机程序或指令,用于执行以下操作:
在高级编程语言中设置神经动力学模型所需的模型支持,并构建所述神经动力学模型的相关更新函数;
根据所述神经动力学模型的相关更新函数、预设连接规则和神经元群之间突触连接的基本信息,构建所述神经动力学模型;
使用即时编译方法对构建好的神经动力学模型进行动力学模拟,或者基于抽象语言树解析对构建好的神经动力学模型进行动力学分析,并按要求输出相应的结果。
本发明所提供的基于即时编译的神经动力学仿真方法及装置基于“让用户的关注点聚焦在模型的设计而非编程上”的设计理念,围绕神经动力学模型提供了“模拟”和“分析”两大功能。在神经动力学模型的模拟上,本发明引入了当前流行的即时编译方法,允许用户自由定义模型逻辑,再据此生成高效的机器码;在神经动力学模型的动力学分析上,本发明为神经动力学模型提供了基于抽象语言树解析的基本动力学分析方法,用户对自定义的神经动力学模型可以快速进行相图和分岔分析。因此,本发明能有效地满足神经动力学仿真编程中用户的易学易用、灵活透明、模拟分析一体化和运行高效的基本需求。
附图说明
图1为本发明实施例提供的基于即时编译的神经动力学仿真方法的流程图;
图2为本发明实施例提供的基于即时编译的神经动力学仿真方法的详细实施例;
图3为本发明实施例提供的基于即时编译的神经动力学仿真装置的结构图。
具体实施方式
下面结合附图和具体实施例对本发明的技术内容做进一步的详细说明。
针对现有神经动力学仿真方法的不足,如图1所示,本发明实施例提供了基于即时编译的神经动力学仿真方法,包括如下步骤:
步骤S1、在高级编程语言中设置神经动力学模型所需的模型支持,并构建神经动力学模型的相关更新函数。
在本发明中,神经动力学模型包括神经元模型和突触模型,神经元模型包括点神经元子模型、群体神经元子模型和精细神经元子模型。每个神经元子模型包括多个神经元;突触模型包括多个突触。
如图2所示,在高级编程语言(例如Python、JAVA、Ruby、Rust等)中,设置神经动力学模型编程所需的模型支持包括计算算子、微分方程、数值积分方法、数据结构和延时操作。
其中,考虑到本神经动力学仿真方法基于即时编译技术,因此,计算算子需要涵盖与即时编译(Just-In-Time,JIT)引擎兼容的算术运算、三角函数、双曲函数、线性代数等常用数学操作。
计算神经科学建模通常涉及到微分方程的使用。微分方程包括常微分方程和随机微分方程。对于任意一个给定的常微分方程(Ordinary Differential Equation,ODE),
dx=f(x,t)dt (1)
上式中,x表示用户所需创建的神经动力学模型中神经元或突触的状态变量,f(x,t)表示t时刻用户所需创建的神经动力学模型中神经元或突触的状态变量的函数值。
同样,对于任意一个给定的随机微分方程(Stochastic Differential Equation,SDE),
gx=f(x,t)dt+g(x,t)dW (2)
上式中,x表示用户所需创建的神经动力学模型中神经元或突触的状态变量,f(x,t)表示t时刻用户所需创建的神经动力学模型中神经元或突触的状态变量的函数值,g(x,t)表示t时刻用户所需创建的神经动力学模型中神经元或突触的状态变量的随机函数值,W表示布朗运动。
数值积分方法用于对微分方程进行积分操作。其中,该数值积分方法包括欧拉方法、龙格-库塔方法、指数欧拉方法、Milstein方法等常用的数值积分方法。该数值积分方法还可以使用关键字为所设置的微分方程选择特定的数值积分方法。
数据结构用于管理神经动力学模型的状态。由于神经动力学模型具有相应的状态,因此需要选择对应的数据结构管理神经动力学模型相应的状态。数据结构包括用于神经元模型的神经元状态NeuState和用于突触模型的突触状态SynState的状态管理。
延时操作用于添加在需要延时处理的函数上,以自动完成延时处理。一般情况下,突触模型计算会涉及到延时操作。
由于每个神经元内可能有多个微分方程,每个突触也可能有多个微分方程,因此,构建神经动力学模型的相关更新函数是指构建神经动力学模型中每个神经元和突触的更新函数。
其中,对于微分方程为常微分方程,构建每个神经元的更新函数时,计算每个神经元的各个微分方程分别从t时刻~t+1时刻的神经元的状态变量的函数值,并分别调用每个微分方程得到的神经元的状态变量的函数进行积分操作后,整合成一个积分函数,作为每个神经元的更新函数。构建每个突触的更新函数时,计算每个突触的各个微分方程分别从t时刻~t+1时刻的突触的状态变量的函数值,并分别调用每个微分方程得到的突触的状态变量的函数进行积分操作后,整合成一个积分函数,作为每个突触的更新函数。
具体的说,当微分方程为常微分方程时,对任意一个微分方程进行积分操作的实现方式为:首先定义神经元或突触的状态变量以及状态变量函数相关的其他一些参数或变量;然后根据公式(1)计算t时刻神经元或突触的状态变量的函数值;最后将t时刻~t+1时刻的神经元或突触的状态变量的函数值叠加后,调用该微分方程得到的神经元或突触的状态变量的函数进行积分操作。具体实现如下代码:
@integrate
Def func(x,t,*other_arguments):
#...do some computation
f=…
return f
x_t_plus=func(x_t,t,*other_arguments)
对于微分方程为随机微分方程,构建每个神经元的更新函数时,计算每个神经元的各个微分方程分别从t时刻~t+1时刻的神经元的状态变量的函数值与随机函数值,并分别调用每个微分方程得到的神经元的状态变量的函数与随机函数进行积分操作后,整合成一个积分函数,作为每个神经元的更新函数。构建每个突触的更新函数时,计算每个突触的各个微分方程分别从t时刻~t+1时刻的突触的状态变量的函数值与随机函数值,并分别调用每个微分方程得到的突触的状态变量的函数与随机函数进行积分操作后,整合成一个积分函数,作为每个突触的更新函数。
具体的说,当微分方程为随机微分方程时,对任意一个微分方程进行积分操作的实现方式为:首先定义神经元或突触的状态变量以及状态变量函数相关的其他一些参数或变量;然后根据公式(1)和(2)计算t时刻神经元或突触的状态变量的函数值与随机函数值;最后将t时刻~t+1时刻的神经元或突触的状态变量的函数值叠加后,调用该微分方程得到的神经元或突触的状态变量的函数进行积分操作,同时将t时刻~t+1时刻的神经元或突触的状态变量的随机函数值叠加后,调用该微分方程得到的神经元或突触的状态变量的随机函数进行积分操作。具体实现如下代码:
@integrate
Def func(x,t,*other_arguments):
#...do some computation
f=…
g=
return f,g
x_t_plus=func(x_t,t,*other_arguments)
步骤S2、根据神经动力学模型的相关更新函数、预设连接规则和神经元群之间突触连接的基本信息,构建神经动力学模型。
构建神经动力学模型包括如下步骤:
步骤S22、分别设置神经元模型、突触模型和神经元群的基本信息。
设置神经元模型的基本信息包括名称、用户所需的神经元模型的参数、每个神经元从t时刻~t+1时刻的更新函数。如图2所示,其中,神经元模型的名称是指点神经元子模型、群体神经元子模型和精细神经元子模型。设置神经元模型的基本信息如下代码:
NeuType(name,requires,steps,mode)
设置突触模型的基本信息包括名称、用户所需的突触模型的参数、每个突触从t时刻~t+1时刻的更新函数。其中,突触模型的名称是指抑制型突触模型、兴奋型突触模型和调控型突触。设置突触模型的基本信息如下代码:
SynType(name,requires,steps,mode)
设置神经元群的基本信息包括神经元群可指定神经元模型、神经元群中神经元的几何结构、需要监控历史轨迹的变量、满足神经元模型需求的实例化数据。由于真实大脑具有很多神经元的类型,不同脑区的神经元类型可能不一样,因此不同神经元群之间使用的神经元模型不一样,需要指定神经元群中神经元的神经元模型,例如,A神经元群中神经元的神经元模型为点神经元子模型,B神经元群中神经元的神经元模型为精细神经元子模型。需要监控历史轨迹的变量是指监控神经元模型里面的某一些状态变量(如微分方程的状态变量)。此外,神经元群不仅支持索引和切片操作(根据用户需求索引某一个位置的神经元的状态变量值,切片某一个区域的神经元的状态变量值),而且还支持对神经元模型状态ST的设定和对参数pars的更新。设置神经元群的基本信息如下代码:
NeuGroup(nue_model,geometry,monitors,satisfies)
NeuGroup.ST["x"]=…
NeuGroup.pars["x"]=…
步骤S23、根据预设连接规则和神经元群之间突触连接的基本信息,构建神经动力学模型。
神经元模型的神经元散布在高维空间里面,各个神经元群按照预设连接规则和神经元群之间突触连接的基本信息进行突触连接。其中,预设连接规则为神经元群之间的连接规则,包括一对一、全连接、随机连接、高斯概率连接、最近邻连接等拓扑连接结构,并支持用户网络连接的定制化。具体的说,相连的任意两个神经元之间进行数据交互时,需要相应的突触模型计算,实现将其中一个神经元发送的脉冲转换成对应的数据(如抑制型、兴奋型和调控型数据)后传输给另一个神经元。由于突触模型包括多个突触,每个突触对应于两个相连的神经元,相连的神经元之间传递的数据不同,使得采用不同的突触模型进行计算,因此,设置神经元群之间的突触连接时,需要指定即将连接的突触前神经元群和突触后神经元群、使用的连接方式、两个相连的神经元基于哪种突触模型进行计算、满足突触模型计算需求的实例化数据、突触模型计算需要的延迟时长。如图2所示,设置好神经元模型、突触模型和神经元群的基本信息后,根据预设连接规则和神经元群之间突触连接的基本信息,构建神经动力学模型。需要强调的是,突触连接支持对突触模型状态ST的设定和对参数pars的更新。
设置神经元群之间突触连接的基本信息如下代码:
SynConn(syn_model,pre_group,post_group,conn,monitors,satisfies,delay)
SynConn.ST[“x”]=…
SynConn.pars[“x”]=…
步骤S3、使用即时编译方法对构建好的神经动力学模型进行动力学模拟,或者基于抽象语言树解析对构建好的神经动力学模型进行动力学分析,并按要求输出相应的结果。
即时编译方法是一种提高程序时间和空间有效性的方法,它在运行时将调用的函数或程序段编译成机器码载入缓存中,以此加快程序的执行。即时编译方法理论上可获得优于静态编译技术的性能。
如图2所示,本发明使用即时编译方法对构建好的神经动力学模型进行动力学模拟,以模拟真实大脑在某个时间窗口里面所有历史轨迹的演化过程,并加速神经动力学模型的运行速度。具体包括如下步骤:
步骤S31、在对构建好的神经动力学模型进行动力学模拟仿真时,将高级编程语言运行时生成的字节码转换为LLVM中间表示。
在运行神经动力学模型进行动力学模拟仿真时,需要设置模型运行时长、指定神经元群、各个神经元群仿真外界对大脑做的输入操作(如仿真生理学中膜片钳或经颅磁刺激等操作)、指定输入操作在该神经元群的具体状态变量、指定输入操作的值(如仿真生理学中膜片钳或经颅磁刺激对应的电流)和指定输入操作的类型(可以为+,-,*,/,=。默认为+)。
步骤S32、使用LLVM/NVVM即时编译引擎编译生成目标平台兼容的机器码,并保存于缓存中。
若选择在CPU平台上运行神经动力学模型,则会调用LLVM即时编译引擎编译生成CPU平台的二进制机器码;若选择在GPU平台上运行神经动力学模型,则会调用NVVM即时编译引擎编译生成GPU平台的二进制机器码。
步骤S33、运行神经动力学模型时,从缓存中调用并执行编译后的机器码。
需要强调的是,在对构建好的神经动力学模型进行动力学模拟仿真时,对神经动力学模型进行监控,实时监控神经动力学模型的编译和运行状态,发生错误时会警告用户,并输出错误类型。
如图2所示,当用户需要对真实大脑的一种或多种状态的可能性进行分析,可以基于抽象语言树解析对构建好的神经动力学模型进行动力学分析,该动力学分析可以更好的指导对神经动力学模型的模拟。动力学分析支持一维、二维神经动力学模型的动力学相图分析,以及余维一和余维二的分岔分析。其中,一维、二维神经动力学模型的动力学相图分析是指一维、二维神经动力学模型的所有参数固定不变,分析得到大脑一种或多种状态空间的所有可能性。由于大脑里面各个神经元变化多端,具有很强异质性,参数空间很大,因此可以对一维、二维神经动力学模型进行余维一和余维二的分岔分析,具体是指变化某一个参数或某两个参数,分析得到大脑一种或多种状态空间的所有可能性。
由于一维、二维神经动力学模型的动力学相图分析,以及余维一和余维二的分岔分析的区别仅仅是固定参数和变化参数的区别,因此,可以采用相同的动力学分析方法。具体的说,一维神经动力学模型的动力学相图和分岔分析,包括如下步骤:
步骤S34、对待分析神经动力学模型使用抽象语言树解析代码定义的函数dx=f(x),并将其转换为计算机代数系统支持的函数f(x),其中,x表示用户所需创建的神经动力学模型中神经元或突触的状态变量,f(x)表示用户所需创建的神经动力学模型中神经元或突触的状态变量的函数值。
对待分析一维神经动力学模型使用抽象语言树(Abstract Syntax Tree,AST)解析代码定义的函数(神经元和突触的微分方程dx=f(x),转换为计算机代数系统(诸如SymPy、Sage、Mathematics等)支持的函数f(x)。
大脑在很多不动点上做转移,所获得的不动点是指大脑某个区域未来随时间变化的所有可能性的具体表现。例如,大脑回想到某个记忆,就跳到对应的不动点。
步骤S350、在允许的取值范围内连续取值,得到其相应函数值。
在允许的取值范围(x1,xr)内连续取值x∈[x1,x1+δx,x1+2δx,...,xr],根据函数f(x)=0得到相应的函数值。其中,x1表示用户所需创建的神经动力学模型中神经元或突触的状态变量的最小值,xr表示用户所需创建的神经动力学模型中神经元或突触的状态变量的最大值,δ表示偏移精度。
遍历函数值,若函数f(x1+mδx)=0,则x1+mδx为不动点的值;否则,找到f(x1+mδx)f(x1+(m+1)δx)<0,使用Brent优化方法确定出该区间(x1+mδx,x1+(m+1)δx)内的不动点的值,m为正整数。
二维神经动力学模型的动力学相图和分岔分析,包括如下步骤:
步骤S37、对待分析神经动力学模型使用抽象语言树解析代码定义的函数dx=f(x)和dy=g(y),并将其转换为计算机代数系统支持的函数f(x)和g(y),其中,x、y分别表示用户所需创建的神经动力学模型中神经元或突触的两个状态变量,f(x)和g(y)分别表示用户所需创建的神经动力学模型中神经元或突触的两个状态变量的函数值。
步骤S38、使用计算机代数系统解出函数f(x,y)=0中变量y对变量x的依赖关系x=f1(y),若成功,带入到函数g(x,y)=0中,使用迭代优化的方法确定出函数g(f1(y),y)=0的一个不动点的值得到另一个不动点的值后执行步骤41;若不成功,解出函数f(x,y)=0中变量x对变量y的依赖关系y=f2(x),若成功,带入到g(x,y)=0中,使用迭代优化的方法确定出函数g(x,f2(x))=0的一个不动点的值得到另一个不动点的值后执行步骤41,若不成功执行步骤S39。
步骤S39、使用计算机代数系统解出函数g(x,y)=0中变量y对变量x的依赖关系x=g1(y),若成功,带入到函数f(x,y)=0中,使用迭代优化的方法确定出函数f(g1(y),y)=0的一个不动点的值得到另一个不动点的值后执行步骤41;若不成功,解出函数g(x,y)=0中变量x对变量y的依赖关系y=g2(x),若成功,带入到函数f(x,y)=0中,使用迭代优化的方法确定出函数f(x,g2(x))=0的一个不动点的值得到另一个不动点的值后执行步骤41,若不成功执行步骤S40。
步骤S40、构造优化函数h(x,y)=f2(x,y)+g2(x,y),使用梯度下降方法在全空间内寻找所有极小值点;遍历所有极小值点,判断每个极小值点处的优化函数值是否小于10-8;若是,则该极小值点处的优化函数值为不动点的值。
步骤S41、在不动点附近做微扰,得到其Jacobian矩阵,用于判断不动点的稳定性。
在不动点附近做微扰是指在不动点附近做适度偏移,得到相应的Jacobian矩阵如下:
在本发明中,如图2所示,对神经动力学模型模拟和分析的结果进行可视化展示(展示网络内部神经元群以及群之间的投射关系的可视化)或文件序列化输出。其中,结果可视化提供线图、栅格图、一维数据动画和二维数据动画的支持。文件序列化输出提供模型输出到本地文件的相应操作。用户根据实际需求,选择相应的结果输出方式即可。
此外,如图3所示,本发明实施例还提供一种基于即时编译的神经动力学仿真装置,包括处理器32和存储器31,还可以根据实际需要进一步包括通信组件、传感器组件、电源组件、多媒体组件及输入/输出接口。其中,存储器、通信组件、传感器组件、电源组件、多媒体组件及输入/输出接口均与该处理器32连接。前已述及,存储器31可以是静态随机存取存储器(SRAM)、电可擦除可编程只读存储器(EEPROM)、可擦除可编程只读存储器(EPROM)、可编程只读存储器(PROM)、只读存储器(ROM)、磁存储器、快闪存储器等;处理器32可以是中央处理器(CPU)、图形处理器(GPU)、现场可编程逻辑门阵列(FPGA)、专用集成电路(ASIC)、数字信号处理(DSP)芯片等。其它通信组件、传感器组件、电源组件、多媒体组件等均可以采用现有智能手机中的通用部件实现,在此就不具体说明了。
另外,本发明实施例提供的基于即时编译的神经动力学仿真装置,包括处理器32和存储器31,处理器32读取所述存储器31中的计算机程序或指令,用于执行以下操作:
在高级编程语言中设置神经动力学模型所需的模型支持,并构建神经动力学模型的相关更新函数。
根据神经动力学模型的相关更新函数、预设连接规则和神经元群之间突触连接的基本信息,构建神经动力学模型。
使用即时编译方法对构建好的神经动力学模型进行动力学模拟,或者基于抽象语言树解析对构建好的神经动力学模型进行动力学分析,并按要求输出相应的结果。
另外,本发明实施例还提供一种计算机可读存储介质,所述可读存储介质上存储有指令,当其在计算机上运行时,使得所述计算机执行如上述图1所述的基于即时编译的神经动力学仿真方法,此处不再赘述其具体实现方式。
另外,本发明实施例还提供一种包含指令的计算机程序产品,当其在计算机上运行时,使得所述计算机执行如上述图1所述的基于即时编译的神经动力学仿真方法,此处不再赘述其具体实现方式。
本发明所提供的基于即时编译的神经动力学仿真方法及装置基于“让用户的关注点聚焦在模型的设计而非编程上”的设计理念,围绕神经动力学模型提供了“模拟”和“分析”两大功能。在神经动力学模型的模拟上,本发明引入了当前流行的即时编译方法,允许用户自由定义模型逻辑,再据此生成高效的机器码;在神经动力学模型的动力学分析上,本发明为神经动力学模型提供了基于抽象语言树解析的基本动力学分析方法,用户对自定义的神经动力学模型可以快速进行相图和分岔分析。因此,本发明能有效地满足神经动力学仿真编程中用户的易学易用、灵活透明、模拟分析一体化和运行高效的基本需求。
以上对本发明所提供的基于即时编译的神经动力学仿真方法及装置进行了详细的说明。对本领域的一般技术人员而言,在不背离本发明实质内容的前提下对它所做的任何显而易见的改动,都将属于本发明专利权的保护范围。
Claims (8)
1.一种基于即时编译的神经动力学仿真方法,其特征在于包括如下步骤:
步骤S1、在高级编程语言中设置神经动力学模型所需的模型支持,并构建所述神经动力学模型的相关更新函数;
步骤S2、根据所述神经动力学模型的相关更新函数、预设连接规则和神经元群之间突触连接的基本信息,构建所述神经动力学模型;
步骤S3、使用即时编译方法对构建好的神经动力学模型进行动力学模拟,或者基于抽象语言树解析对构建好的神经动力学模型进行动力学分析,并按要求输出相应的结果,
其中,使用即时编译方法对构建好的神经动力学模型进行动力学模拟,包括如下步骤:包括以下子步骤:
步骤S31、在对构建好的神经动力学模型进行动力学模拟仿真时,将高级编程语言运行时生成的字节码转换为LLVM中间表示步骤S32、使用LLVM/NVVM即时编译引擎编译生成目标平台兼容的机器码,并保存于缓存中;
步骤S33、运行所述神经动力学模型时,从缓存中调用并执行编译后的机器码,
所述神经动力学模型的动力学分析,包括如下步骤:
步骤S34、对待分析神经动力学模型使用抽象语言树解析代码定义的函数dx=f(x),并将其转换为计算机代数系统支持的函数f(x),其中,x表示用户所需创建的神经动力学模型中神经元或突触的状态变量,f(x)表示用户所需创建的神经动力学模型中神经元或突触的状态变量的函数值;
2.如权利要求1所述的基于即时编译的神经动力学仿真方法,其特征在于:
所述相关更新函数是指所述神经动力学模型中,每个神经元和突触的更新函数;
对于微分方程为常微分方程时,构建每个神经元或突触的更新函数时,计算每个神经元或突触的各个微分方程分别从上一时刻~下一时刻的神经元或突触的状态变量的函数值,并分别调用每个微分方程得到的神经元或突触的状态变量的函数进行积分操作后,整合成一个积分函数,作为每个神经元或突触的更新函数;
对于所述微分方程为随机微分方程时,构建每个神经元或突触的更新函数时,计算每个神经元或突触的各个微分方程分别从上一时刻~下一时刻的神经元或突触的状态变量的函数值与随机函数值,并分别调用每个微分方程得到的神经元的状态变量的函数与随机函数进行积分操作后,整合成一个积分函数,作为每个神经元或突触的更新函数。
3.如权利要求2所述的基于即时编译的神经动力学仿真方法,其特征在于:
当所述微分方程为常微分方程时,对任意一个所述微分方程进行积分操作的实现方式为:
定义神经元或突触的状态变量以及状态变量函数相关的其他一些参数或变量;
计算t时刻神经元或突触的状态变量的函数值;
将t时刻~t+1时刻的神经元或突触的状态变量的函数值叠加后,调用该微分方程得到的神经元或突触的状态变量的函数进行积分操作。
4.如权利要求2所述的基于即时编译的神经动力学仿真方法,其特征在于:
当所述微分方程为随机微分方程时,对任意一个所述微分方程进行积分操作的实现方式为:
定义神经元或突触的状态变量以及状态变量函数相关的其他一些参数或变量;
计算t时刻神经元或突触的状态变量的函数值与随机函数值;
将t时刻~t+1时刻的神经元或突触的状态变量的函数值叠加后,调用所述微分方程得到的神经元或突触的状态变量的函数进行积分操作,同时将t时刻~t+1时刻的神经元或突触的状态变量的随机函数值叠加后,调用所述微分方程得到的神经元或突触的状态变量的随机函数进行积分操作。
5.如权利要求2所述的基于即时编译的神经动力学仿真方法,其特征在于构建所述神经动力学模型包括如下步骤:
步骤S22、分别设置神经元模型、突触模型和神经元群的基本信息;
步骤S23、根据预设连接规则和神经元群之间突触连接的基本信息,构建神经动力学模型。
6.如权利要求5所述的基于即时编译的神经动力学仿真方法,其特征在于:设置所述神经元模型或所述突触模型的基本信息包括名称、用户所需的所述神经元模型或所述突触模型的参数、每个神经元或突触从t时刻~t+1时刻的更新函数;
设置所述神经元群的基本信息包括所述神经元群可指定神经元模型、所述神经元群中神经元的几何结构、需要监控历史轨迹的变量、满足神经元模型需求的实例化数据;
所述预设连接规则为所述神经元群之间的连接规则,包括一对一、全连接、随机连接、高斯概率连接、最近邻连接拓扑连接结构,并支持用户网络连接的定制化。
7.如权利要求1所述的基于即时编译的神经动力学仿真方法,其特征在于:
所述神经动力学模型的动力学分析,包括如下步骤:
步骤S37、对待分析神经动力学模型使用抽象语言树解析代码定义的函数dx=f(x)和dy=g(y),并将其转换为计算机代数系统支持的函数f(x)和g(y),其中,x、y分别表示用户所需创建的神经动力学模型中神经元或突触的两个状态变量,f(x)和g(y)分别表示用户所需创建的神经动力学模型中神经元或突触的两个状态变量的函数值;
步骤S38、使用计算机代数系统解出函数f(x,y)=0中变量y对变量x的依赖关系x=f1(y),若成功,带入到函数目(x,y)=0中,使用迭代优化的方法确定出函数g(f1(y),y)=0的一个不动点的值得到另一个不动点的值后执行步骤41;若不成功,解出函数f(x,y)=0中变量x对变量y的依赖关系y=f2(x),若成功,带入到g(x,y)=0中,使用迭代优化的方法确定出函数g(x,f2(x))=0的一个不动点的值得到另一个不动点的值后执行步骤41,若不成功执行步骤S39;
步骤S39、使用计算机代数系统解出函数g(x,y)=0中变量y对变量x的依赖关系x=g1(y),若成功,带入到函数f(x,y)=0中,使用迭代优化的方法确定出函数f(g1(y),y)=0的一个不动点的值得到另一个不动点的值后执行步骤41;若不成功,解出函数g(x,y)=0中变量x对变量y的依赖关系y=g2(x),若成功,带入到函数f(x,y)=0中,使用迭代优化的方法确定出函数f(x,g2(x))=0的一个不动点的值得到另一个不动点的值后执行步骤41,若不成功执行步骤S40;
步骤S40、构造优化函数h(x,y)=f2(x,y)+g2(x,y),使用梯度下降方法在全空间内寻找所有极小值点;遍历所有极小值点,判断每个极小值点处的优化函数值是否小于10-8;若是,则该极小值点处的优化函数值为不动点的值;
8.一种基于即时编译的神经动力学仿真装置,其特征在于包括处理器和存储器,所述处理器读取所述存储器中的计算机程序或指令,用于执行以下操作:
在高级编程语言中设置神经动力学模型所需的模型支持,并构建所述神经动力学模型的相关更新函数;
根据所述神经动力学模型的相关更新函数、预设连接规则和神经元群之间突触连接的基本信息,构建所述神经动力学模型;
使用即时编译方法对构建好的神经动力学模型进行动力学模拟,或者基于抽象语言树解析对构建好的神经动力学模型进行动力学分析,并按要求输出相应的结果,
其中,使用即时编译方法对构建好的神经动力学模型进行动力学模拟,包括如下步骤:包括以下子步骤:
步骤S31、在对构建好的神经动力学模型进行动力学模拟仿真时,将高级编程语言运行时生成的字节码转换为LLVM中间表示步骤S32、使用LLVM/NVVM即时编译引擎编译生成目标平台兼容的机器码,并保存于缓存中;
步骤S33、运行所述神经动力学模型时,从缓存中调用并执行编译后的机器码,
所述神经动力学模型的动力学分析,包括如下步骤:
步骤S34、对待分析神经动力学模型使用抽象语言树解析代码定义的函数dx=f(x),并将其转换为计算机代数系统支持的函数f(x),其中,x表示用户所需创建的神经动力学模型中神经元或突触的状态变量,f(x)表示用户所需创建的神经动力学模型中神经元或突触的状态变量的函数值;
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110180686.7A CN112966433B (zh) | 2021-02-08 | 2021-02-08 | 一种基于即时编译的神经动力学仿真方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110180686.7A CN112966433B (zh) | 2021-02-08 | 2021-02-08 | 一种基于即时编译的神经动力学仿真方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112966433A CN112966433A (zh) | 2021-06-15 |
CN112966433B true CN112966433B (zh) | 2022-12-23 |
Family
ID=76284647
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110180686.7A Active CN112966433B (zh) | 2021-02-08 | 2021-02-08 | 一种基于即时编译的神经动力学仿真方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112966433B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113626035B (zh) * | 2021-07-23 | 2022-11-11 | 南方科技大学 | 基于tvm面向risc-v设备的神经网络编译方法 |
CN117540783B (zh) * | 2024-01-09 | 2024-05-28 | 之江实验室 | 仿真脑活动数据的生成方法、装置、电子装置和存储介质 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9477926B2 (en) * | 2012-11-20 | 2016-10-25 | Qualcomm Incorporated | Piecewise linear neuron modeling |
WO2014081671A1 (en) * | 2012-11-20 | 2014-05-30 | Qualcomm Incorporated | Dynamical event neuron and synapse models for learning spiking neural networks |
US9600762B2 (en) * | 2013-04-12 | 2017-03-21 | Qualcomm Incorporated | Defining dynamics of multiple neurons |
GB2570433A (en) * | 2017-09-25 | 2019-07-31 | Nissan Motor Mfg Uk Ltd | Machine vision system |
CN108875846B (zh) * | 2018-05-08 | 2021-12-10 | 河海大学常州校区 | 一种基于改进的脉冲神经网络的手写数字识别方法 |
-
2021
- 2021-02-08 CN CN202110180686.7A patent/CN112966433B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN112966433A (zh) | 2021-06-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11561986B1 (en) | Applied artificial intelligence technology for narrative generation using an invocable analysis service | |
Cingolani et al. | jFuzzyLogic: a java library to design fuzzy logic controllers according to the standard for fuzzy control programming | |
EP4116885A1 (en) | Processing method for neural network model, and related device | |
CN112966433B (zh) | 一种基于即时编译的神经动力学仿真方法及装置 | |
US20140214373A1 (en) | Framework for solving trajectory optimization problems | |
US8046202B1 (en) | Generation of intermediate representations based on user specified elements in a graphical model that enable simulation, propagation and code generation | |
CN112199086A (zh) | 自动编程控制系统、方法、装置、电子设备及存储介质 | |
Kohn | A declarative theory for rational controllers | |
Piller et al. | Declarative language for behaviour description | |
RU2676405C2 (ru) | Способ автоматизированного проектирования производства и эксплуатации прикладного программного обеспечения и система для его осуществления | |
CN117634617B (zh) | 知识密集型推理问答方法、装置、电子设备和存储介质 | |
Lu et al. | Formal modelling of a sheet metal smart manufacturing system by using Petri nets and first-order predicate logic | |
Assunção et al. | Fast-DENSER: Fast deep evolutionary network structured representation | |
CN110968308A (zh) | 一种用于改变用于生成源代码的模型的方法 | |
US11126408B2 (en) | Incremental code generation method | |
US20230289640A1 (en) | Quantum circuit simulation | |
CN112748953A (zh) | 基于神经网络模型的数据处理方法、装置及电子设备 | |
CN115794137A (zh) | 面向gpu的人工智能模型部署方法及设备 | |
Rączka et al. | ALMM solver: the idea and the architecture | |
CN114492321A (zh) | 基于xml的神经网络模型生成方法、设备和存储介质 | |
Pavlov et al. | The Application of the Knowledge-Based Systems Development Platform for Creating Scenario Analysis Support Tools | |
Glinskiy et al. | The automated construction of a scheme for solving compute-intensive problems based on the ontological approach and Semantic Web technologies | |
CN115545213B (zh) | 一种基于图形化行为树和强化学习的建模方法及装置 | |
CN117667045A (zh) | 集成深度学习和plc语言的边缘控制器及代码生成方法 | |
Misnika et al. | Technique for development and organization of background information-analytical processes in cyber-physical systems based on neural-fuzzy Petri nets |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |