作为开源脉冲神经网络框架惊蛰(SpikingJelly)的开发者之一,我有幸参加了12月初在北京举办的2020年OpenI开发者大会,并获奖成为首批启智社区优秀开源开发者。借此机会,我想分享一下我的开源经历和感悟。
参与开发
第三代人工神经网络脉冲神经网络(Spiking Neural Network, SNN)具有事件驱动、低功耗、高仿生的特点,一直是神经科学领域的研究热点。近年来机器学习方法逐渐应用于SNN并取得了突破性的性能提升,使用SNN进行深度学习成为新的前沿交叉研究热点。我对于这一新兴的研究方向充满兴趣,但在研究中发现:
传统的深度学习框架并不直接支持SNN,因此许多研究者不得不从零开始实现所需的SNN模块,造成了大量的重复劳动
SNN从生物神经元简化而来,不同开发者对SNN的实现方式不同,造成了定义的混乱,代码难以复用
绝大多数代码都没有配套的文档,给学习和使用带来了麻烦
这些问题是包括我在内的所有SNN深度学习的研究者面临的难题。目前这个领域还没有一个成熟的框架,如果有一个类似于ANN中Caffe、PyTorch那样的深度学习框架则可以解决上述问题。为了我们自己研究的有序进行、实验的顺利开展,以及方便其他研究者的使用,避免重复劳动,实验室的老师和博士生们讨论后决定,自行开发一款全新的开源SNN深度学习框架,即惊蜇(SpikingJelly)。
我个人参与惊蜇的开发,主要原因是:
研究方向与框架的应用背景完全契合,在学习该领域的前沿知识时,可以同时在框架中进行代码实现,理论和实际实验可以顺利结合,互为补充
一个完善的框架有助于我顺利进行各种实验、与他人分享我的研究成果,并确保我的研究成果的可复现性
希望能够继续为开源社区做出更多贡献,减少开发者的重复劳动,提升科研效率
惊蛰框架的开发,在2019年11月正式开始,早期主要是由包括我在内的北京大学的几位博士生,在老师们指导下进行开发。开发之初,我们就将此框架完全开源在GitHub上,希望能够吸引其他感兴趣的开发者参与贡献、共同推进。
社区支持
惊蛰框架在开发过程中逐渐受到脉冲神经网络领域研究者的关注,并得到了许多开发者和开源社区的支持,主要包括:
一些用户通过issue的方式提供建议
开发者报告bug,或提交pull request来修复bug
鹏城实验室的开发者提供了CUDA性能优化的建议、补充CUDA代码、补充文档教程翻译
OpenI社区提供了镜像服务器,在国内拥有更快的访问速度;提供了无限存储空间的公网存储服务器,惊蛰框架据此建立了部分数据集的下载镜像
鹏城云脑提供了强大的算力支持,惊蛰框架在云脑上进行了大量性能实验和代码调试
最后,惊蛰项目还成功申请成为首批启智社区优秀开源项目,作为开发者之一,我也很荣幸地参加了2020年OpenI开发者大会,获益匪浅。
开源心得
在开源社区的支持下,经过一年的开发,惊蛰框架已经颇具规模,开发者可以通过使用惊蛰框架迅速搭建起高性能脉冲神经网络并进行深度学习。回顾这一年的开源经历,我的总结如下:
积极拥抱开源。众人拾柴火焰高,个人的能力终究有限,而开源社区的力量是无穷的。开源的项目可以吸引广大开发者参与贡献,共同开发;开源的代码接受所有用户的审查,有助于敦促开发者提升代码质量;好的项目还能成为新项目的基石,衍生出更为丰富的功能
注重教程和文档的编写。好的开源项目要吸引用户的使用和开发者的参与,就必须注重易用性,不能有太高的上手和开发门槛,因此需要注重教程和文档的编写。条理清晰、通俗易懂的教程和文档是对用户和开发者的尊重,只有真心尊重用户和开发者,他们才会乐于使用并为项目做出贡献