Page 362 - 《软件学报》2025年第4期
P. 362

1768                                                       软件学报  2025  年第  36  卷第  4  期


                 构在图像数据与序列数据处理上拥有的优势, 也吸收了脉冲序列作为传递的信息时在功耗方面的优化, 更利于边
                 缘部署. 然而, 这种结构无法彻底解决传统            ANN  固有的缺陷, 如模型过于复杂时训练难度增加, 可解释性弱, 以及
                 对于硬件故障的容错能力差等.

                 1.4.2    动态拓扑  SNN
                    进化算法    (evolutionary algorithm, EA) 是一种基于种群的元启发式算法, 可用于直接优化网络拓扑结构和模
                 型超参数, 或优化突触权重和延迟          [103,104] . ESNN  是一种结合了  SNN  和进化算法的神经网络模型. 在      ESNN  中, 输
                 入数据被编码成脉冲序列并传递到网络中, 利用脉冲网络的进化结构动态生成新的脉冲神经元, 并将其添加到相
                 应的神经元储备类别中. 目前, 常用的进化算法有差分进化、语法进化、和谐搜索算法和粒子群优化等                                [105−107] .
                    除了采用进化算法外, 对神经元模型进行改进, 让脉冲神经元获得不断自我优化的能力, 也可以得到                                ESNN.
                 文献  [108] 在传统  LIF  脉冲神经元模型的基础上提出了进化脉冲神经元和进一步改进的模型——自适应进化脉
                 冲神经元, 所提出的神经元模型能根据突触前的输入和随后的神经元发射事件, 自适应地调整突触前的输入电流.
                 实验证明, 所提出的进化模型还能降低网络发射活动的速率, 使网络对输入的响应速度更快, 但触发的脉冲信号和
                 计算操作更少, 有助于在神经形态硬件上实现              SNN  模型的低功耗计算.

                    目前, ESNN  在神经形态硬件上的实现很受欢迎, 因为这类动态拓扑的                   SNN  不依赖于模型的特定特征, 可以
                 灵活地发挥所选择硬件平台的特有优势, 适用于各种设备和应用程序. 然而, 目前对于较为复杂的模型或应用程
                 序, ESNN  也存在收敛速度较慢的问题, 未来还需要不断优化               ESNN  的训练算法.

                 2   神经形态计算工具链

                    本节将对    SNN  边缘部署的工具链进行介绍, 包括软件编程框架和仿真工具. 不论何时, 开发工具都在一个领
                 域的研究中扮演着重要的角色. 作为算法和物理设备之间的桥梁, 高效且完善的工具链能简化开发过程, 加速应用
                 程序的部署, 促进合作和知识共享, 为一个领域的研究提供更便捷的条件.

                 2.1   软件编程框架
                    编程框架是一种提供了特定功能和结构的软件工具集合, 使开发者不必过多关注底层的技术细节, 只需专注
                 于解决问题和实现功能. 在深度学习领域中, TensorFlow           [109] 、PyTorch [110] 和  Caffe  [111] 这些耳熟能详的框架使得构
                 建和训练神经网络变得简单而快速, 具有广泛的应用场景. 然而, 这些传统框架的原生版本并没有提供专门的神经
                 形态计算支持, 通常需要添加一些第三方库和扩展才能支持                    SNN  模型的开发和训练. 随着神经形态计算及             SNN
                 的快速发展, 为了让研究者们的想法更好地被实现, 设计相应的编程框架十分有必要, 下面简单介绍几种现有的
                 SNN  专用编程框架.
                    BindsNET [112] 是一个用于快速构建和模拟      SNN  的开源 Python 软件包. 它支持   STDP  训练算法, 允许研究人员
                 在  CPU  或  GPU  上测试软件原型, 然后将模型部署到专用硬件上. BindsNET           的缺点在于它无法实现复杂的网络,
                 并且缺乏对延迟突触的支持.
                    SpikingJelly [113] 是一个基于  PyTorch  的开源库, 专门用于构建和训练   SNN. SpikingJelly  支持各种常见的  SNN
                 训练方法, 比如代理梯度法, STDP, ANN-to-SNN       转换法等等. 此外, 通过实现       Tempotron  神经元  [114] , SpikingJelly
                 还可以支持事件驱动的        SNN.
                    SpykeTorch [115] 是基于  PyTorch  的  SNN  开源高速编程框架, 采用时间编码方案, 并支持     STDP  和带有奖励调节
                 的  STDP  学习规则  [116] . SpykeTorch  具有很强的通用性, 所有的计算都基于张量, 完全由          PyTorch  函数实现, 在
                 CPU、GPU  或多  GPU  平台上具备即时优化能力.
                    目前, 这些   SNN  专用的编程框架都处于积极开发迭代的过程中, 还存在可扩展性方面的问题, 且不够稳定. 在
                 未来, 扩大这些编程框架的软硬件兼容性并形成稳定版本至关重要. 后文表                       3 简单总结了目前     SNN  专用编程框架.

                 2.2   仿真工具
                    在将  SNN  模型部署到硬件设备前, 通常需要进行软件模拟仿真. 通过软件仿真, 可以验证硬件设计的功能是
   357   358   359   360   361   362   363   364   365   366   367