开源脉冲神经网络深度学习框架——惊蛰(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. 安装使用Pycharm及Anaconda最全教程

    网上安装anaconda和pycharm的教程很多,然而很少有人能够很详细地讲解,特别是对于pycharm的虚拟环境相关的说明很少,我也是懵逼的用了两年多,经常发现之前pycharm安装的第三方库,明 ...

  2. S5830 android 2.3.4和2.3.7

    12年元旦买的手机S5830,原机自带2.3.4的系统. 看到人家的机子2.3.6的效果稍微绚一点,动了想刷机的念头. 前两天刷了2.3.7,效果还满意,用的还舒服,感觉就是有些费电, 本来就对智能手 ...

  3. [MIT6.006] 11. Integer Arithmetic, Karatsuba Multiplication 整型算术,Karatsuba乘法

    很多人不喜欢√2的表达,他们认为它不是一个数. 一.卡塔兰数 Catalan numbers 在数方面上,有个著名的数叫卡塔兰数 Catalan numbers,它是组合数学中一个常在各种计数问题中出 ...

  4. c++的基本点

    C++的要点:    一个思想:抽象(和分类)的思想:    三个概念:类.对象.消息:    三个特征:封装.继承.多态:    一个观念:函数服务于数据.      程序 = 对象 + 消息   ...

  5. C# 中的数字分隔符 _

    编写 C# 代码时,我们时常会用到很大的数字,例如下面定义的变量: const long loops = 50000000000; 您能快速读出这是多少吗?是不是还是会有很多人把光标定位到最后一位,然 ...

  6. seaborn库中柱状图绘制详解

    柱状图用于反映数值变量的集中趋势,用误差线估计变量的差值统计.理解误差线有助于我们准确的获取柱状图反映的信息,因此打算先介绍一下误差线方面的内容,然后介绍一下利用seaborn库绘制柱状图. 1.误差 ...

  7. Linux mysql 修改密码 三种方式(转载)

    注明:本文为转载,原文地址:https://www.cnblogs.com/chuckjam/archive/2018/08/10/9456255.html 前言 有时我们会忘记Mysql的密码,或者 ...

  8. apiAutoTest-更新2020/11/23

    原始版本 简书:https://www.jianshu.com/p/6bfaca87a93b 博客园:https://www.cnblogs.com/zy7y/p/13426816.html test ...

  9. MySQL错误修复:Table xx is marked as crashed and last (automatic?) repair failed

    问题一 Table xx is marked as crashed and last (automatic?) repair failed 有开发找到我,说数据库坏了,连不上数据库,看了下 MySQL ...

  10. Codeforces741D

    dsu on tree 题目链接 点我跳转 题目大意 一棵根为 \(1\) 的树,每条边上有一个字符(\(a-v\)共\(22\)种) 一条简单路径被称为Dokhtar-kosh当且仅当路径上的字符经 ...