开源脉冲神经网络深度学习框架——惊蛰(SpikingJelly)

背景

  近年来神经形态计算芯片发展迅速,大量高校企业团队跟进,这样的芯片运行SNN的能效比与速度都超越了传统的通用计算设备。相应的,神经形态感知芯片也发展迅速。目前已有各种模态的感知芯片,其中如北京大学黄铁军教授团队的Vidar相机,功能上仿照视网膜中央凹,能输出脉冲信号,高速情况下实现比传统相机更清晰的采样。脉冲网络研究领域顶会文章与Nature Science刊物文章也在逐年增长(如下图)。通过ANN转换SNN,SNN首次达到媲美ANN的性能。同时,随着梯度替代(surrogate gradient)法的提出,直接利用梯度下降法进行SNN训练成为可能。目前,利用SNN进行深度学习已经成为机器学习领域的研究热点,在视觉分类,目标检测,强化学习等领域取得了不错的成果。

*仅计算Research与Reviews文章

  SpikingJelly的前身SpikingFlow,作为北京大学本科生《神经网络的计算基础》& 研究生《机器学习原理》课程教学实验平台,已经有将近一年的时间。SpikingFlow与SpikingJelly的关系犹如Minix之于Linux,前者作为教学用的示例,后者在前者的基础上改进,吸纳教学过程中的意见,新的工程实践和研究成果。

  

  如上图所示,目前已有的机器学习框架和脉冲网络仿真框架都无法彼此兼容,传统的脉冲网络框架无法与当下成熟的深度学习技术相结合。因此,SpikingJelly也就应运而生。同时期,国外也诞生了类似的Norse框架,两者达成了良性互动,共同推进了该领域的发展。

图源: Deep learning incorporating biologically inspired neural dynamics and in-memory computing

脉冲神经网络介绍

  脉冲神经网络,简称SNN,被誉为第三代人工神经网络,是由大脑这样一个脉冲信号处理系统启发而构建的。大脑具有高级智能,并且功耗较低(有一种说法是仅相当于一个25w的灯泡)。通过借鉴大脑中的脉冲结构,SNN能够在保持低功耗的前提下,达到与ANN相当的性能。

  SNN的结构仿照了生物神经系统的组织结构,现在使用的深度SNN通常采用前向结构(如下图所示)。相比前向ANN,SNN的复杂性不仅体现在连接权重与拓扑的多样性,还体现在神经元内在的动力学方程上,能够同时处理时间域与空间域的信息。

  

  基于SNN的诸多特性,其应用前景十分广阔,从简单的图像分类,动作识别,音频处理到复杂的音视频信号,强化学习,机器人控制任务,都是SNN施展自己本领的潜在舞台。

图源: TrueNorth: Accelerating From Zero to 64 Million Neurons in 10 Years

框架概况

  惊蛰(SpikingJelly)是一个开源脉冲神经网络深度学习框架(框架主页:https://git.openi.org.cn/OpenI/spikingjelly)。SpikingJelly框架整体结构图如下,使用PyTorch作为自动微分后端,利用C++和CUDA扩展进行性能增强,同时支持CPU和GPU。框架中包含数据集,可视化,深度学习三大模块。目前社区主要由北大媒体学习组和鹏城实验室人工智能中心运营管理。

  在SpikingJelly框架中,神经元的动态被描述为充电,放电,重置三个过程,与图中三种颜色分别对应。

  框架支持梯度替代法与ANN转SNN法两种主流SNN的深度学习算法,也是在实际任务上目前性能最好的两种算法。之前介绍的神经元动态方程中,只有放电过程是不可微分的,为了解决这个问题,近年来领域内提出了替代梯度方法直接训练SNN,原理是梯度在反向传播时采用替代函数来近似放电过程中的阶跃函数。另一种深度学习方法,从ANN转换为相应的SNN,也受到了重点关注。这是由于ANN中的ReLU神经元非线性激活和SNN中IF神经元的发放率有着极强的相关性,可以基于类似的相关性将训练好的ANN转换为对应的SNN,省去了直接训练SNN的难题。

  框架提供了Neuron,Layer,Functional,Encoding四个基本模块:

  • Neuron提供了深度SNN中最常用的LIF和IF神经元;
  • Layer提供了SNN中特有的网络层;
  • Functional提供深度SNN所需的函数;
  • Encoding提供常用的脉冲编码器。

  框架还集成了多个神经形态数据集,因为大多数神经形态数据集需要专用软件读取,使用非常繁琐。因此SpikingJelly将常用神经形态数据集统一进行了封装,只需一行代码即可进行调用,来自其它框架,其他类型的数据也可以通过编码器间接使用。

  框架还提供了一些对神经元状态,脉冲特征进行可视化的API,方便研究者直接使用,不需要再去进行繁琐的绘图调整。

  框架还提供了丰富的教程,通俗易懂,初学者和资深开发者均可快速上手,包含了方便初学者上手学习的基础教程,和实现具体任务的样例教程。

  SpikingJelly的模块可以无缝嵌入到PyTorch的ANN模块中,学习成本很低,只要使用者事先掌握PyTorch,就能够轻松上手SpikingJelly,框架还提供了详细的双语文档,部分经典算法还提供了原始论文的相关内容,方便用户在开发的同时学习领域内的研究成果。

  由于SNN的发放脉冲特征图中绝大部分位置都是0,针对SNN发放脉冲稀疏的特点,框架中加入了一些初步的工作,其中主要是稀疏矩阵运算的加速。根据实测,在矩阵规模大,且稀疏度高时,稀疏矩阵乘法的速度远高于普通矩阵乘法。

  此外,SpikingJelly的模块在任务性能上也高度优化,不需要复杂的设计,只需要简单的网络和基本的神经元就可以达到STOA的性能。

  在常用的benchmark上,框架实测ANN转SNN的性能损失很低,这使得很多不了解SNN的人也可以将他们的工作转换为相应的SNN,并达到接近的性能。

代码风格

  在神经元的实现中,隐状态被封装在模块内部,而PyTorch, Norse等框架的状态定义模块外部,这可以避免使用者手动维护神经元膜电位,并且在搭建多层网络时可以直接堆叠。

  前面介绍的直接堆叠就是这里的逐步传播方式,支持用Sequential直接包装网络,使用简单。框架同样也提供了逐层传播的方式,并行度更高,但也会带来稍大的显存开销。两种方法在前向,反向传播时均完全等价。

  下面是一个简单的网络示例,熟悉ANN的用户能够很快上手SNN的搭建。

  ANN2SNN模块支持两种后端模型表示,同时也支持用户自定义对网络进行转换的方式。

开源生态

  SpikingJelly开源社区概况:

  • 使用启智开源许可证1.0;
  • 代码托管在OpenI/GitHub,文档由ReadTheDocs自动生成;
  • Star: 62, Fork: 15, 在SNN研究领域比较受欢迎;
  • 关注者主要来自国内外高校、科研机构;

  • 过去14天的访问情况:95 Clones, 1053 Views;

  在刚刚落幕的OpenI/O 2020启智开发者大会上,SpikingJelly项目成为了首批“启智社区优秀开源项目”,受到了社会各界的更多关注。

  在保持SpikingJelly平台自身迭代的同时,SpikingJelly开发团队热烈欢迎志同道合的开发者和研究者共同参与框架的开发建设。目前社区已经有一些活跃的开发者参与其中。目前SpikingJelly平台的核心人员如下图所示。

开源脉冲神经网络深度学习框架——惊蛰(SpikingJelly)的更多相关文章

  1. 深度学习框架TensorFlow在Kubernetes上的实践

    什么是TensorFlow TensorFlow是谷歌在去年11月份开源出来的深度学习框架.开篇我们提到过AlphaGo,它的开发团队DeepMind已经宣布之后的所有系统都将基于TensorFlow ...

  2. 学习《TensorFlow实战Google深度学习框架 (第2版) 》中文PDF和代码

    TensorFlow是谷歌2015年开源的主流深度学习框架,目前已得到广泛应用.<TensorFlow:实战Google深度学习框架(第2版)>为TensorFlow入门参考书,帮助快速. ...

  3. TensorFlow实战Google深度学习框架-人工智能教程-自学人工智能的第二天-深度学习

    自学人工智能的第一天 "TensorFlow 是谷歌 2015 年开源的主流深度学习框架,目前已得到广泛应用.本书为 TensorFlow 入门参考书,旨在帮助读者以快速.有效的方式上手 T ...

  4. 推荐GitHub上10 个开源深度学习框架

    推荐GitHub上10 个开源深度学习框架   日前,Google 开源了 TensorFlow(GitHub),此举在深度学习领域影响巨大,因为 Google 在人工智能领域的研发成绩斐然,有着雄厚 ...

  5. ArXiv最受欢迎开源深度学习框架榜单:TensorFlow第一,PyTorch第四

    [导读]Kears作者François Chollet刚刚在Twitter贴出最近三个月在arXiv提到的深度学习框架,TensorFlow不出意外排名第一,Keras排名第二.随后是Caffe.Py ...

  6. 人工智能深度学习框架MXNet实战:深度神经网络的交通标志识别训练

    人工智能深度学习框架MXNet实战:深度神经网络的交通标志识别训练 MXNet 是一个轻量级.可移植.灵活的分布式深度学习框架,2017 年 1 月 23 日,该项目进入 Apache 基金会,成为 ...

  7. 28款GitHub最流行的开源机器学习项目,推荐GitHub上10 个开源深度学习框架

    20 个顶尖的 Python 机器学习开源项目 机器学习 2015-06-08 22:44:30 发布 您的评价: 0.0 收藏 1收藏 我们在Github上的贡献者和提交者之中检查了用Python语 ...

  8. TensorFlow+实战Google深度学习框架学习笔记(5)----神经网络训练步骤

    一.TensorFlow实战Google深度学习框架学习 1.步骤: 1.定义神经网络的结构和前向传播的输出结果. 2.定义损失函数以及选择反向传播优化的算法. 3.生成会话(session)并且在训 ...

  9. [深度学习大讲堂]从NNVM看2016年深度学习框架发展趋势

    本文为微信公众号[深度学习大讲堂]特约稿,转载请注明出处 虚拟框架杀入 从发现问题到解决问题 半年前的这时候,暑假,我在SIAT MMLAB实习. 看着同事一会儿跑Torch,一会儿跑MXNet,一会 ...

随机推荐

  1. 7.1range函数和冒泡排序

    range函数和冒泡排序 一.range函数 在Python开发应用中 range函数相当重要,也比较常用: ​ 首先看range函数的原型: range(start, end, scan) ​ 参数 ...

  2. delphi 设置默认控件得到焦点

    如果同一窗体有多个按钮的话,追踪源码发现最后是taborder来的 如: 在空白窗体上拖入两个button (btn1,btn2) 如果在btn2设置default = True 运行后,默认焦点还是 ...

  3. 内网渗透 day1-基础

    粘滞键和放大镜 1. 到/windows/system32下用takeown改变该文件夹下的文件拥有权(因为粘滞键和放大镜都在system32文件夹下) cd /Windows/system32    ...

  4. <摘自>飞:jxl简析[ http://www.emlog.net/fei ]

    <摘自>飞:jxl简析:http://www.emlog.net/fei 最近,完成了一个网上报表系统,刚巧用到了一个 JAVA 操作 excel 表格的 API .闲来无事,就将其大概的 ...

  5. c++与c

    const char* c_str ( ) const; Get C string equivalent Generates a null-terminated sequence of charact ...

  6. ubuntu安装软件自动交互

    在ubuntu下安装软件过程中可能会出现需要你输入密码或者其他的一些交互类的操作,这样在脚本安装的时候就可能出现阻断,这个在ubuntu里面已经考虑到了这个情况,以前我在安装这个的时候,通过的是脚本传 ...

  7. 修改centos6启动动画(plymouth方式)

    centos6默认的启动动画是一个白蓝色的进度条,背景全黑色,现在需要对centos的启动动画进行定制 在查询了一些资料以后,发现有一个软件是可以对启动动画进行定制的,名字叫plymouth 这个在c ...

  8. Jar 和 war 区别

    jar包:对于学习java的人来说应该并不陌生.我们也经常使用也一些jar包.其实jar包就是java的类进行编译生成的class文件就行打包的压缩包而已.里面就是一些class文件.当我们自己使用m ...

  9. MySQL第01课- CentOS + 单实例MySql编译安装总结

    2016年2月,从oracle转向MySql ,碰上几个坑,特此记录 总结 1.注意环境变量.配置文件,操作过程不能出错 2.相比rpm方式安装,编译安装方式可以指定安装路径,再说安装是简单活,将来安 ...

  10. Hadoop大数据平台搭建之前期配置(2)

    环境:CentOS 7.4 (1708  DVD) 工具:VMware.MobaXterm 一. 克隆大数据集群 1. 选中已经进行了基本配置的虚拟机,进行克隆. 2. 此处改为"创建完整克 ...